![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Только начал изучать delphi с паскаля, буквально несколько дней
уже прошел циклы немного процедур итд... никак не могу понять как решить задачки простые с книги 'песни о паскале' ------------------------------------------- a)Почтальон разносит газеты по улице, состоящей из N домов. Четные и нечетные номера расположены по разные стороны улицы. В здравом уме почтальон не рискует лишний раз переходить её. Ваша программа должна напечатать последовательность номеров, по которым будут разнесена почта, когда почтальон начинает работу: · с первого дома; · со второго дома; · с N-го (то есть последнего) дома. -------------------------------------------- я так понимаю тут с помощью счетчика.. уже много всяких задачек решил.. но тут не пойму (( -------------------------------------------- b) Создайте процедуру, печатающую все числа, кроме единицы, на которые без остатка делится число N, где N — параметр процедуры. Напишите программу для проверки этой процедуры. Последний раз редактировалось EnumaElish, 30.11.2015 в 01:14. |
#2
|
|||
|
|||
![]() а) Ну, если нет ограничения на саму почту (т.е. почта есть для всех домов), то, видимо, разговор идет о циклах с шагом 2. Т.е. сначала проходимся по одной стороне улицы, потом по второй. Третий подвопрос - обратный цикл.
б) Ну тут просто. Идем циклом от 2 до SQRT(N)+1 и смотрим отсаток от деления. Если он 0, то печатаем число. |
#3
|
|||
|
|||
![]() Спасибо.
По почтальону получилось но не через for to do Код:
var a,c:integer; begin c:=1; //если начинаем с 1 дома readln(a); //вводим количество домов repeat c:=c+2; writeln(c); until (c=a) or (c=a+1) or (c=a-1); if c=a then begin c:=a-1; writeln(c); end; repeat c:=c-2; writeln(c); until (c=1) or (c=0); end |
#4
|
|||
|
|||
![]() А никто и не говорил, что for решает любые задачи. Персонально, я не очень люблю цикл repeat-until, предпочитаю while-do, он более читабельный.
|
#5
|
|||
|
|||
![]() Спасибо там все решил все было просто...
Вот новая делема на тему применения функций.. -===================- Для введенной пользователем строки напечатать позиции всех входящих в неё символов (кроме пробелов) в алфавитном порядке. Для символов, которые встречаются несколько раз, напечатать их позиции в одной строке. Например, для слова «PASCAL»: -===================- понятно что цифры нужно раскидыть по цифре ASCII ... как максимальное и минимальное найти в цикле все эт понятно.. но как их в итоге по порядку раскидать... делаю так Код:
function swap(var a:string):string; var i:integer; x:char; begin for i:=0 to length(a) do if a[i]<a[i+1] then if i+1>length(a) then break else begin x:=a[i]; a[i]:=a[i+1]; a[i+1]:=x; //свапаем местами end; end; вводим abbassa получаем bbassa как зациклить чтобы пока не станет верным условие Код:
a[i]>a[i+1] p.s.поясните в каких случаях нужно ставить ссылку на переменную в функцию или процедуру типа Код:
function swap(var a:string):string; p.s.s. и как из паскаля копировать текст куда нибудь?) постоянно приходится руками на форум набирать ) Последний раз редактировалось EnumaElish, 04.12.2015 в 03:08. |
#6
|
|||
|
|||
![]() сортировка делается двойным циклом.
Если есть возможность, то можно использоваться TStringList добавив не только значение, но и объект, в которм хранить список позиций. На самом деле задача решается в 3 приема. 1. Сначала в какой-нить список пишем все буквы и их позиции. 2. Сортируем полученный список по буквам. 3. Делаем вывод результата из списка. |