|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 (permalink) | |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
![]() В файле хранится информация о каждом студенте группы: фамилия и оценки по трем предметам. Переписать эти данные в другой файл записей, исключая сведения о неуспевающих студентах. Код:
uses crt; type student=record surname:string; mark:array [1..3] of 2..5; end; gr=array[1..20] of student; var f,nf:file of gr; group,goodgroup:gr; i,j,n:integer; begin clrscr; write ('Input number of students (1..20): '); readln (n); clrscr; assign (f, 'group.dat'); for i:=1 to n do begin {1} writeln; writeln ('Input information about ', i, ' student'); with group[i] do begin write ('Surname: '); readln (surname); {2} write ('Student's marks by session (Math Physics InfTechnologies): '); read (mark[1], mark[2], mark[3]); end; end; rewrite(f); write (f, group); close (f); assign (nf, 'goodgroup.dat'); rewrite (nf); clrscr; writeln ('Good students:'); for i:=1 to n do begin with group[i] do begin if (mark[1]>=3)and(mark[2]>=3)and(mark[3]>=3) then begin inc(j,1); goodgroup[j]:=group[i]; write (goodgroup[j].surname, ' '); end; end; end; write (nf, goodgroup); close(nf); readkey; end. Цитата:
|
|
![]() |
![]() |
![]() |
|
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Пока в вашей теме нет ответов можете заняться прочтением схожих тем Паскаль, символы и строки Паскаль, строки |
![]() |
#2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]()
Очень просто - во второй после {2} строке замените read на readln, и всё пойдет.
Но вот чего я никак не могу понять - это как у Вас проходит вывод сообщения Student's marks by session... Дело в том, что у меня, как только трансляция доходит до апострофа в слове Student's, как транслятор полагает, что строка завершена, и, не обнаружив дальше ни запятой, ни закрывающей скобки, тут же рапортует об ошибке (что, по-моему, естественно). А Вам-то как удалось такой фокус-покус провернуть (мне пришлось заменить Student's на Student"s)? |
![]() |
![]() |
![]() |
#3 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
![]()
а, это
![]() |
![]() |
![]() |
![]() |
#5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]()
Знаешь... поскольку я - самоучка, отвечу несколько непрофессионально. По моему опыту, оператор read - это вообще "плохой" оператор, в том смысле, что нельзя оставлять эту операцию "подвешенной": идут всякие глюки. То есть его можно (и нужно) использовать, например, в цикле чтения элементов строки матрицы, но завершать любое чтение нужно ТОЛЬКО оператором readln. Тогда глюков не будет. Как-то так.
|
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
#6 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
![]()
хм, ну я тоже стараюсь его не юзать. но здесь... {минутный завис по поводу кода} ступил, когда написал его. все равно, считались бы все значения с одной строки, а потом перекинуло курсор на следующую. В общем, все нормально, спасибо
![]() |
![]() |
![]() |
![]() |
#7 (permalink) |
Banned
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
|
![]()
С помощью операторов read и readln можно читать данные из текстового файла, но делать это нужно с осторожностью.
Оператор read считывает данные до разделителя, разделителем считается пробел, табуляция или конец строки (для чисел), при этом указатель файла остается перед концом строки. readln считывает строку целиком и ставит указатель файла после символа конца строки. Отсюда следует, что если при чтении текстового файла дважды вызвать read подряд, произойдет следующее: первый read дойдет до конца строки и остановится там, второй read начнет читать данные, но в качестве данных считает тот же конец строки и остановится на том же месте, ничего не считав. Таким образом, read при чтении из текста подходит, если нужно читать числа, записанные в несколько колонок через разделитель (пробел или табуляцию). При этом, после каждой операции чтения следует проверять, не повстречался ли в файле конец строки (функция eoln()) и если повстречался, перейти на следующую, с помощью вызова readln. При этом, читать строки с помощью read нельзя, для этого существует readln. Это описание соответствует тому, что описано в руководстве к очень старой версии Паскаля. Современные компиляторы могут вести себя неправильно. |
![]() |
![]() |
![]() |
#9 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
![]()
Нам примерно такое объясняли, но несколько проще и короче. Теперь лучше понял их суть
|
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
Опции темы | |
Опции просмотра | |
|
|