Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434

Открыть новую тему     Написать ответ в эту тему

buffy



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задачи и Программирование на языке Pascal/Object Pascal (Turbo, Delphi и Free Pascal)

 
Перед тем, как задать вопрос: загрузите "версию для печати" (ссылка справа вверху, над номерами страниц) и попробуйте поискать средствами браузера (ctrl+F). Большинство типовых задач уже решались, причем неоднократно!  
ВНИМАНИЕ!

Текст всех программ обязательно заключайте в теги [code][/code].
Большие тексты (более 15 строк) обязательно прячутся в [more]ВАШ ТЕКСТ и/или Ваш КОД[/more]


Альтернативный компилятор
Free Pascal Compiler (FPC) -- мощный компилятор Паскаля
 - девиз: пишешь единожды, компилируешь где хошь...
 - на 99% совместим по коду с ТР и Object Pascal (Delphi)
 - межплатформенный
 - свободный  
Lazarus -- среда разработки для FPC (аналог среды Delphi7)
 
Файлы
Русская справка
Turbo Pascal 7.1 добавлены некоторые модули из Borland Pascal, русская справка.
Borland Pascal 7.0 Полный (13-дискетный, вкл. исходники), никем не модифицированный  дистрибутив.
 
Учебники:
В.В.Фаронов - Turbo Pascal. Начальный курс
В.В.Фаронов - Turbo Pascal. Наиболее полное руководство
Д.М.Ушаков, Т.А.Юркова - Паскаль для школьников
С.М.Окулов - Основы программирования
С.М.Окулов - 2 главы из школьного учебника по информатике
В.М.Котов - Олимпиадные задачи по информатике с решениями
Никитин - набор исходников для типовых задач
Мансуров - Основы программирования в среде Lazarus - основы паскаля, много примеров, блоксхем, алгоритмов. 2010. 772 с. примеры к книге
Деревенец - Песни о Паскале - паскаль для школьников и студентов-первокурсников
Епанешниковы - Программирование в среде Turbo Pascal
Паскаль для школьников. Подготовка к ЕГЭ (2011)
Фадеев - Паскаль для школы
Потопахин - Turbo Pascal Решение сложных задач (2006)
Полезные линки
библиотека алгоритмов (есть и на Паскале)
библиотека алгоритмов (ещё одна)
библиотека алгоритмов (и ещё одна)
Разбор олимпиадных задач по информатике от Михаила Густокашина
 
Проблема с набором русского текста в консоли/Turbo Pascal
решение проблемы с набором русского текста в консоли Windows  скриптом (командным файлом)
 
Построение блок-схем
FCEditor -- Программа для автоматического построения блок-схем программ из исходного текста на языке Pascal (Delphi)
 - для правильной работы исходный текст должен начинаться со слова program или unit

Всего записей: 4 | Зарегистр. 24-10-2002 | Отправлено: 12:46 11-01-2003 | Исправлено: akaGM, 23:06 21-11-2019
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Corsairs
Ты вроде имеешь отношение к преподавательскому процессу... тогда можешь прояснить пару моментов с точки зрения преподавателя?
 
1. Если в условии не стоят ограничения на расход памяти, размер машинного кода и время выполнения, то чему препод скорее отдаст предпочтение? (понятно, что от человека зависит, но может есть какие рекомендации?)
 
2. Если в условии нет ограничений по памяти, то приветствуется или нет создание доп. структур (создать еще один массив и писать в него порой проще и быстрее, чем тасовать элементы исходного массива) для ускорения работы и уменьшения размера кода?
 
3. Есть какие рекомендации по безусловным переходам? (а то некоторые любят пошуметь о каком-то "вреде оператора goto") И, аналогично, по else , и по циклам while и repeat?

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 01:02 23-01-2012
Corsairs

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7
Пункт 1. Тут многое зависит от типа учебного заведения...
Но обычно обращают внимание на скорость выполнения... согласись, ждать 10 минут и 7 - разница же есть...
Ну а по памяти и размеру файла - в большинстве своем на это не смотрят... (да и в самих заданиях частенько такое мутят, что вообще ни в какие рамки не лезет...)
 
Пункт 2. В таком случае обычно сразу оговариваются "ограничения"...
Обычно цель таких ограничений - поиск различных вариантов решения... Зачастую - неочевидных...
 
Пункт 3. А вот тут все (или почти все) зависит от "тараканов" в голове препода... Если он вбил себе в голову, что использование того же goto "некошерно" - то хоть кол ему на голове теши...

Всего записей: 569 | Зарегистр. 30-06-2006 | Отправлено: 01:30 23-01-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А вот по 3-му пункту - препод, конечно, может все что угодно вбить себе в голову, но имеет ли он право просто не принять исходник, если там встретится нелюбимый лично им оператор, или все-таки должен объяснить причину неприязни?
 
PS
Не флуд это, а попытка осмыслить подход к решению некоторых встречавшихся здесь задач - и последней от TATSU7 (вот почему ты именно так ее решил сделать, а не, скажем, так:), и жуткой задачки с резидентом-бегущей строкой (все-таки есть надежда ее до ума довести...)

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 01:55 23-01-2012 | Исправлено: dimitriy7, 02:06 23-01-2012
Corsairs

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7
Ну что я могу сказать по этому наглому поводу...
Опять таки - тут многое зависит от личности препода... Если он вменяем, и можно доказать, что при таком подходе решение задачи получается проще - то проблем нет...
А вот если он самодур, и вдобавок еще и злопамятный - тоды "ой"... (конечно, TP - это не матанализ или алгебра, и знающего студента завалить сложновато, но...)
Так что лучше не дразнить тигра...
 
А по поводу задачки от TATSU7 - с использованием вспомогательного массива действительно проще... Я вот только не помню - были ли там ограничения... Но на всякий случай я решил подстраховаться...
 
Ну а с бегущей строкой - тут действительно жуть...

Всего записей: 569 | Зарегистр. 30-06-2006 | Отправлено: 02:42 23-01-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
встряну я, с вашего позволения, как в некотором роде тоже преподаватель (правда, бывший)...
по мне, так наличие этого топа как такового свидетельствует о глобальной и корневой проблеме в системе подготовки специалиста. ну где и каким образом сейчас используется ТР? в качестве продвинутого псевдокода и для обучения основ, принципов и алгоритмов? может быть... но не более... не говоря уж о технической основе: надо поставить эмулятор/виртуалку/сам ТР, наконец, чтобы запускать 16-битные приложения + жёсткая привязка к Вин...
 
а уж та задачка да, лично я себя считаю непоследним человеком в этом деле, но... но увольте, я её не решу. а вот зачем и кому она нужна?
 
да...
да собственно, больше и сказать нечего...

Всего записей: 24808 | Зарегистр. 06-12-2002 | Отправлено: 03:03 23-01-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Corsairs
akaGM
Да вовсе не жуть там, а кривая реализация (это у меня кривая, а в оригинале ее вообще забыли сделать) перехвата вывода на экран (вроде INT 10h, но кто его знает, что там еще...)
 
Ну вот почему такой код весь вывод на экран коверкает - это ведь вроде ничего не делающая затычка для 10h ?
 

Код:
 
{$M $1000, 0, 0}  
Program Stroka;
uses dos;
var  
Old10: Procedure;
 
{$F+}  
procedure p10; interrupt;
begin
     Inline($9C);
     Old10;
end;
{$F-}  
 
BEGIN
   
GetIntVec($10,@Old10);
SetIntVec($10,@p10);
Keep(0);
 
END.
 

http://s018.radikal.ru/i522/1201/f8/c8857b9d8ed7.jpg
 
А кому нужна задача - да никому не нужна... Просто разобраться хочется, чтоб уж тоже себя считать не последним человеком )  А паскаль - вообще не такой уж и мертво-учебный язык, в некоторых гос. конторах только его и используют при написании даже довольно серьезных вещей "для внутреннего употребления"

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 03:09 23-01-2012 | Исправлено: dimitriy7, 03:27 23-01-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7
я всё забыл на фиг, но зачем флаги сохранять перед передачей управления старому 10?
 
вспомнил: чтобы не безусловно отдаться старому, а вызвать...
правильно?
 

Цитата:
Ну вот почему такой код весь вывод на экран коверкает

надо будет A1exsun'a попросить под чистой 6.22 зарядить, ДосБокс тоже люди пишут...

Всего записей: 24808 | Зарегистр. 06-12-2002 | Отправлено: 03:18 23-01-2012 | Исправлено: akaGM, 03:35 23-01-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Честно - не знаю... От балды (вроде так когда-то учили). Просто без этого СОВСЕМ НИЧЕГО не работает - просто застывший экран без признаков жизни. А так хоть что-то выводит, хоть и не туда...
Вот никак не могу вспомнить, что по-хорошему надо сделать перед 10h и после него, хоть убей... И в гугле меня, похоже, забанили-таки, никаких однозначно-нормальных примеров не нашел...  

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 03:34 23-01-2012 | Исправлено: dimitriy7, 03:35 23-01-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7
паскалевский вызов Old10; -- это обычный call, а вернётся он из _настоящего_ isr
iret'ом, т.е. на стеке будет лишнее слово (как раз флаги)
 
Добавлено:
открою большую-маленькую тайну:
 
я никогда не ставил резидентов на ТР
:)

Всего записей: 24808 | Зарегистр. 06-12-2002 | Отправлено: 03:42 23-01-2012 | Исправлено: akaGM, 03:47 23-01-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
вспомнил: чтобы не безусловно отдаться старому, а вызвать...

Ну вроде бы... По идее...
 
А вообще globus_ussr (он ведь задачку подкинул) перед вызовом некоторых обработчиков ставит pushf, а перед некоторыми не ставит... Я его спрашивал - почему? - а он так и не ответил.
 
Добавлено:

Цитата:
т.е. на стеке будет лишнее слово (как раз флаги)

Опа! Это я стек порушил - здорово! И что бы случилось под чистым досом от такого глумления....

Цитата:
на стеке будет лишнее слово (как раз флаги)

А они нам реально нужны или можно "посеять"?
 
PS
Ты-то на ТР резидентов не делал, а я их не делал вообще... разве что разок лет 10 назад в институте...

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 03:47 23-01-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7
да ты-то как раз не порушил, а сделал всё правильно:
 
pushf
call Old10
 
а уже этот call Old10
сделал  
iret 2  -- вернул CS:IP + слово состояния флагов "как-будто" перед обращением к нему сделали pushf
так что всё ок...

Всего записей: 24808 | Зарегистр. 06-12-2002 | Отправлено: 04:08 23-01-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
так ведь не работает же!
не совсем ОК, выходит...

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 04:19 23-01-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
лично я грешу на DOSBox
со всех остальных точек зрения -- у тебя всё ок
 
ну попробуй такой псевдо-резидент:
Код:
 
uses dos;
var  
Old10: Procedure;
 
{$F+}  
procedure p10; interrupt;
begin
     Inline($9C);
     Old10;
end;
{$F-}  
 
BEGIN
   
GetIntVec($10,@Old10);
SetIntVec($10,@p10);
 
//тут можно какого-нибудь цветного crt-мусора набросать...
 
readln;
 
SetIntVec($10,@Old10);
 
END.

Всего записей: 24808 | Зарегистр. 06-12-2002 | Отправлено: 15:21 23-01-2012 | Исправлено: akaGM, 15:26 23-01-2012
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а вот не надо путать аппаратные прерывание и софтовые.
Как говорят в Одессе - "это две большие разницы!"
 
я в молодости (когда был поумнее и понастырнее :-) ) писал примерно такой код:

Код:
 
{$M $1000, 0, 0}  
Program Stroka;  
uses dos;  
var  
  Old10: procedure;  
 
procedure DoInt10; assembler; asm nop; nop; nop end;
   
{$F+}  
 
procedure New10; far; assembler;
asm
 
  pushf;
  call dword ptr cs:[offset DoInt10]
  sti
  retf 2
 
end;  
{$F-}  
 
BEGIN  
   
GetIntVec($10,@Old10);  
move(Old10,ptr(CSeg,ofs(DoInt10))^,4);
SetIntVec($10,@New10);  
Keep(0);  
 
END.  

 
p.s. а вообще соглашусь с прозвучавшим здесь в топике неоднократно мнением - всё это (резиденты, перехват DOS прерываний и прочая...) — антиквариат и давно никому не нужная рухлядь...

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 16:03 23-01-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
попробовал - цвета нормальные, только вывод почему-то идет только в нижнюю строку... (как-бы после window(1,24,80,25) - хотя никто этого не делал) ... Если сделать window(1,1,80,25) - нормально выводит на весь экран, но ПОВЕРХ старого текста (но так ведь и должно быть), а вот clrscr и textmode вообще игнорируются...

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 16:25 23-01-2012 | Исправлено: dimitriy7, 16:27 23-01-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SERGE_BLIZNUK
ну и кто его смог замаскировать?
 
dimitriy7
тогда пробуй код, представленый SERGE_BLIZNUK...
 
ТР для писания на ассемблере и засчем тогда вообще ТР...

Всего записей: 24808 | Зарегистр. 06-12-2002 | Отправлено: 17:12 23-01-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да попробовал уже - не лучше... Так что спишу глюки на dosbox, ну ее, задачу эту...

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 17:36 23-01-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7
аминь...
 
SERGE_BLIZNUK

Цитата:
писал примерно такой код:

а вообще да, хорошо заглушил :)
вопрос, правда, прежний -- на фига при этом ТР?

Всего записей: 24808 | Зарегистр. 06-12-2002 | Отправлено: 17:53 23-01-2012
TATSU7

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Corsairs
чувак а можно както подругому мне препод сказал что там надо через ша с[i]=max...... можно както сделать?

Всего записей: 19 | Зарегистр. 21-12-2011 | Отправлено: 23:24 23-01-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TATSU7
Ну а чем вариант от Corsairs не устроил-то?

Цитата:
что там надо через шаif с[i]=max
- это как понимать?
Там (у Corsairs) ведь есть  
Код:
if (c[i]=max)
? Правильно, есть... Или преподаватель слепой?
 
Ну посмотри еще раз
вариант от Corsairs:
 
и мой вариант:
или даже так:
 
Ну хоть один-то должен подойти...

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 00:15 24-01-2012 | Исправлено: dimitriy7, 00:21 24-01-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru