Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.06.2012, 14:00
Reaper052 Reaper052 вне форума
Прохожий
 
Регистрация: 13.06.2012
Сообщения: 5
Репутация: 10
По умолчанию Delphi, массивы, запись и чтение из файла

Привет всем, помогите пожалуйста дописать программу, не первый день уже воюю с кодом и башка совсем уже не варит.

Собственно условие задания: "В файле 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  
Старый 13.06.2012, 14:40
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Опять олимпиадные задачки. Прибил бы тех кто эту шизу придумывает.
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
Bargest (13.06.2012)
  #3  
Старый 13.06.2012, 14:48
Reaper052 Reaper052 вне форума
Прохожий
 
Регистрация: 13.06.2012
Сообщения: 5
Репутация: 10
По умолчанию

Хах, согласен. Но это не олимпиадные задачки, а одно из заданий на экзамене по основам алгоритмизации и языкам программирования
Ответить с цитированием
  #4  
Старый 13.06.2012, 14:50
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Прибил бы тех кто эту шизу придумывает.
Да уж. Только это ближе к школьной олимпиаде.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 13.06.2012, 15:21
Reaper052 Reaper052 вне форума
Прохожий
 
Регистрация: 13.06.2012
Сообщения: 5
Репутация: 10
По умолчанию

Первый курс факультета "бизнес-информатика" лол
Так мне поможет кто нибудь дописать? А то сдавать то надо
Ответить с цитированием
  #6  
Старый 13.06.2012, 15:59
Аватар для R-18Rus
R-18Rus R-18Rus вне форума
Новичок
 
Регистрация: 08.04.2012
Сообщения: 68
Версия Delphi: Delphi 7
Репутация: 127
По умолчанию

Поправь, если ошибаюсь
Код:
FOR I:=0 TO m-1 DO
по-моему это цикл для столбцов, а не строк.
Ответить с цитированием
  #7  
Старый 13.06.2012, 16:05
Reaper052 Reaper052 вне форума
Прохожий
 
Регистрация: 13.06.2012
Сообщения: 5
Репутация: 10
По умолчанию

Да не, вроде для строк...
Ответить с цитированием
  #8  
Старый 13.06.2012, 16:19
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

брейкпоинтами надо отлаживать, или можно разбить код на функции
Ответить с цитированием
  #9  
Старый 13.06.2012, 16:40
Reaper052 Reaper052 вне форума
Прохожий
 
Регистрация: 13.06.2012
Сообщения: 5
Репутация: 10
По умолчанию

Если знаете как, то напишите пожалуйста, я уже не в состоянии...
Ответить с цитированием
  #10  
Старый 13.06.2012, 16:50
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

я знаю так: писать сразу маленькими функциями, каждую из которых легко проверить
если переписывать желания нет, то должно быть желание изучить что такое breakpoints
или даже можно накидать везде в коде writeln-ов чтобы понять что там происходит
Ответить с цитированием
  #11  
Старый 13.06.2012, 23:32
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Если тебе размерность данных уже известна, зачем ты читаешь до конца файла? Читай нормально, соответсвенно, если не удалось считать - то данные неправильные и можно просто "упасть".
2. Не увидел отдельного цикла по строкам. Он "спрятан" во внешнем цикле.
3. Лучше оформить чтение и расчет отдельными блоками, так будет проще понимать и отлаживать.
4. Если не ошибаюсь, то после SEEKEOLN(F) надо еще считать сам конец строки (см http://docwiki.embarcadero.com/CodeS...kEoln_(Delphi))
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:54.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter