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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2010, 14:35   #1
BackSlash
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 39
Вопрос Помогите Найти ошибку.Задача на массив

Вычислить F=(Sp+So)/(Sp-So) , где Sp сумма положительных элементов в нечетных строках матрицы Y [9][12], а So сумма отрицательных элементов в четных строках той же матрицы.

Код
Код:
#include <stdafx.h>

void form_mas (double *Arr,int row,int col);
void out_mas (double *Arr,int row,int col);
double calc_F (double *Arr,int row,int col);

int main()
{
	int const row=9;
	int const col=12;
	double Arr [row * col];
	form_mas ((double *)Arr, row, col);
	out_mas ((double *)Arr, row, col);
	printf("\nCalculating_F = %lf\n", calc_F((double*)Arr,row,col));
	return 0;
}

void form_mas (double *Arr,int row,int col){
srand((unsigned int)time(0)); 	
	for (int i = 0; i < row; i++)
		for (int j = 0; j < col; j++)
			Arr[i * col + j] = rand() % 101;
}

void out_mas (double *Arr, int row, int col){
	for (int i=0;i<row;i++){
		for (int j=0;j<col;j++)
		printf("%.f ", Arr[i * col + j]);
		printf("\n");
	}
}

double calc_F(double *Arr, int row, int col){
	double Sp=0,
		   So=0;
	for (int i = 0; i < row; i++)
		for (int j = 0; j < col; j++)
			if (i % 2 == 0)//Если строка четная то идет сумма отриц элементов в строках матрицы
			{
				if (Arr[i * col + j] < 0) So += Arr[i * col +j];
			}
			else
				if (Arr[i * col + j] > 0) Sp += Arr[i* col + j];
	return (Sp + So) / (Sp - So);
}
В ответе всегда получается 1...
Что не так?
BackSlash вне форума Ответить с цитированием
Старый 10.01.2010, 15:14   #2
Serebro
FORTRAN programmer
Форумчанин
 
Регистрация: 08.12.2009
Сообщений: 153
По умолчанию

Цитата:
Сообщение от BackSlash Посмотреть сообщение
Вычислить F=(Sp+So)/(Sp-So) , где Sp сумма положительных элементов в нечетных строках матрицы Y [9][12], а So сумма отрицательных элементов в четных строках той же матрицы.

Код
Код:
#include <stdafx.h>

void form_mas (double *Arr,int row,int col);
void out_mas (double *Arr,int row,int col);
double calc_F (double *Arr,int row,int col);

int main()
{
	int const row=9;
	int const col=12;
	double Arr [row * col];
	form_mas ((double *)Arr, row, col);
	out_mas ((double *)Arr, row, col);
	printf("\nCalculating_F = %lf\n", calc_F((double*)Arr,row,col));
	return 0;
}

void form_mas (double *Arr,int row,int col){
srand((unsigned int)time(0)); 	
	for (int i = 0; i < row; i++)
		for (int j = 0; j < col; j++)
			Arr[i * col + j] = rand() % 101;
}

void out_mas (double *Arr, int row, int col){
	for (int i=0;i<row;i++){
		for (int j=0;j<col;j++)
		printf("%.f ", Arr[i * col + j]);
		printf("\n");
	}
}

double calc_F(double *Arr, int row, int col){
	double Sp=0,
		   So=0;
	for (int i = 0; i < row; i++)
		for (int j = 0; j < col; j++)
			if (i % 2 == 0)//Если строка четная то идет сумма отриц элементов в строках матрицы
			{
				if (Arr[i * col + j] < 0) So += Arr[i * col +j];
			}
			else
				if (Arr[i * col + j] > 0) Sp += Arr[i* col + j];
	return (Sp + So) / (Sp - So);
}
В ответе всегда получается 1...
Что не так?
У тебя все элементы массива задаются положительными, вот и весь ответ.
Serebro вне форума Ответить с цитированием
Старый 10.01.2010, 15:17   #3
BackSlash
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 39
По умолчанию

Спасибо, я бы недопер =)
- 10 + rand() % 21; замену сделаю и все норм, я прав? =)
BackSlash вне форума Ответить с цитированием
Старый 10.01.2010, 16:10   #4
Serebro
FORTRAN programmer
Форумчанин
 
Регистрация: 08.12.2009
Сообщений: 153
По умолчанию

Одно небольшое замечание.

Нужно учесть такой случай:
в нечётных строках только отрицательные элементы, а в чётных --- только положительные, т. е. получится 0/0.
Serebro вне форума Ответить с цитированием
Старый 10.01.2010, 16:14   #5
BackSlash
Пользователь
 
Регистрация: 15.12.2009
Сообщений: 39
По умолчанию

Ок, учту.
Спасибо.Тему можно закрывать.
BackSlash вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку! frantic150 Microsoft Office Excel 0 26.06.2009 18:23
Помогите найти ошибку REztor Помощь студентам 5 16.03.2009 20:04
помогите найти ошибку LyaLyaLya Помощь студентам 6 15.12.2008 20:59
Задача Pascal (Procedure) Помогите найти ошибку! Seriy8888 Паскаль, Turbo Pascal, PascalABC.NET 2 14.12.2008 14:53