| Другое > Hard'n'Soft |
| Вспоминаем Turbo Pascal и решаем задачи на нём |
| << < (6/15) > >> |
| gepar:
--- Цитата: 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:
--- Код: ---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:
--- Цитата: topos84 ---Переведи на русский, пожалуйста. --- Конец цитаты --- Ну это так и было написанно на русском в учебнике , вот его описание : Ля-ля-ля в упорядоченном массиве порой нужно найти какойто элемент , для этого применим алгоритм деления пополам .Его принцип :берём первоый(q) и последний(p) элементы в массиве далее p+q div 2 , дальше если искомое число больше того что мы получили мы повторяем эту операцию , но по какомуто хитрому способу , который запутанно описан , а приведённый пример у меня вообще не сработал :( --- Цитата: topos84 ---gepar, прикрепи .pas-файл, а то лень самому набирать в паскале, а виндовский буфер обмена там не пашет. --- Конец цитаты --- А меня работает , я думал что у всех так , момент , сейчас прикреплю . Добавлено позже: topos84,а где она ?Скопированные 3 строки AnXIouS идентичны моим . P.S В прикреплённом файле прога , которая сортирует символы , вернее неудачно сортирует символы . |
| topos84:
--- Код: ---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:
--- Цитата ---Ля-ля-ля в упорядоченном массиве порой нужно найти какойто элемент , для этого применим алгоритм деления пополам .Его принцип :берём первоый(q) и последний(p) элементы в массиве далее p+q div 2 , дальше если искомое число больше того что мы получили мы повторяем эту операцию , но по какомуто хитрому способу , который запутанно описан , а приведённый пример у меня вообще не сработал --- Конец цитаты --- Это поиск. Зачем он тебе пока. |
| gepar:
--- Цитата: topos84 ---это ВВ-код. Поэтому пишем в коде (#). --- Конец цитаты --- Так а это зачем ?У меня же там цифры сравниваются , а не сами символы .Я же добавил ord в самом начале и дальше сравниваю цыфры , но проблема в том что кое - где цифры те же , когда все символы разные . |
| AnXIouS:
--- Цитата ---это ВВ-код. Поэтому пишем в коде (#). --- Конец цитаты --- Это имелось ввиду для форума :) |
| gepar:
--- Цитата: AnXIouS ---Это поиск. Зачем он тебе пока. --- Конец цитаты --- Ну в учебнике он идёт следующим пунктом , полагаю если я его пропущу то я не смогу дальше продолжать заниматься по учебнику так как я не буду знать как искать элементы в массиве , а задания небось и дальше время от времени будут требовать этого . Добавлено позже: --- Цитата: topos84 ---Где же идентичны? Ты присваиваешь buf значение b(i), потом b(i) присваиваешь b(i+1)-ое, а потом благополучно забываешь про буфер свой и присваиваешь b(i+1)-ому не старое значение b(i)-го, которое в буфе, а уже новое, которое совпадает теперь с b(i+1)-ым. --- Конец цитаты --- Почему то в упор не видел этого , спасибо что показал где ошибка , теперь порядок с сортировкой символьного массива. |
| topos84:
--- Цитата: gepar ---Почему то в упор не видел этого , спасибо что показал где ошибка , теперь порядок с сортировкой символьного массива. --- Конец цитаты --- Вообще учись делать отладку. Это всегда пригодится. Т.е. если прога работает неверно, а компилятор не ругается на синтаксис, то подозрительный кусок программы можешь закомментировать и посмотреть, верно ли выполняется оставшаяся часть (если оставшаяся часть сама по себе не может работать, то добавь к ней то, что заставит ее работать). Ну и так далее, по всем смысловым кускам проги. Под конец курса обучения паскалю тебе придется писать очень длинные проги по 3-4 страницы размером в экран, причем основная работа будет по написанию фукций и процедур; тело же программы будет состоять лишь в перечислении процедур и функций с конкретными аргументами, т.е. будет очень короткое, что позволит удобно и легко делать отладку, закомментировав конкретную фунцию или процедуру (или их совокупность). |
| gepar:
--- Цитата: topos84 ---Вообще учись делать отладку. Это всегда пригодится. Т.е. если прога работает неверно, а компилятор не ругается на синтаксис, то подозрительный кусок программы можешь закомментировать и посмотреть, верно ли выполняется оставшаяся часть (если оставшаяся часть сама по себе не может работать, то добавь к ней то, что заставит ее работать). Ну и так далее, по всем смысловым кускам проги. --- Конец цитаты --- Понял . |
| AnXIouS:
--- Цитата: 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:
Кстати, вот хорошее учебное пособие - короткое и, главное, удобное (можно и не скачивать, а читать онлайн): http://window.edu.ru/window_catalog/pdf2txt?p_id=27145&p_page=4 |
| gepar:
Можно всё же конкретный пример для поиска элемента пожалуйста , ато что-то методом тыка не получаеться . --- Цитата: 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 свой пример , если приведённый код плох , тут ведь совсем немного кода и это не займёт много времени :)Заранее спасибо ! |
| topos84:
--- Цитата: gepar ---Но это не работает --- Конец цитаты --- А 'a' там откуда взялось? Приведи код полностью (и .pas-файл прикрепи, если есть). |
| gepar:
--- Цитата: topos84 ---А 'a' там откуда взялось? Приведи код полностью (и .pas-файл прикрепи, если есть). --- Конец цитаты --- Прикрепил pas файл, у меня там правда random стоит так числа будут не от 1 до 20 но это по сути мало что меняет . |
| gepar:
А как считать сумму строки матрицы ?Подскажите пожалуйста . Задание : Дана матрица целых чисел размером 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 файла . |
| Fly:
Элементарно. Пробегаем по массиву, записывая сумму элементов в некоторую переменную, по окончании строки выводим переменную на экран и обнуляем. |
| topos84:
--- Цитата: Fly ---Пробегаем по массиву, записывая сумму элементов в некоторую переменную, по окончании строки выводим переменную на экран и обнуляем. --- Конец цитаты --- Вместо введения m переменных, лучше взять массив из m элементов и в него записывать суммы элементов для каждой строки. Проще будет выводить результат на экран. |
| Fly:
А кто говорит про m переменных? Записываем в одну и ту же. |
| topos84:
--- Цитата: Fly ---А кто говорит про m переменных? Записываем в одну и ту же. --- Конец цитаты --- А, ну это вопрос удобства. Кому как нравится. ;) |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |