Автор Тема: Вспоминаем Turbo Pascal и решаем задачи на нём  (Прочитано 49299 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #90 : 02 Декабрь 2009, 22:08:59 »
Хм , посетила мысля воспользоваться ord , а потом по сравнивать числа и вернуть им назад значения символов чем сейчас и займусь , хотя кода добавиться много небось .

Добавлено позже:
Цитата: topos84
А разве тут не должно быть until ind=true? (Я уже не помню синтаксиса оператора repeat... until.)
Ну у меня же тип boolean знать либо тру либо фалсе , until выполняется  пока значение не станет тру так что всё правильно .
Цитата: topos84
А разве после repeat'а ставится точка с запятой?
Всё равно , я как-то по привычке ставлю .

Добавлено позже:
Хм , вот код с ord'ом :
Но проблема одна таки осталась - при вводе разных символов для некоторых код тот же выдаёт .Для наглядности подобавлял вывод составляющих массива на разных этапах работы с ним .

Оффлайн AnXIouS

  • Пользователь
  • Сообщений: 323
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #91 : 02 Декабрь 2009, 23:00:03 »
Первое что бросилось в глаза:
b:array[1..10] of integer;
если берешь ord, то хватит  byte;

Добавлено позже:
buf тоже byte

Добавлено позже:
а массив проще имхо сортировать по "фараоновски":
for i := 1 to 9 do
  for j := i + 1 to 10 do
  begin
    < условие >
  end;
« Последнее редактирование: 02 Декабрь 2009, 23:10:27 от AnXIouS »

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #92 : 02 Декабрь 2009, 23:03:30 »
Цитата: AnXIouS
Первое что бросилось в глаза:b:array[1..10] of integer;если берешь ord, то хватит  byte;Добавлено позже:buf тоже byte
Но ведь это никак не повлияет на ответ .

Добавлено позже:
Цитата: AnXIouS
а массив проще имхо сортировать по фараоновски:
А можно пример сортировки чего-то там , у меня в учебнике о этом способе ничего не написано .

Оффлайн AnXIouS

  • Пользователь
  • Сообщений: 323
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #93 : 02 Декабрь 2009, 23:11:36 »
Ну это я так обозвал его  :lol:
Вообще-то это, кажется Сортировка пузырьком.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #94 : 02 Декабрь 2009, 23:13:15 »
Цитата: AnXIouS
Вообще-то это, кажется Сортировка пузырьком.
То что называется сортировка пузырём у меня и применено в программе .

Оффлайн AnXIouS

  • Пользователь
  • Сообщений: 323
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #95 : 02 Декабрь 2009, 23:21:01 »
Просто сравнение будет ити след образом:
0000000000
 000000000
  00000000
   0000000
    000000
     00000
      0000
       000
        00
У тебя там неверный цикл сортировки.

Добавлено позже:
Ну знач не пузырьковый, я имени его точно не помню. Где-то взялся в моей памяти.

Добавлено позже:
Тьфу.
Как это понимать:
  for i:=1 to 4 do if b[i]>b[i+1] then
     Begin
          buf:=b[i];
          b[i]:=b[i+1];
          b[i+1]:=b[i];
          ind:=false;
     end;

Добавлено позже:
Довели меня девушки со своим сделай лабу  :debile:

Добавлено позже:
Вот она http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D1%88%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #96 : 02 Декабрь 2009, 23:29:55 »
Цитата: AnXIouS
Тьфу.Как это понимать:
Как пузырьковый метод на который ты перед этим сам давал ссылку :)
Сама сортировка там верная , на цифрах она нормально сработает , а почему на символах так я пока что не разобрался .

Добавлено позже:
Цитата: AnXIouS
Вот она
Там без примера не разобраться , а примера там нет к сожалению .

Оффлайн AnXIouS

  • Пользователь
  • Сообщений: 323
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #97 : 02 Декабрь 2009, 23:32:10 »
Если не заметил в куче моего спама:
Цитата
 for i:=1 to 4 do if b>b[i+1] then
     Begin
          buf:=b;
         b:=b[i+1];
          b[i+1]:=b;

          ind:=false;
     end;
Так можно только в ассемблере  ;)

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #98 : 02 Декабрь 2009, 23:32:49 »
И ещё если можно напишите кто-то алгоритм деления пополам , желательно на каком-то простом примере , в учебнике что-то накосячено при описании этого метода .Заранее благодарен .

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #99 : 02 Декабрь 2009, 23:35:01 »
gepar, прикрепи .pas-файл, а то лень самому набирать в паскале, а виндовский буфер обмена там не пашет.

Добавлено позже:
Цитата: gepar
И ещё если можно напишите кто-то алгоритм деления пополам
Переведи на русский, пожалуйста.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #100 : 02 Декабрь 2009, 23:38:12 »
Цитата: AnXIouS
Если не заметил в куче моего спама:
Так у меня точно такой же код :
    for i:=1 to 4 do if b[i]>b[i+1] then
     Begin
          buf:=b[i];
          b[i]:=b[i+1];
          b[i+1]:=b[i];
          ind:=false;
     end;
Ну отличия только в том что у  меня сортировка элементов массива , а у тебя сейчас не могу сообразить сортировка чего (сонный уже) толи сортировка массива по принципу чтобы элементы массива были больше b толи я что-то перепутал .

Оффлайн AnXIouS

  • Пользователь
  • Сообщений: 323
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #101 : 02 Декабрь 2009, 23:40:31 »
0000000000  for i:= 1 to 10;
 000000000   for i:= 2 to 10; т.е. for j:=i+1 to 10; т.к. первое значение уже сравнивалось.
  00000000    итд. не умею я объяснять...
   0000000
    000000
     00000
      0000
       000
        00
for i := 1 to 9 do
  for j := i + 1 to 10 do
  begin
     if b[i] > b[j] then
     Begin
          buf:=b[i];
          b[i]:=b[j];
          b[j]:=buf;   
    end;
  end;
Как то так. Сортирует весь массив. Сортировка у тебя верная, просто не оптимальная.
Еще раз смотрим на эти две строчки, внимательно.
          b:=b[i+1];
          b[i+1]:=b;
Это твой код...

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #102 : 02 Декабрь 2009, 23:42:30 »
Цитата: topos84
Переведи на русский, пожалуйста.
Ну это так и было написанно на русском в учебнике , вот его описание :
Ля-ля-ля в упорядоченном массиве порой нужно найти какойто элемент , для этого применим алгоритм деления пополам .Его принцип :берём первоый(q) и последний(p) элементы в массиве далее p+q div 2 , дальше если искомое число больше того что мы получили мы повторяем эту операцию , но по какомуто хитрому способу , который запутанно описан , а приведённый пример у меня вообще не сработал  :(  

Цитата: topos84
gepar, прикрепи .pas-файл, а то лень самому набирать в паскале, а виндовский буфер обмена там не пашет.
А меня работает , я думал что у всех так , момент , сейчас прикреплю .

Добавлено позже:
topos84,а где она ?Скопированные  3 строки AnXIouS идентичны моим .
P.S В прикреплённом файле прога , которая сортирует символы , вернее неудачно сортирует символы .
« Последнее редактирование: 02 Декабрь 2009, 23:50:37 от gepar »

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #103 : 02 Декабрь 2009, 23:51:05 »
for i:=1 to 4 do if b[i]>b[i+1] then
     Begin
          buf:=b[i];
          b[i]:=b[i+1];
          b[i+1]:=b[i];
          ind:=false;
     end;
А теперь хорошенько пригляделись вот к этому:
buf:=b[i];
          b[i]:=b[i+1];
          b[i+1]:=b[i];
И, вуаля! Нашли ошибку.

П.С. Не забываем, что [i] это ВВ-код. Поэтому пишем в коде (#).

Добавлено позже:
Цитата: gepar
Если не заметил в куче моего спама:
Так у меня точно такой же код :
Код:

     for i:=1 to 4 do if b>b[i+1] then
     Begin
          buf:=b;
          b:=b[i+1];
          b[i+1]:=b;
          ind:=false;
     end;

Ну отличия только в том что у  меня сортировка элементов массива , а у тебя сейчас не могу сообразить сортировка чего (сонный уже) толи сортировка массива по принципу чтобы элементы массива были больше b толи я что-то перепутал .
Где же идентичны?
Ты присваиваешь buf значение b(i), потом b(i) присваиваешь b(i+1)-ое, а потом благополучно забываешь про буфер свой и присваиваешь b(i+1)-ому не старое значение b(i)-го, которое в буфе, а уже новое, которое совпадает теперь с b(i+1)-ым.

Оффлайн AnXIouS

  • Пользователь
  • Сообщений: 323
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #104 : 02 Декабрь 2009, 23:51:58 »
Цитата
Ля-ля-ля в упорядоченном массиве порой нужно найти какойто элемент , для этого применим алгоритм деления пополам .Его принцип :берём первоый(q) и последний(p) элементы в массиве далее p+q div 2 , дальше если искомое число больше того что мы получили мы повторяем эту операцию , но по какомуто хитрому способу , который запутанно описан , а приведённый пример у меня вообще не сработал
Это поиск. Зачем он тебе пока.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #105 : 02 Декабрь 2009, 23:54:23 »
Цитата: topos84
это ВВ-код. Поэтому пишем в коде (#).
Так а это зачем ?У меня же там цифры сравниваются , а не сами символы .Я же добавил ord в самом начале и дальше сравниваю цыфры , но проблема в том что кое - где цифры те же , когда все символы разные .

Оффлайн AnXIouS

  • Пользователь
  • Сообщений: 323
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #106 : 02 Декабрь 2009, 23:55:43 »
Цитата
это ВВ-код. Поэтому пишем в коде (#).
Это имелось ввиду для форума  :)

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #107 : 02 Декабрь 2009, 23:59:35 »
Цитата: AnXIouS
Это поиск. Зачем он тебе пока.
Ну в учебнике он идёт следующим пунктом , полагаю если я его пропущу то я не смогу дальше продолжать заниматься по учебнику так как я не буду знать как искать элементы в массиве , а задания небось и дальше время от времени будут требовать этого .

Добавлено позже:
Цитата: topos84
Где же идентичны? Ты присваиваешь buf значение b(i), потом b(i) присваиваешь b(i+1)-ое, а потом благополучно забываешь про буфер свой и присваиваешь b(i+1)-ому не старое значение b(i)-го, которое в буфе, а уже новое, которое совпадает теперь с b(i+1)-ым.
Почему то в упор не видел этого , спасибо что показал где ошибка , теперь порядок с сортировкой символьного массива.

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #108 : 03 Декабрь 2009, 00:05:11 »
Цитата: gepar
Почему то в упор не видел этого , спасибо что показал где ошибка , теперь порядок с сортировкой символьного массива.
Вообще учись делать отладку. Это всегда пригодится. Т.е. если прога работает неверно, а компилятор не ругается на синтаксис, то подозрительный кусок программы можешь закомментировать и посмотреть, верно ли выполняется оставшаяся часть (если оставшаяся часть сама по себе не может работать, то добавь к ней то, что заставит ее работать). Ну и так далее, по всем смысловым кускам проги.

Под конец курса обучения паскалю тебе придется писать очень длинные проги по 3-4 страницы размером в экран, причем основная работа будет по написанию фукций и процедур; тело же программы будет состоять лишь в перечислении процедур и функций с конкретными аргументами, т.е. будет очень короткое, что позволит удобно и легко делать отладку, закомментировав конкретную фунцию или процедуру (или их совокупность).
« Последнее редактирование: 03 Декабрь 2009, 00:09:52 от topos84 »

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #109 : 03 Декабрь 2009, 00:07:53 »
Цитата: topos84
Вообще учись делать отладку. Это всегда пригодится. Т.е. если прога работает неверно, а компилятор не ругается на синтаксис, то подозрительный кусок программы можешь закомментировать и посмотреть, верно ли выполняется оставшаяся часть (если оставшаяся часть сама по себе не может работать, то добавь к ней то, что заставит ее работать). Ну и так далее, по всем смысловым кускам проги.
Понял .

Оффлайн AnXIouS

  • Пользователь
  • Сообщений: 323
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #110 : 03 Декабрь 2009, 00:08:52 »
Цитата: gepar
Почему то в упор не видел этого , спасибо что показал где ошибка , теперь порядок с сортировкой символьного массива.
А я так намекал... эх.
Цитата
Ну в учебнике он идёт следующим пунктом , полагаю если я его пропущу то я не смогу дальше продолжать заниматься по учебнику так как я не буду знать как искать элементы в массиве , а задания небось и дальше время от времени будут требовать этого .
Попробую объяснить:
Имеем массив: |0|1|2|3|4|<тута_центр>|5|6|7|8|9|
Надобно найти например 7;
q = 0; p = 9;
0+9 = 9;
(9 / 2) ≈ 4;
4 < 7 по этому берем другую половину, т.е. |5|6|7|8|9| q = 5, p = 9, и повторяем.
Писать программы кусок лень.
Это умный поиск. Но в обучении он жестковат как на меня.

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #111 : 03 Декабрь 2009, 00:12:58 »
Кстати, вот хорошее учебное пособие - короткое и, главное, удобное (можно и не скачивать, а читать онлайн): http://window.edu.ru/window_catalog/pdf2txt?p_id=27145&p_page=4

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #112 : 03 Декабрь 2009, 23:38:07 »
Можно всё же конкретный пример для поиска элемента пожалуйста , ато что-то методом тыка не получаеться .
Цитата: topos84
http://window.edu.ru/window_catalog/pdf2txt?p_id=27145&p_page=4
Учебник хорош , но я сейчас хочу разобраться конкретно с этой сортировкой , его я постараюсь обязательно почитать на выходных когда времени немножко больше будет .

Мне пример нужен поиска типа допустим следующее :
m:array[1..20] of integer;
i,q,p,s:integer;
Массив допустим уже отсортирован и в нём пусть элементы все идут подряд от 1 до 20 (первый будет 1 , а последний 20) .
Дальше в учебнике написано вот такое :
while p<q do
     Begin
          s:=(p+q) div 2;
          if m[s]>a then p:=s+1
          else q:=s;
     end;
Но это не работает , поправьте пожалуйста код если вы знаете как совершать поиск элементов в упорядоченных массивах или напишите с 0 свой пример , если приведённый код плох ,  тут ведь совсем немного кода и это не займёт много времени  :)Заранее спасибо !
« Последнее редактирование: 03 Декабрь 2009, 23:56:31 от gepar »

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #113 : 03 Декабрь 2009, 23:52:26 »
Цитата: gepar
Но это не работает
А 'a' там откуда взялось? Приведи код полностью (и .pas-файл прикрепи, если есть).

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #114 : 03 Декабрь 2009, 23:57:15 »
Цитата: topos84
А 'a' там откуда взялось? Приведи код полностью (и .pas-файл прикрепи, если есть).
Прикрепил pas файл, у меня там правда random стоит так числа будут не от 1 до 20 но это по сути мало что меняет .

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #115 : 05 Декабрь 2009, 19:25:42 »
А как считать сумму строки матрицы ?Подскажите пожалуйста .
Задание : Дана матрица целых чисел размером 4x3 . Определите сумму каждой строки этой матрицы .Результат вывести на экран монитора .
Начало решения :
program proga211;
uses crt;
const
m=4;
n=3;
var
matr:array[1..m,1..n] of integer;
i,j:integer;
Begin
     for i:=1 to m do
     for j:=1 to n do
     Begin
          writeln('Enter element ',i,' ',j,' ');
          read(matr[i,j]);
     end;
     for i:=1 to m do
     for j:=1 to n do
     write (matr[i,j]:4);
     writeln;
В прикреплённом файле тот же код , но в виде pas файла .
« Последнее редактирование: 05 Декабрь 2009, 19:28:35 от gepar »

Оффлайн Fly

  • Пользователь
  • Сообщений: 1896
  • Пол: Мужской
    • Steam
    • Youtube
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #116 : 05 Декабрь 2009, 20:17:38 »
Элементарно. Пробегаем по массиву, записывая сумму элементов в некоторую переменную, по окончании строки выводим переменную на экран и обнуляем.

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #117 : 05 Декабрь 2009, 23:34:18 »
Цитата: Fly
Пробегаем по массиву, записывая сумму элементов в некоторую переменную, по окончании строки выводим переменную на экран и обнуляем.
Вместо введения m переменных, лучше взять массив из m элементов и в него записывать суммы элементов для каждой строки. Проще будет выводить результат на экран.

Оффлайн Fly

  • Пользователь
  • Сообщений: 1896
  • Пол: Мужской
    • Steam
    • Youtube
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #118 : 05 Декабрь 2009, 23:51:06 »
А кто говорит про m переменных? Записываем в одну и ту же.

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #119 : 06 Декабрь 2009, 01:48:07 »
Цитата: Fly
А кто говорит про m переменных? Записываем в одну и ту же.
А, ну это вопрос удобства. Кому как нравится. ;)