|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
![]() |
![]() |
![]() |
![]() |
|
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Эти темы сильно схожи с вашей, рекомендую пролистать Сравнение сборок Глюки игр в Windows7 Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл Глюки в играх |
![]() |
#2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]() Цитата:
P.S. А со строками - если напорюсь, тоже напишу. |
|
![]() |
![]() |
![]() |
#3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 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. |
![]() |
![]() |
![]() |
#5 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,740
Записей в дневнике: 70
Сказал(а) спасибо: 161
Поблагодарили 200 раз(а) в 84 сообщениях
Репутация: 74843
|
![]()
Если не ошибаюсь, строковые величины определяются как динамические массивы. Из-за разных тонкостей динамического обращения к памяти и возникают такие ситуации.
__________________
Убить всех человеков! |
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
#6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 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. А есть ли там возможность считывания системного времени, и если есть, то как? |
![]() |
![]() |
![]() |
#7 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
![]()
Не знаю про абс паскаль. Нас ему не учили, но мы на своем опыте убедились в его ущербности. Вам обязательно нужен только АВС?
|
![]() |
![]() |
![]() |
#8 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#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. Честно говорю - программа не моя. Но как видно там есть еще секундомер с начала работы программы. |
|
![]() |
![]() |
![]() |
#10 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
![]()
Да понятно, я к автору темы и обратился
![]() ![]() |
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
Опции темы | |
Опции просмотра | |
|
|