26.12.2010, 20:40 | #1 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
Паскаль: сравнение версий, глюки и т.п.
|
26.12.2010, 20:40 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Эти темы сильно схожи с вашей, рекомендую пролистать Сравнение сборок Глюки игр в Windows7 Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл Глюки в играх |
26.12.2010, 20:44 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
P.S. А со строками - если напорюсь, тоже напишу. |
|
26.12.2010, 21:40 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Насчет строк.
Тонкость состоит в том, что строка, хоть формально и эквивалентна массиву символов, да не совсем. Строку мало объявить, нужно ее еще и в некотором роде инициализировать. Поясню на примере. Допустим, я хочу получить строку, содержащую все строчные латинские буквы в алфавитном порядке, и вывести эту строку на экран. Так вот, такая программа не пойдет: Код:
VAR S:String; i:Byte; BEGIN for i:=1 to 26 do S[i]:=CHR(i+96); WriteLn(S); ReadLn; END. А зато такая - пожалуйста: Код:
VAR S:String; C:ARRAY[1..26] of Char; i:Byte; BEGIN for i:=1 to 26 do C[i]:=CHR(i+96); S:=C; WriteLn(S); ReadLn; END. Код:
VAR S:String[26]; i:Byte; BEGIN for i:=1 to 26 do S[i]:=CHR(i+96); WriteLn(S); ReadLn; END. Вот еще пример корректного решения: Код:
CONST G:String='Long ago there were three '; VAR S:String; i:Byte; BEGIN S:=G; for i:=1 to 26 do S[i]:=CHR(i+96); WriteLn(S); ReadLn; END. |
28.12.2010, 12:58 | #5 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Если не ошибаюсь, строковые величины определяются как динамические массивы. Из-за разных тонкостей динамического обращения к памяти и возникают такие ситуации.
__________________
Убить всех человеков! |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
04.01.2011, 21:40 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Обсуждается программа "Электронные часы":
Код:
Uses Crt,Dos; VAR hour,min,sec_old,sec_new:Word; sec100,msec,usec:Word; BEGIN ClrScr; GetTime(hour,min,sec_new,sec100); Repeat Repeat sec_old:=sec_new; GetTime(hour,min,sec_new,sec100); Until sec_old<>sec_new; GoToXY(1,1); If (min<10) and (sec_new<10) then Write(hour:2,':0',min,':0',sec_new) else If sec_new<10 then Write(hour:2,':',min,':0',sec_new) else If min<10 then Write(hour:2,':0',min,':',sec_new) else Write(hour:2,':',min,':',sec_new); Until KeyPressed; ReadKey; END. Оказывается (а я и не знал), Pascal-ABC не поддерживает модуля DOS и, соответственно, процедуру GetTime. А есть ли там возможность считывания системного времени, и если есть, то как? |
04.01.2011, 22:03 | #7 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
Не знаю про абс паскаль. Нас ему не учили, но мы на своем опыте убедились в его ущербности. Вам обязательно нужен только АВС?
|
04.01.2011, 22:13 | #8 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
По поводу ABC, хоть в глаза его не видел, но по тому судя, что о нем читал - полностью согласен с оценкой! Какой-то невразумительный гибрид, ни с чем толком не совместимый. Зачем-то графика туда ущербно-дельфийская всунута, модуль DOS не поддерживается и вообще. |
|
04.01.2011, 22:19 | #9 (permalink) | |
Member
Регистрация: 14.06.2010
Сообщений: 911
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 353
|
Цитата:
Можно так сделать: uses Utils,Crt; type DateTime=record Day,Month,Year,Hour,Minute,Second,Milliseconds:int eger; end; var time: DateTime; (убрать пробел, с пробелом вылазит смайлик) begin HideCursor; repeat time:=CurrentDateTime; write('C начала работы программы прошло: ',Milliseconds div 1000,' сек. Дата: ',time.year,'.',time.month,'.', time.day,' Время: ',time.hour,':',time.minute,':',time.second,':',ti me.Milliseconds div 100); GotoXY(1,1) until 1<0 end. Честно говорю - программа не моя. Но как видно там есть еще секундомер с начала работы программы. |
|
04.01.2011, 22:26 | #10 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
Да понятно, я к автору темы и обратился а вот если перенести файл Dos из простого паскаля в ABC? Володь, прилепи-ка сюда свой, поэкспериментируем
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|