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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2016, 21:35   #1
O.Lina
Новичок
Джуниор
 
Регистрация: 22.10.2016
Сообщений: 9
По умолчанию

Добрый вечер!
Хотелось бы получить консультацию гуру))
Считываю посимвольно содержимое файла в двумерный массив (такое задание) после удачного считывания первого символа выдается ошибка "Value was either too large or too small for a character", после чего массив прилично заполняется, но естественно программа не проходит компиляцию, можно ли мне как-нибудь помочь!!! Пожалуйста))

И очень прошу помидорами не кидаться, это моя первая программа

вот кусок кода (если он поможет, конечно)
Код:
    while not eof(t) do begin
    
     for var i:=1 to 10 do begin
    
       for var j:=1 to 31 do begin

            read(t,spisok[i,j]);
            write(spisok[i,j]);   
  
       end;    
    
     end;
     
     end;
Я смотрю люди выкладываю весь код)
Приложу на всякий случай:



Код:
 const infile = 'C:/Pascal/input_file.txt';
 const outfile = 'C:/Pascal/output_file.txt';
 const row = 10;
 const col = 31;
 
 var
 spisok : array [1..row,1..col] of char;
 spisok_etalon :  array [1..row,1..col] of char;
 t: text;
 f: text;

 test: char;
 
 begin
     assign(t, infile); //связали файл с переменной
     assign(f, outfile);
     reset(t); //открыли файл для чтения
     rewrite(f);
     
    
    while not eof(t) do begin
    
     for var i:=1 to row do begin
    
       for var j:=1 to col do begin
            read(t,spisok[i,j]);
            write(spisok[i,j]);     
       end;    
    
     end;
     
     end;
     
     
     close(t);
     close(f);
 end.
______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Вадим Мошев; 22.10.2016 в 23:01.
O.Lina вне форума Ответить с цитированием
Старый 22.10.2016, 21:43   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

for var i что-то не похоже на Паскаль. Какой компилятор?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.10.2016, 21:47   #3
O.Lina
Новичок
Джуниор
 
Регистрация: 22.10.2016
Сообщений: 9
По умолчанию

Alex, мне трудно ответить на Ваш вопрос, я использовала оболочку PascalABC.net (первую которую нашла) и очень надеюсь. что не ошиблась в выборе)

По поводу
Код:
for var i
Вполне может быть, что я написала что-то очень безграмотное, я еще пока никогда не сталкивалась ни с каким программированием)

Последний раз редактировалось Вадим Мошев; 22.10.2016 в 23:01.
O.Lina вне форума Ответить с цитированием
Старый 22.10.2016, 22:00   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А что в файле и на какой строке ошибка?

Цитата:
Сообщение от O.Lina Посмотреть сообщение
после удачного считывания первого символа выдается ошибка "Value was either too large or too small for a character", после чего массив прилично заполняется, но естественно программа не проходит компиляцию
Если "не проходит компиляцию", то и никакого считывания не было бы, как и программы для запуска.
Значит это не во время компиляции ошибка, а во время выполнения.
(в ABC.net они правда очень похоже выводятся)

Цитата:
Сообщение от O.Lina Посмотреть сообщение
Вполне может быть, что я написала что-то очень безграмотное, я еще пока никогда не сталкивалась ни с каким программированием)
не, просто видимо это особенность ABC.net. В стандартных Паскалях этого нет.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.10.2016, 22:04   #5
O.Lina
Новичок
Джуниор
 
Регистрация: 22.10.2016
Сообщений: 9
По умолчанию

Ошибка в 35 строке
Код:
read(t,spisok[i,j]);
про "выполнение" поняла. большое спасибо)
O.Lina вне форума Ответить с цитированием
Старый 22.10.2016, 22:12   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А в файле что?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.10.2016, 22:15   #7
O.Lina
Новичок
Джуниор
 
Регистрация: 22.10.2016
Сообщений: 9
По умолчанию

содержимое файла
Код:
Ivanov1         I.O. 1901 S m
Petrov2         I.O. 1902 M m
Sidorov3        I.O. 1903 A m
Ivanova4        I.O. 1901 S f
Petrova5        I.O. 1902 M f
Sidorova6       I.O. 1903 A f
Ivanov7         I.O. 1901 S m
Petrov8         I.O. 1902 M m
Sidorov9        I.O. 1903 A m
Pushkin10       I.O. 1799 S m
Задание большое и мне потом нужно этот массив хорошенько помучить, но в самом неожиданном месте споткнулась))
O.Lina вне форума Ответить с цитированием
Старый 22.10.2016, 22:21   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А почему "первого символа"?
Вроде ж все читает и выводит.

И ошибка видимо потому что файл закончился.

Вывод:
Код:
Ivanov1         I.O. 1901 S m
Petrov2         I.O. 1902 M m
Sidorov3        I.O. 1903 A m
Ivanova4        I.O. 1901 S f
Petrova5        I.O. 1902 M f
Sidorova6       I.O. 1903 A f
Ivanov7         I.O. 1901 S m
Petrov8         I.O. 1902 M m
Sidorov9        I.O. 1903 A m
Pushkin10       I.O. 1799 S mОшибка времени выполнения: System.OverflowException: Value was either too large or too small for a character.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.10.2016, 22:38   #9
O.Lina
Новичок
Джуниор
 
Регистрация: 22.10.2016
Сообщений: 9
По умолчанию

Alex, я не спорю, может быть ошибка и из-за того, что файл закончился, просто при отладке в окне вывода ошибка выводится после первого символа))
А Вы не могли бы мне подсказать, как можно эту ошибку исправить?

Вот я вижу. что в строке файла 30 символов (15+пробел+4+пробел+4+пробел+1+проб ел+1+пробел) + как я понимаю перевод каретки - я неверно цикл организовываю? while not eof не спасает!

Последний раз редактировалось O.Lina; 22.10.2016 в 22:44.
O.Lina вне форума Ответить с цитированием
Старый 22.10.2016, 22:47   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А, да, иногда и после первого выводится, видимо просто как-то криво реализован вывод ошибок в ABC.NET. Как и то, что выводит какую-то фигню про "too large or too small for a character" вместо нормальной ошибки о конце файла.

В том, что дело именно в конце файла можно убедиться например так:
Код:
....
  ch: char;

begin
....... 
  
  while not eof(t) do 
  begin
    read(t, ch);
    write(ch);     
  end;
Код:
....
  ch: char;

begin
....... 
  
  while true do // бесконечный цикл
  begin
    read(t, ch);
    write(ch);     
  end;

А задача-то какая? Зачем читать символы в двумерный массив?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal ABC.NET gogomon93 Помощь студентам 4 01.12.2013 17:56
Pascal ABC Net sarkisova_elena Паскаль, Turbo Pascal, PascalABC.NET 2 07.02.2012 00:40
Pascal ABC.NET BuTaJI Помощь студентам 1 26.04.2011 20:10
Pascal ABC net DiLLe Паскаль, Turbo Pascal, PascalABC.NET 1 08.06.2010 23:20
Pascal ABC .NET no4_sniper Паскаль, Turbo Pascal, PascalABC.NET 0 17.10.2009 00:21