Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2010, 23:43   #1
amerhant
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 24
По умолчанию Прямоугольная матрица. Не могу найти ошибку

В прямоугольной матрице все элементы положительные числа. В каждом столбце матрицы найти среднее степенное элементов S и определить номер столбца, имеющего мксимальное значение S.
Сложность состоит в том что это все нужно сделать с использованием функций.
amerhant вне форума Ответить с цитированием
Старый 03.01.2010, 23:46   #2
amerhant
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 24
По умолчанию

Вот так вроде работает:
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#define E 40
#define R 50
float max(float x[],int L)
{
	int i;
	float MAX;
	for(MAX = x[0], i = 1; i < L; i++)
	{
	if(x[i] >MAX) MAX = x[i];
	}
	return (MAX);
}
main () {
clrscr ();
randomize ();
    float a [E][R];
    int t=0,b=10,i,j,scale=10;
    int P,Q;
    printf ("strok : ");
    scanf ("%d",&P);
    printf ("stolbow : ");
    scanf ("%d",&Q);

       for (i=0;i<P;i++)
       {
       printf("\n");
       for (j=0;j<Q;j++)
       {
       a[i][j]=(random((b-t+1)*scale)+t*scale)/(float)scale;
       printf ("%2.1f\t",a[i][j]);
       }
       printf("\n");
       }
       printf("\n\n\n");
       float f;
       float result[R];
       float sum, average;
       printf("Vvedite stepeny\n");
       scanf("%f",&f);
       printf("\n");
   for(j=0;j<Q;j++)
       {
	       for(i=0;i<P;i++)
	       {
	       sum=sum+pow(a[i][j],f);
	       }
	       average=pow((sum/P),(1./f));
	       result[j]=average;
	       printf("%d %g\n",j,result[j]);
	       sum=0;
	   }
	   printf("\n\n");
	 float MAX=max(result,Q);
	printf ("Max resultat %g\n", MAX);
	getch();
	return 0;
}

Последний раз редактировалось MaTBeu; 04.01.2010 в 12:59.
amerhant вне форума Ответить с цитированием
Старый 03.01.2010, 23:49   #3
amerhant
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 24
По умолчанию

А вот так мне нужно:
Не могу понять что не так(((
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#define E 40
#define R 50
float stepenn(float *a, int P, int Q, float f)
 {
 int j,i;
 float sum,average;
 float result[R];
 for(j=0;i<Q;j++)
 {
	       for(i=0;i<P;i++)
	       {
	       sum=sum+pow(*a,f);
	       }
	       average=pow((sum/P),(1./f));
	       result[j]=average;
	       sum=0;
 }
	       return result[j];
 }
float max(float x[],int L)
{
	int i;
	float MAX;
	for(MAX = x[0], i = 1; i < L; i++)
	{
	if(x[i] >MAX) MAX = x[i];
	}
	return (MAX);
}
main () {
clrscr ();
randomize ();
    float a [E][R];
    int t=0,b=10,i,j,scale=10;
    int P,Q;
    printf ("strok : ");
    scanf ("%d",&P);
    printf ("stolbow : ");
    scanf ("%d",&Q);

       for (i=0;i<P;i++)
       {
       printf("\n");
       for (j=0;j<Q;j++)
       {
       a[i][j]=(random((b-t+1)*scale)+t*scale)/(float)scale;
       printf ("%2.1f\t",a[i][j]);
       }
       printf("\n");
       }
       printf("\n\n\n");
       float f;
       float result[R];
       float sum, average;
       printf("Vvedite stepeny\n");
       scanf("%f",&f);
       printf("\n");
     result[R]=stepenn(*a,P,Q,f);
   for(j=0;j<Q;j++)
       {
	       
	       printf("%d %g\n",j,result[j]);
	   }
	   printf("\n\n");
	 float MAX=max(result,Q);
	printf ("Max resultat %g\n", MAX);
	getch();
	return 0;
}

Последний раз редактировалось MaTBeu; 04.01.2010 в 12:59.
amerhant вне форума Ответить с цитированием
Старый 12.01.2010, 13:47   #4
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

ну я вижу одну ошибку
надо заменить
Код:
sum=sum+pow(*a,f);
на
Код:
sum=sum+pow(a[i*R+j],f);
помоему так.
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Старый 16.01.2010, 20:09   #5
amerhant
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 24
По умолчанию

Программа ошибок не выдает но из функции не понятно что возвращает(((
amerhant вне форума Ответить с цитированием
Старый 16.01.2010, 21:22   #6
Sapfil
Пользователь
 
Аватар для Sapfil
 
Регистрация: 11.01.2010
Сообщений: 24
По умолчанию

Вот тут по-моему косяк есть - напутаны переменные j и i.

Цитата:
for(j=0;i<Q;j++)
а вообще хоть пояснили - что такое среднее степенное (я. к своему стыду не знаю ) И уж если в программе нет комментариев - поясните где у вас что. Что значат переменные P,Q, E,R, *a, f...
Sapfil вне форума Ответить с цитированием
Старый 16.01.2010, 21:56   #7
amerhant
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 24
По умолчанию

Среднее степени d (или просто среднее степенное) набора положительных вещественных чисел x1,.....xn, определяется как
amerhant вне форума Ответить с цитированием
Старый 16.01.2010, 21:58   #8
amerhant
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 24
По умолчанию

Если в моей проге задать степень как 1
То получим среднее арифметическое
amerhant вне форума Ответить с цитированием
Старый 16.01.2010, 22:02   #9
amerhant
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Sapfil Посмотреть сообщение
Вот тут по-моему косяк есть - напутаны переменные j и i.
Проблема не в этом это счетчик для столбов матрицы, я когда проверял для простоты 1 столбец вводил поэтому не заметил

Последний раз редактировалось amerhant; 16.01.2010 в 22:05.
amerhant вне форума Ответить с цитированием
Старый 17.01.2010, 01:30   #10
Sapfil
Пользователь
 
Аватар для Sapfil
 
Регистрация: 11.01.2010
Сообщений: 24
По умолчанию

У меня несколько вопросов по функции stepen
1. самый важный вопрос: в строке
Цитата:
sum=sum+pow(*a,f);
по-моему предполагается использовать элемент матрицы а[i][j], но вместо этого постоянно используется первый элемент матрицы. Я вообще ооочень сомневаюсь, что так можно передавать матрицу в функцию. Лично у меня подобная конструкция вообще не компилируется на вижуал студии 2008.

Посмотри первый вариант проги. Недаром там функция, аналогичная твоей Stepen - встроена прямо в текст проги. Потому что очень проблематично передавать двумерный массив в функцию. Кстати, для решения этой проблемы можно использовать то, что предложил val_nnm. (это такой метод записи двумерного массива в одномерный. То есть строчки не друг под другом, а друг за другом. Это вообще-то не совсем верное объяснение - я просто передаю суть).

2. в той же функции обяъвляется
Цитата:
float sum
, после этого она не инициализируется, а сразу используется в строчке
Цитата:
sum=sum+pow(*a,f);
. То есть ты говоришь компилятору, что у тебя будет переменная sum. Он выделяет необходимое количество байт памяти. И ему абсолютно по барабану - что там в них в этот момент хранится - там может быть все что угодно. Так что на всякий случай перенеси строчку обнуления sum вот так:

for(j=0;i<Q;j++)
{
sum=0;
for(i=0;i<P;i++)
{
sum=sum+pow(*a,f);
}
average=pow((sum/P),(1./f));
result[j]=average;
}

3.
Цитата:
return result[j];
- что должна возвращать эта строчка. Возвращать ОДНО значение (как это вообще-то сейчас происходит). Или же она должна возвращать весь массив?
Sapfil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
дана целочисленная прямоугольная матрица Jet-Tea Общие вопросы C/C++ 9 02.06.2010 16:41
Не могу найти ошибку в БД Bilargo Помощь студентам 0 26.11.2009 14:00
Не могу найти ошибку Tesmont Помощь студентам 2 20.05.2009 21:00
Дана целочисленная прямоугольная матрица... gregorio Помощь студентам 1 22.04.2009 20:27
Не могу найти ошибку. Picaso18 Паскаль, Turbo Pascal, PascalABC.NET 3 19.01.2009 17:05