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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2013, 17:01   #1
Akika
Пользователь
 
Регистрация: 02.12.2012
Сообщений: 36
По умолчанию Помогите найти ошибку C++

Какие библииотеки убрать? И что с заполнением? Еще с типами напутала. Не могу сама разобраться...

Задача: Три группы студентов, в каждой из которых 20 человек, в сессию сдавали по 3 экзамена. Сведения об оценках каждой группы хранятся в двумерных массивах. Определить лучшую по средней оценке группу.
VS13.

Код:
#include "stdafx.h"
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include "stdafx.h"
#include <iostream>
#include <cstdlib>

int main(){
	system("CHCP 1251");
	int x[20][3], y[20][3], z[20][3], i, j, nmax;
	float c[2], max;
	c[0] = 0; c[1] = 0; c[2] = 0;
	for (i = 0; i<20; i++)
	for (j = 0; j<3; j++) {
		x[i,j] = rand() % 5 + 1;
		c[0] = c[0] + x[i,j];
		y[i,j] = rand() % 5 + 1;
		c[1] = c[1] + y[i,j];
		z[i,j] = rand() % 5 + 1;
		c[2] = c[2] + z[i,j];
	}
	c[0] = c[0] / 60; 
        c[1] = c[1] / 60; 
        c[2] = c[2] / 60;
	max = c[0]; nmax = 0;
	for (i = 0; i<3; i++)
	if (c>max) { max=c; nmax = i; }
	cout<< "" << nmax + 1;
	getch();
}
Akika вне форума Ответить с цитированием
Старый 15.12.2013, 17:24   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

1) Насчет бибиотек, Вы используете лишь три внешние функции: system, cout и getch. Посмотрите в справке сами, какие инклуды они требуют. И зачем дважды подключаете "stdafx.h"?
2)
Код:
	float c[2], max;
	c[0] = 0; c[1] = 0; c[2] = 0;
Объявляете с как массив из двух элементов, но потом обращаетесь к третьему.
3)
Код:
	for (i = 0; i<20; i++)
	for (j = 0; j<3; j++) {
		x[i,j] = rand() % 5 + 1;
		c[0] = c[0] + x[i,j];
		y[i,j] = rand() % 5 + 1;
		c[1] = c[1] + y[i,j];
		z[i,j] = rand() % 5 + 1;
		c[2] = c[2] + z[i,j];
	}
Желательно разделить этапы инициации массивов и расчет средней оценки. Чисто для логичности программы.
Smogg вне форума Ответить с цитированием
Старый 15.12.2013, 17:43   #3
Akika
Пользователь
 
Регистрация: 02.12.2012
Сообщений: 36
По умолчанию

Smogg, благодарю)
Цитата:
И зачем дважды подключаете "stdafx.h"?
Невнимательность...
Akika вне форума Ответить с цитированием
Старый 15.12.2013, 17:56   #4
Akika
Пользователь
 
Регистрация: 02.12.2012
Сообщений: 36
По умолчанию

Smogg, можете подсказать, что не так?
Код:
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <cstdlib>
#include <ctime>

int main(){
	system("CHCP 1251");
	int i, j;
	float x[20][3], y[20][3], z[20][3], nmax;
	float c[2], max;
	c[2] = { 0 };
	for (i = 0; i<20; i++)
	for (j = 0; j < 3; j++) {
		x[i][j] = rand() % 5 + 1;
		c[0] +=x[i][j];
		y[i][j] = rand() % 5 + 1;
		c[1] +=y[i][j];
		z[i][j] = rand() % 5 + 1;
		c[2] +=z[i][j];
	}
	c[0] = c[0] / 60; c[1] = c[1] / 60; c[2] = c[2] / 60;
	max = c[0]; nmax = 0;
	for (i = 0; i<3; i++)
	if (c[i]>max) { max = c[i]; nmax = i; }
	cout << "" << nmax + 1;
	system("pause");
}
Жалуется на cout, хотя <iostream> подключено.
И на преобразование int в float.
Akika вне форума Ответить с цитированием
Старый 15.12.2013, 18:12   #5
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от Akika Посмотреть сообщение
Smogg, можете подсказать, что не так?
Код:
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <cstdlib>
#include <ctime>

int main(){
	system("CHCP 1251");
	int i, j;
	float x[20][3], y[20][3], z[20][3], nmax;
	float c[3] = { 0 }, max; //здесь

	for (i = 0; i<20; i++)
	for (j = 0; j < 3; j++) {
		x[i][j] = rand() % 5 + 1;
		c[0] +=(float)x[i][j]; //тут
		y[i][j] = rand() % 5 + 1;
		c[1] +=(float)y[i][j]; //тут
		z[i][j] = rand() % 5 + 1;
		c[2] +=(float)z[i][j]; //тут
	}
	c[0] = c[0] / 60; c[1] = c[1] / 60; c[2] = c[2] / 60;
	max = c[0]; nmax = 0;
	for (i = 0; i<3; i++)
	if (c[i]>max) { max = c[i]; nmax = i; }
	std::cout << "" << nmax + 1; // и тут
	system("pause");
}
Цитата:
Жалуется на cout, хотя <iostream> подключено.
Забыли про "пространства имен".
Цитата:
И на преобразование int в float.
Здесь это не опасно, но я на днях долго втыкал, почему мой float posX; всегда оказывался равным нулю.
Надо было сжать на 25% но после posX = posX*1/4 получалась дичь.

Последний раз редактировалось Smogg; 15.12.2013 в 18:16.
Smogg вне форума Ответить с цитированием
Старый 15.12.2013, 18:53   #6
Akika
Пользователь
 
Регистрация: 02.12.2012
Сообщений: 36
По умолчанию

Smogg и еще раз спасибо!
А можете подсказать как эти массивы вывести на экран?
Akika вне форума Ответить с цитированием
Старый 15.12.2013, 19:08   #7
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от Akika Посмотреть сообщение
Smogg и еще раз спасибо!
Пожалуйста! )
Цитата:
А можете подсказать как эти массивы вывести на экран?
точно так же, через for:
Код:
using namespace std;
cout << "Группа 1-ая, оценки:\n";
for (int i=0; i < количество_студентов_в_группе; i++)
{
    cout << "\n    Студент "<< i <<"-й:"
          for (int j=0; j < количество_экзаменов; j++)
          {
                 cout << " " << x[i][j];
          }
}
Smogg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите найти ошибку deadh5n1 Помощь студентам 1 13.03.2009 20:56
Помогите найти ошибку lubafffka Паскаль, Turbo Pascal, PascalABC.NET 1 18.12.2008 09:42