Другое > 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 переменных? Записываем в одну и ту же.
--- Конец цитаты ---
А, ну это вопрос удобства. Кому как нравится. ;)
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии