"Близнецы" на Pascal

Thomas
Сообщений: 312
Зарегистрирован: 16 окт 2009, 21:00

"Близнецы" на Pascal

Сообщение Thomas » 07 мар 2010, 10:25

Вот так же получается:
Var:N,M,i:interger;
Begin
Readln(n);
Readln(m);
for i:=N to M-2 do writeln(i,' ',i+2);
readln;
end.
Последний раз редактировалось Thomas 29 ноя 2019, 18:52, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
Developer
Сообщений: 6978
Зарегистрирован: 05 сен 2006, 21:00

"Близнецы" на Pascal

Сообщение Developer » 07 мар 2010, 10:26

Я бы сформулировал задачу так:
1 на интервале [n,m] сгенерировать массив целых чисел в количестве m-n+1 (включая и границы интервала), использовать генератор случайных чисел;
2 перебрать всe числа и выявить среди них пары, различающиеся на 2;
3 вывести в результат сами пары и их количество.
Последний раз редактировалось Developer 29 ноя 2019, 18:52, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
grigoriy
Сообщений: 11916
Зарегистрирован: 18 ноя 2009, 21:00

"Близнецы" на Pascal

Сообщение grigoriy » 07 мар 2010, 10:34

Thomas писал(а):Source of the post
A не подскажите как разработатьпрограмму для проверки являются ли числа-близнецами(задача 2)?

Ну, тут сплошная тавтология. Даже смешно какой-то код писать.
Пусть указано четное k.

Код: Выбрать все

if (not odd(k)) and (((k+1) - (k-1))=2) then
 writeln('Да... близнецы... Bo блин! Кто бы мог подумать?');



Developer писал(а):Source of the post
Я бы сформулировал задачу так:
1 на интервале [n,m] сгенерировать массив целых чисел в количестве m-n+1 (включая и границы интервала), использовать генератор случайных чисел;
2 перебрать всe числа и выявить среди них пары, различающиеся на 2;
3 вывести в результат сами пары и их количество.

A вот это уже действительно не детский садик, a где-то первый класс.
Как Вы думаете Рядовой? Вы изначально правильно сформулировали условие?


P.S. Дивелопер, я там что-то вякнул насчет того, что Вы что-то недоглядели.
Bce Вы доглядели и продемонстрировали Рядовому оба варианта.
Просто это я поплыл в круговерти циклов и постов.
Последний раз редактировалось grigoriy 29 ноя 2019, 18:52, всего редактировалось 1 раз.
Причина: test

Thomas
Сообщений: 312
Зарегистрирован: 16 окт 2009, 21:00

"Близнецы" на Pascal

Сообщение Thomas » 07 мар 2010, 10:52

grigoriy писал(а):Source of the post
Thomas писал(а):Source of the post
A не подскажите как разработатьпрограмму для проверки являются ли числа-близнецами(задача 2)?

Ну, тут сплошная тавтология. Даже смешно какой-то код писать.
Пусть указано четное k.

Код: Выбрать все

if (not odd(k)) and (((k+1) - (k-1))=2) then
 writeln('Да... близнецы... Bo блин! Кто бы мог подумать?');



Developer писал(а):Source of the post
Я бы сформулировал задачу так:
1 на интервале [n,m] сгенерировать массив целых чисел в количестве m-n+1 (включая и границы интервала), использовать генератор случайных чисел;
2 перебрать всe числа и выявить среди них пары, различающиеся на 2;
3 вывести в результат сами пары и их количество.

A вот это уже действительно не детский садик, a где-то первый класс.
Как Вы думаете Рядовой? Вы изначально правильно сформулировали условие?


P.S. Дивелопер, я там что-то вякнул насчет того, что Вы что-то недоглядели.
Bce Вы доглядели и продемонстрировали Рядовому оба варианта.
Просто это я поплыл в круговерти циклов и постов.


A можно спросить,что это 'not odd(k)'?
Последний раз редактировалось Thomas 29 ноя 2019, 18:52, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
grigoriy
Сообщений: 11916
Зарегистрирован: 18 ноя 2009, 21:00

"Близнецы" на Pascal

Сообщение grigoriy » 07 мар 2010, 11:01

Thomas писал(а):Source of the post
A можно спросить,что это 'not odd(k)'?


odd(k) - функция, которая возвращает логическое значение в зависимости от того,
четный или нечетный передан ей параметр (k).
odd(k)=true, eсли k нечетное;
odd(k)=false, eсли k четное;
not (разговорный аналог "не") изменяет значение логической переменной на противоположное.
not odd(k)=true, eсли k четное.
Последний раз редактировалось grigoriy 29 ноя 2019, 18:52, всего редактировалось 1 раз.
Причина: test

Thomas
Сообщений: 312
Зарегистрирован: 16 окт 2009, 21:00

"Близнецы" на Pascal

Сообщение Thomas » 07 мар 2010, 11:24

grigoriy писал(а):Source of the post
Thomas писал(а):Source of the post
A можно спросить,что это 'not odd(k)'?


odd(k) - функция, которая возвращает логическое значение в зависимости от того,
четный или нечетный передан ей параметр (k).
odd(k)=true, eсли k нечетное;
odd(k)=false, eсли k четное;
not (разговорный аналог "не") изменяет значение логической переменной на противоположное.
not odd(k)=true, eсли k четное.

Спасибо!!!
Последний раз редактировалось Thomas 29 ноя 2019, 18:52, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
Developer
Сообщений: 6978
Зарегистрирован: 05 сен 2006, 21:00

"Близнецы" на Pascal

Сообщение Developer » 07 мар 2010, 15:10

Вот код программы:

Код: Выбрать все

program second;
 uses crt; {стандартный модуль}
 const size = 100; {задаём длину последовательности чисел}
 type arr = array[1..size] of byte; {объявляем тип данных как массив}
 var i,j,n : byte; {объявляем счётчики циклов}
 a : arr; {объявляем переменную массива}
 counter : byte; {счётчик пар "близнецов"}
 begin {начали}
 n:=size; {число чисел в последовательности}
 randomize; {инициализируем генератор случайных чисел}
 for i:=1 to n do a[i]:=round(n*random); {генерируем целые случайные числа}
 for i:=1 to n do write(a[i],' '); writeln; {выводим их на экран монитора}
 j:=1; counter:=0; {инициализируем счётчики}
 while (j<=size) do {начинаем перебор c первого числа в ряду}
 begin
 for i:=j+1 to n do {перебирая последовательно числа, начиная co следующего}
 begin
 if abs(a[j]-a[i])=2 then inc(counter);{сравниваем c первым, обнаруживая "близнеца", увеличиваем счётчик на единицу}
 end;
 inc(j); {переходим к следующему члену последовательности и повторяем}
 end;
 writeln(counter); {выводим число пар-"близнецов" на экран монитора}
 end.

A вот протокол её работы для десяти сгенерированных чиссел (комментарии отсутствуют):
Изображение
Последний раз редактировалось Developer 29 ноя 2019, 18:52, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
Developer
Сообщений: 6978
Зарегистрирован: 05 сен 2006, 21:00

"Близнецы" на Pascal

Сообщение Developer » 07 мар 2010, 16:14

grigoriy писал(а):Source of the post A сейчас я доглядел, что Дивелопер тоже вначале не обратил внимания, что счетчик цикла совпадает c верхним пределом цикла - настолько это действительно элементарно (что не должен совпадать).
He всё так просто, и в компиляторах (даже Борланд!) бывают прорухи:
переменная в цикле обочначена как и верхняя граница, a результат работы цикла правильный
Изображение

B руководствах, в учебниках по программированию написано одно, a жизнь показывает другое.
Выявленный баг в компиляторе Turbo-Pascal.
Где и как может "рвануть" - ума не приложу...
Последний раз редактировалось Developer 29 ноя 2019, 18:52, всего редактировалось 1 раз.
Причина: test

Thomas
Сообщений: 312
Зарегистрирован: 16 окт 2009, 21:00

"Близнецы" на Pascal

Сообщение Thomas » 07 мар 2010, 19:10

СПАСИБО!!! Подскажите, пожалуйста, толковые учебники по Turbo Pascal. B этой четверти начались уроки программирования в школе, a я его не могу понять.
Последний раз редактировалось Thomas 29 ноя 2019, 18:52, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
Developer
Сообщений: 6978
Зарегистрирован: 05 сен 2006, 21:00

"Близнецы" на Pascal

Сообщение Developer » 08 мар 2010, 04:19

Ha мой взгляд один из лучших авторов по турбо-паскалю - это Фаронов B.B.
Одна из его первых книг "Программирование на персональных ЭВМ в среде Турбо-Паскаль", - M.: Изд. МГТУ, 1991. - 423 c. Книги можно найти в электронном виде в сети.

И вот окончательно, что у меня получилось по программе:

Код: Выбрать все

program third;
 uses crt; {стандартный модуль}
 const size = 40; {задаём длину последовательности чисел}
 left = 10; {задаём левую границу интервала чисел}
 right = 70; {задаём правую границу интервала чисел}
 type arr = array[1..size] of byte; {объявляем тип данных как массив}
 var i,j,n : byte; {объявляем счётчики циклов}
 a : arr; {объявляем переменную массива}
 counter : byte; {счётчик пар "близнецов"}
 begin
 clrscr; {очищаем экран}
 n:=size; {задаём число чисел в последовательности}
 randomize; {инициализируем генератор случайных чисел}
 for i:=1 to n do a[i]:=left+round((right-left)*random); {генерируем на интервале целые случайные числа}
 writeln('B последовательности '‚n,' чисел на интервале [',left,',',right,']:');
 for i:=1 to n do write(a[i],' '); writeln; {выводим их на экран монитора}
 j:=1; counter:=0; {инициализируем счётчики}
 writeln('Найдены пары "близнецов":');
 while (j<=size) do {начинаем перебор элементов последовательности c первого числа}
 begin
 for i:=j+1 to n do {берём из последовательности следующеe число}
 begin
 if abs(a[j]-a[i])=2 then {сравниваем c первым и, обнаруживая "близнеца",}
 begin
 write(a[j],'-',a[i],' '); {выводим пару "близнецов" на экран монитора}
 inc(counter); {и увеличиваем счётчик числа "близнецов" на единицу}
 end;
 end;
 inc(j); {переходим к следующему члену последовательности и повторяем цикл}
 end;
 writeln;
 writeln('Bсего найдено пар: ',counter); {выводим число пар-"близнецов" на экран монитора}
 end.


A вот окно редактора и ниже окно исполнения:
Изображение
Последний раз редактировалось Developer 29 ноя 2019, 18:52, всего редактировалось 1 раз.
Причина: test


Вернуться в «Computer Science»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 9 гостей