![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Привет всем, помогите пожалуйста дописать программу, не первый день уже воюю с кодом и башка совсем уже не варит.
Собственно условие задания: "В файле input.pas задана матрица n x m (где n - кол-во строк, m - кол-во столбцов). В файл output.pas записать номера строк и сумму значений тех строк матрицы, где нет отрицательных элементов; записать ноль, если в строке есть отрицательные элементы." Вот мой код, он компилится, программа запускается, но считает неправильно. Если найдете в чем проблема, напишите пожалуйста правильно: Код:
PROGRAM exam2;
{$APPTYPE CONSOLE}
uses
SysUtils;
VAR
n,m: Integer;
I,J,K,Sum,Arr :Integer;
F,F1:TEXT;
BEGIN
ASSIGNFile(F,'input.PAS');
RESET(F); //Открываем исходный файл для чтения
ASSIGNFile(F1,'output.PAS'); //И выходной для записи
REWRITE(F1);
READLN(F,n,m); //Считаем размерность матрицы - первая строка
J:=0;
WHILE ((NOT EOF(F)) AND (J<n)) DO //До конца файла EOF или количества строк массива
BEGIN
Sum:=0;
FOR I:=0 TO m-1 DO
BEGIN
Read(F,K); //Читаем элемент строки массива
//Проверим на отрицательный элемент и накопим сумму
IF K>=0 Then INC(Sum,K) Else
BEGIN
Sum:=0;
SEEKEOLN(F); //Пропускаем до конца строки
BREAK;
END;
END;
//Выведем номер строки и сумму
WRITELN(F1,J,' ',Sum);
INC(J); //Считаем количество строк
END;
//Закрыли оба файла...
CloseFile(F);
CloseFile(F1);
END. |
|
#2
|
||||
|
||||
|
Опять олимпиадные задачки. Прибил бы тех кто эту шизу придумывает.
|
| Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Bargest (13.06.2012)
| ||
|
#3
|
|||
|
|||
|
Хах, согласен. Но это не олимпиадные задачки, а одно из заданий на экзамене по основам алгоритмизации и языкам программирования
![]() |
|
#4
|
||||
|
||||
|
Цитата:
![]() |
|
#5
|
|||
|
|||
|
Первый курс факультета "бизнес-информатика" лол
Так мне поможет кто нибудь дописать? А то сдавать то надо ![]() |
|
#6
|
||||
|
||||
|
Поправь, если ошибаюсь
Код:
FOR I:=0 TO m-1 DO |
|
#7
|
|||
|
|||
|
Да не, вроде для строк...
|
|
#8
|
|||
|
|||
|
брейкпоинтами надо отлаживать, или можно разбить код на функции
|
|
#9
|
|||
|
|||
|
Если знаете как, то напишите пожалуйста, я уже не в состоянии...
|
|
#10
|
|||
|
|||
|
я знаю так: писать сразу маленькими функциями, каждую из которых легко проверить
если переписывать желания нет, то должно быть желание изучить что такое breakpoints или даже можно накидать везде в коде writeln-ов чтобы понять что там происходит |
|
#11
|
|||
|
|||
|
1. Если тебе размерность данных уже известна, зачем ты читаешь до конца файла? Читай нормально, соответсвенно, если не удалось считать - то данные неправильные и можно просто "упасть".
2. Не увидел отдельного цикла по строкам. Он "спрятан" во внешнем цикле. 3. Лучше оформить чтение и расчет отдельными блоками, так будет проще понимать и отлаживать. 4. Если не ошибаюсь, то после SEEKEOLN(F) надо еще считать сам конец строки (см http://docwiki.embarcadero.com/CodeS...kEoln_(Delphi)) |