|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Самое простое vol.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. Делаем вывод результата из списка. |
#7
|
|||
|
|||
TStringList это на delphi ... а я к дельфи решил через паскаль пробираться... не знаю правильно это или нет...
пусть это не буквы а просто числа как числа так перетосовать?? мой код один раз пробегается по строке.. а нужно что бы бегал пока условие не будет выполнено ( типа Код:
while a[i]<a[i+1] do Последний раз редактировалось EnumaElish, 04.12.2015 в 23:08. |
#8
|
|||
|
|||
Дык вложенным циклом же ж...
Код:
function Swap(var S : String; I, J : Integer); var ch : char; begin ch := S[i]; S[i] := S[J]; S[J] := ch; end; ... S := 'mama myla ramy'; // Standard bubble sort For i := 1 To Length(S)-1 Do For j := i+1 To Length(S) Do If S[i]>S[j] Then Swap(S,i,j); |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
EnumaElish (06.12.2015)
|
#9
|
|||
|
|||
Pascal: Работа с файлами + немного криптографии.
2 процедуры: 1- Шифровка:берет исходный текст из файла A шифрует и записывает в файл B 2 -Дешифровка: берет исходный файл B расшифровывает и записывает в файл C; Код:
procedure Crypts(var T,G:text); //Ссылаемся на 2 текстовых файла var S:string; i:integer; begin reset(t); //открываем для чтения Файл T while not Eof(T) do begin readln(t,s); //Присваеваем строке S строку текстового файла T for i:=0 to length(s) do begin ord(s[i]):=ord(s[i])+Ckey; {после прибавления ключа проверяем не ушел ли за границы ASCII} if ord(s[i])>256 then ord(s[i]):=ord(s[i])-256+32; {+32 так как первые 32 цифры - управляющие символы ASCII} end; writeln(G,S); //впиываем в файл G строку S end; close(t); end; Procedure Uncrypts(var G,Y:text); var S:string; i:integer; begin reset(g); while not Eof(g) do begin readln(g,s); for i:=0 to length(s) do begin ord(s[i]):=ord(s[i])-3; if ord(s[i])<32 then ord(s[i]):=ord(s[i])+256-32; end; writeln(Y,S); end; close(G); end; Шифрует нормально, но все равно добавляет лишние символы из True получается - Wuxhvvv из I - Luxh откуда берутся эти лишние символы??? При дешифрации сначала вылетали непонятно почему ошибки потом вроде стало дешифроваться но в файле дешифровке например получилось не обратно I а- Код:
Truessssэээ ЊюAB xюA . ёШ_ ёШ_ | аюAF?u` Ђ @ дюAТV@ · дЧ^дЧ^ъС^иЧ^дM@ 0 tѓ@ vA@ p`@ tѓ@ А¦@ §@ ,яAТV@ · tѓ@ <яAТV@ D Последний раз редактировалось EnumaElish, 07.12.2015 в 18:13. |
#10
|
|||
|
|||
все решилось... затупил с управляющими символами
Код:
procedure Crypts(var T,G:text); //Ссылаемся на 2 текстовых файла var S:string; i:integer; begin reset(t); //открываем для чтения Файл T while not Eof(T) do begin readln(t,s); //Берем строку из файла T for i:=0 to length(s) do begin if ord(s[i])>=32 then ord(s[i]):=ord(s[i])+Ckey; if ord(s[i])>256 then ord(s[i]):=ord(s[i])-256+32; end; writeln(G,S); //впиываем в файл G строку S end; close(t); end; |