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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2010, 21:30   #1
Маришка_Курносова
Пользователь
 
Регистрация: 01.07.2010
Сообщений: 24
Восклицание Си/Си++ Задача о массовом кроссе представленном в виде целочисленной матрицы.

Результаты забега в массовом кроссе представлены целочисленной матрицей K(n,4), где n - число участников;
K с индексом i1, K с индексом i2 - момент старта i-го участника в минутах и секундах соответственно;
K с индексом i3, K с индексом i4 - аналогичный момент финиша,
i = 1,2,...,n.
Найти номера(индексы) трёх призеров забега и их результаты(за один просмотр матрицы).


Сама мало понимаю как это должно происходить.

P.S. буду благодарна за подсказки к решению или готовые варианты ответов, даже если не на Си. Заранее спасибо. Ребят, если можно, поскорее, пожалуйста.
Маришка_Курносова вне форума Ответить с цитированием
Старый 01.07.2010, 22:07   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Код:
#include <iostream>
#include <fstream>

using namespace std;

int ztime( int sth[4] )
{
	return ((sth[3] - sth[1])*60 + sth[2] - sth[0]);
}

int main(void)
{
	cout << "All input information must be in file input.txt";

	ifstream infile("input.txt");

	int t; //первое число в файле должно указывать количество спортсменов

	infile >> t;

	//выделение памяти под матрицу
	int **matrix = new int *[t];
	for (int i = 0; i<t; i++)
	{
		matrix[i] = new int[4];
	}

	//заполнение матрицы числами из файла
	for (int i = 0; i < t; i++)
	{
		for (int j = 0; j < 4; j++)
			infile >> matrix[i][j];
	}

	int first, second, third, tf, ts, tt;

	if (t > 0)
	{
		first = 0;
		tf = ztime(matrix[0]);
	}
	
	if (t > 1)
	{
		ts = ztime(matrix[1]);
		if (ts > tf)
			second = 1;
		else
		{
			int g = ts;
			ts = tf;
			tf = g;
			first = 1;
			second = 0;
		}
	}

	if (t > 2)
	{
		tt = ztime(matrix[2]);
		if (tt > ts)
		{
			tt = 3;
		}
		else if (tt > tf)
		{
			int g = tt;
			tt = ts;
			ts = g;
			third = second;
			second = 2;
		}
		else
		{
			int g = tt;
			tt = ts;
			third = second;
			ts = tf;
			second = first;
			tf = g;
			first = 2;
		}
	}

	//вот сам просмотр, если не считать 3 подготовительных шагов
	for (int i = 3; i < t; i++)
	{
		int g = ztime(matrix[i]);
		if (g < tf)
		{
			tt = ts;
			ts = tf;
			tf = g;
			third = second;
			second = first;
			first = i;
		}
		else if (g < ts)
		{
			tt = ts;
			ts = g;
			third = second;
			second = i;
		}
		else if (g < tt)
		{
			tt = g;
			third = i;
		}
	}

	cout << "1st man index: " << first << "  his time: " << tf << endl;
	cout << "2nd man index: " << second << "  his time: " << ts << endl; 
	cout << "3rd man index: " << third << "  his time: " << tt << endl;

	system("pause");

	return 0;
}
mMAg вне форума Ответить с цитированием
Старый 01.07.2010, 22:25   #3
Маришка_Курносова
Пользователь
 
Регистрация: 01.07.2010
Сообщений: 24
По умолчанию

разъясните, пожалуйста, как должен быть заполнен файл input.txt?
Как я поняла:
1) количество участников
2) момент старта 1-го участника в минутах и секундах
3) момент старта 2-го участника в минутах и секундах
4) момент старта i-го участника в минутах и секундах
5) аналогичный момент финиша с 1 по i-тый

я права?
Маришка_Курносова вне форума Ответить с цитированием
Старый 01.07.2010, 22:36   #4
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

нет: всё в точности как и для матрицы:
1) количество участников
2)
21) момент старта в минутах
22) момент старта в секундах
23) момент финиша в минутах
24) момент финиша в секундах
соотвсетсвенно 2) повторяется по количеству участников
mMAg вне форума Ответить с цитированием
Старый 01.07.2010, 22:38   #5
Маришка_Курносова
Пользователь
 
Регистрация: 01.07.2010
Сообщений: 24
По умолчанию

Поняла, Огромное спасибо, я от вас просто в восхищении. вы мне очень помогли.

может я чего-то не совсем понимаю, при тестировании, у меня индекс третьего участника выдаёт не подходящую цифру.

Т.е. при указанных в input.txt данных:
Цитата:
4

1 10
2 10
1 10
3 10
1 10
4 10
1 10
5 10
программа выдаёт :
Цитата:
All input information must be in file input.txt
1st man index: 0 his time: 1
2nd man index: 1 his time: 2
3rd man index: 17 his time: 3

объясните, пожалуйста, что не так?

Последний раз редактировалось Stilet; 02.07.2010 в 09:37.
Маришка_Курносова вне форума Ответить с цитированием
Старый 01.07.2010, 23:38   #6
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Если честно, то я без понятия. У меня нет среды, чтобы откомпиллить код и в режиме дебага посмотреть, что там в нём не так. А заниматься лишним нет никакого желания. Прогоните под дебагом, посмотрите, в каком месте соответственная переменная получает неверное значение. Я так глазами сейчас пробегусь, но вряд ли что-либо найду.

Код:
int ztime( int sth[4] )
{
	return ((sth[2] - sth[0])*60 + sth[3] - sth[1]);
}
Вместо аналагичной функции в моём коде.

Последний раз редактировалось Stilet; 02.07.2010 в 09:38.
mMAg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упорядочить строку целочисленной прямоугольной матрицы Woodyy Паскаль, Turbo Pascal, PascalABC.NET 8 06.06.2009 17:15
Создание процедуры целочисленной матрицы на языке паскаль. Darya Помощь студентам 3 11.05.2009 18:40
Прога в виде матрицы! prog38 Помощь студентам 25 28.04.2009 03:59