Функции LENGTH и CONCAT.

Функция Length возвращает в качестве значения длину строки. Например, если в строковой переменной «stroka» записано слово «Pascal», то Length(stroka) будет равно 6. Эта операция аналогична операции Ord(stroka[0]), которую мы разбирали в 1-м уроке. ...

Константы в Pascal.

Иногда, бывает так, что у нас в программе встречаются величины, которые не меняются в процессе выполнения программы (т.е. фактически они противоположность переменных). Такие величины называются константами. Константы указываются в специальном ...

Использование program, begin…end, write, readln, Uses Crt, Clrscr.

В этом уроке мы напишем самую простую программу, состоящую всего из пяти строк. Эта программа будет выводить сообщение на экран. Для написания программы нам необходимо знать как работают операторы Write, Readln, а также понять для чего нужны ...

Циклы и массивы

Сортировка простым включением и простым выбором.

Сортировка простым включением.
Пример 33. Методом простого включения упорядочить (отсортировать) в порядке возрастания массив из 8 целых чисел (44, 55,12,42, 94, 18, 06, 67).

Манипулирование строками STRING.

В языке Паскаль при работе с текстами чаще всего используются короткие строки типа STRING. Стандартные процедуры READLN(St), WRITE(St) и WRITELN(St) поддерживают ввод и вывод строк переменной длины ...

 Напишем программу, которая будет вводить с клавиатуры слово в одном регистре (строчными буквами) и выводить на экран это же слово в другом регистре (прописными буквами).

 Программа, которая вводит слово в одном регистре и выводит в другом.





program procedura2;
uses crt;
procedure upstring (s1: string; var s2: string);
var  i:integer;
       c: char;
begin
s2:= ‘’;
for  i:=1 to length (s1) do
begin
c:=s1[i];
c:=chr(ord(‘A’) – ord(‘a’) + ord (c));
s2:= s2+c
end
end;
var isxstroka, preobrstroka: string;
begin
clrscr;
writeln (‘Введите строку: ’);
readln (isxstroka);
upstring (isxstroka, preobrstroka);
writeln(‘Результат: ’, preobrstroka);
readln
end.



В строке №3 записываем процедуру. Процедуры в Паскаль могут иметь формальные  параметры, а могут не иметь их. В нашем примере процедура с названием «upstring» (название мы придумываем сами) имеет формальные параметры. Формальные параметры для процедуры указываются в круглых скобках сразу же за именем процедуры. В нашем примере формальный параметр «s1: string» называется параметр-значение, а «s2: string» - параметр-переменная. Параметр-значение используется для определения входных данных. Например, в нашей программе мы будем вводить с клавиатуры какое-то слово. Это слово и будет входными данными. Параметр-переменная используется для определения выходных данных. В нашей программе после введения какого-то слова должно получится то же самое слово, только в другом регистре. Это слово является выходными данными. Параметры отделяются друг от друга точкой с запятой. Перед параметром - переменной, который определяет выходные данные, ставится слово «var». Таким образом, получается, что «s1» является переменной для хранения исходного слова (которое мы будем вводить с клавиатуры), а «s2» будет являться переменной для хранения преобразованного слова.

В строке №4 объявляется переменная «i», которая будет являться счетчиком для цикла. В нашей программе мы будем использовать цикл, поэтому обязательно необходимо указывать переменную, которая будет являться счетчиком для этого цикла.

В строке №5 объявляется переменная для хранения преобразованной буквы.

Строка №6. Здесь начинается тело процедуры, т.е. далее будут расположены все операторы процедуры.

Строка №7. Первый оператор в процедуре – это присвоение переменной s2 значение пустой строки. Переменная s2,  используется для хранения выходной строки, т.е. той строки, которая получится после преобразования. Пока в этой переменной ничего не должно быть, поэтому мы присваиваем ей пустое значение.

Стока №8. Здесь записываем цикл. Для каждого элемента, начиная с первого, и заканчивая последним,  должны выполняться действия, которые следуют за словом «do». Функция length определяет количество символов во входной строке s1. Например, если мы введем слово «pascal», то length(s1) будет равно 6. Таким образом, получается, что в цикле будет участвовать 6 элементов. 1-ому  элементу – соответствует значение  «p», 2-ому элементу – «a», 3-му – «s», 4-ому – «c», 5-ому – «a», 6-ому – «l». Для всех этих элементов должны выполняться операции, которые следуют  за словом «do». Так как этих операций несколько они заключаются в операторные скобки begin…end. (строка №9 и №13).

Строка №10. Здесь записывается первая операция, которая производится с каждым элементом. Переменной «с» присваивается значение элемента  s1[i]. Первый элемент «i» равен 1, а значение первого элемента s1[i] равно «p» (если мы вводим с клавиатуры слово «pascal»).

В строке №11 переменной «с», которая содержит значение первого элемента «p» присваивается новое значение. Теперь разберемся, что это за значение.
Если мы посмотрим Кодовую таблицу ASCII, то увидим, что прописные буквы латинского алфавита имеют числовой код, который отстает от числового кода соответствующих строчных букв на 32. Например, код буквы «A» равен 65, код буквы «a» равен  97. Разница равна – 32. То же самое получается со всеми другими буквами латинского алфавита.
Теперь разберем формулу chr(ord(‘A’)– ord(‘a’) + ord (c)) .
1-ая операция - ord(‘A’) = 65
2-ая операция - ord(‘a’) = 97
3-я операция - ord(с) = 112 (если первое значение переменной – буква «p»)
Теперь 65-97+112 = 80. Смотрим Кодовую таблицу ASCII и видим, что коду числовому 80 соответствует латинская буква «P»
3-я операция – chr = P.
Таким образом, получается, что строка №10 присваивает переменной «с» туже самую букву, только в другом регистре. Можно было сделать проще: просто отнять от числового кода буквы число 32: chr(ord (c) - 32).
Строка №11. Записываем в переменную «s2» значение,  которое получается при сложении первоначального s2 (оно имеет пустое значение) и переменной «с», которая теперь имеет значение «P».
Все операции, которые записаны в строках №10-№12 будут производиться над всеми 6-ю элементами, благодаря циклу в строке №8.

В строке №14 заканчивается тело процедуры.

В строке №15 записываются переменные, которые относятся уже к основной программе. Переменная «isxstroka» будет использоваться для хранения исходного слова.
Переменная «preobrstroka» будет использоваться для хранения преобразованного слова.

Строка №19. Вводим с клавиатуры исходное слово, например,  «pascal».

В строке №20 записываем имя нашей процедуры и в скобках указываем фактические параметры. Фактический параметр «isxstroka» соответствует формальному параметру «s1», а фактический параметр «preobrstroka» соответствует формальному параметру «s2».

Строка №21. После того как процедура будет выполнена на экран выведется сообщение.

procedurih v paskalj..

procedurih v paskalj...

Та же самая задача, но с использованием русский букв, будет выглядеть так:





program procedura2;
uses crt;
procedure upstring (s1: string; var s2: string);
var  i:integer;
       c: char;
begin
s2:= '';
for  i:=1 to length (s1) do
begin
c:=s1[i];
if ord (c)<=175 then
c:=chr(ord('А') - ord('а') + ord (c))
else
c:=chr(ord('Р') - ord('р')+ord (c));
s2:= s2+c
 end
end;
var isxstroka, preobrstroka: string;
begin
clrscr;
writeln ('Введите строку: ');
readln (isxstroka);
<li>upstring (isxstroka, preobrstroka);</li>
<li>writeln('Результат: ', preobrstroka);</li>
<li>readln</li>
<li>end.</li>



В строке №12 используются русские буквы "А" и "а".

В строке №14 используются русские буквы "Р" и "р"

procedurih v paskalj.....

procedurih v paskalj....


Предыдущая статья : Процедуры в Паскаль.

Оглавление : Уроки Паскаль. Процедуры и функции.

Следующая статья : Функция KeyPressed.


Комментарии  

 
-1 # Saymon 01.05.2012 07:59
Вопрос: а как сделать так чтобы в регистре была еще и кириллица?
Ответить
 
 
-1 # Administrator 02.05.2012 07:52
В общем, ответ дописал в конце этой статьи.
Ответить
 
 
-1 # Saymon 02.05.2012 09:25
очень благодарен
Ответить
 
 
-1 # Punisher 06.05.2012 12:28
А как сделать поиск с независимым регистром процедурой LoverCase?
Ответить
 
 
-1 # Administrator 06.05.2012 14:53
Какой поиск? Поподробнее.
Ответить
 
 
-1 # Punisher 06.05.2012 17:05
мне дали задание: сделать программу из 30 записей и чтобы там был поиск с независимым регистром
Ответить
 
 
+5 # Administrator 06.05.2012 19:42
В Паскале процедуры LowerCase нет, есть только UpCase, которая переводит буквы в верхний регистр. Чтобы создать 30 записей, необходимо создать типизированный файл и ввести поочереди все 30 записей. Например, программа внизу вводит 30 записей: фамилию человека и год его рождения и записывает их в файл.
uses crt;
type dan=record
fam:string[15];
god_rog:integer ;
end;
var
vvod:array[1..3 0] of dan;
baza:file of dan;
i:integer;
begin {1}
clrscr;
for i:=1 to 30 do begin
Writeln('Введите фамилию');
readln(vvod.fam);
Writeln('Введите год рождения');
readln(vvod.god_rog);
end;
assign(baza,'D:/base_of_data.dat');
rewrite(baza);
for i:=1 to 30 do
write(baza, vvod);
close (baza);
end.

Следующая программа производит поиск в этом файле. Вы вводите фамилию (большими или маленькими буквами), на экран выводится фамилия и год рождения. При этом, следует учитывать, что в первой программе (когда вы создаете 30 записей) фамилии необходимо вводить в нижнем регистре.
uses crt;
type dan=record
fam:string[15];
god_rog:integer ;
end;
var
vvod:dan;
baza:file of dan;
i:integer;
kolsimfam:byte;
fampoisk1:strin g[15];
fampoisk2:string[15];
begin
clrscr;
assign(baza,'D:/base_of_data.dat');
reset(baza);
Writeln ('Введите фамилию. Достаточно ввести лишь несколько символов');
readln(fampoisk1);
kolsimfam:=length (fampoisk1);
while not eof(baza) do
begin
read(baza,vvod);
fampoisk2:=copy(vvod.fam,1,kolsimfam);
if (fampoisk1=famp oisk2) or (fampoisk1=upca se(fampoisk2)) then
begin
writeln ('ФИО -',vvod.fam);
write ('Год рож.-',vvod.god_rog);
end;
end;
close(baza);
readln;
end.
Ответить
 
 
0 # Ромка 20.05.2012 19:19
Есть код программы. Как сделать поиск с независимым регистром с кириллицей?
Program odnogruppniki;
Uses crt;
type opisanie= record
imya: string;
familiya: integer;
adress: string;
telefon: string;
end;

var fer: opisanie;
a: file of opisanie;
b: integer;
begin
clrscr;
writeln ('Для ввода информации нажмите 1’);
writeln ('Для вывода нажмите 2');
writeln ('Для выхода 3');
readln (b);
case b of
1: begin
clrscr;
writeln ('Введите данные');
writeln;
writeln ('?Имя ');
readln (fer.imya);
writeln (‘Фамилия: ');
readln (fer.familiya);
writeln ('адрес: ');
readln (fer.adress);
writeln ('Телефон: ');
readln (fer.telefon);
assign (a, 'C.group.txt');
reset (a);
seek (a, filesize (a));
write (a, fer);
close (a);
readln;
end;
2: begin
assign (a, 'C:\group.txt') ;
reset (a);
while not eof (a) do
with heros do
begin
read (a, fer);
writeln (imya:16,' ', familiya:4,' ', adress:18,' ', telefon:7);
end;
readln;
close (a);
end;
end;
end.
Ответить
 
 
-1 # Administrator 22.05.2012 04:36
Предыдущий комментарий почитай. Там вроде все понятно.
Ответить
 
 
-1 # Punisher 27.05.2012 11:15
а как можно сделать динамическую сортировку списка??? вот я сделал записи, не так как у вас через массив, и организовал поиск с независимым регистром.
Ответить
 
 
-1 # Administrator 27.05.2012 15:27
Что такое динамическая сортировка. Поподробнее, что вы хотите получить?
Ответить
 
 
+2 # 2 курс 06.02.2013 19:38
А так ли сильно при написании игр понадабятся регистры? Для чего они нужны? И есть ли такое паняти как регистры в языках java и C++?
Ответить
 
 
-1 # newgeniy 09.02.2013 02:16
ну вы вообще спросили))
вам виднее что у вас за игра в голове)
думаю подобная программа полезна для каких то программ, веб-сайтов где учитывается регистр букв или нужно выводить в таблицах какой то расчетной программы слова с определенным регистром, например пользователю дается возможность вводить данные в любом виде а в таблице будет выводиться данные в таком каком прикажите вы программе. :-| как это может относится к играм я даже придумать не могу) ;-)
Ответить
 
 
-1 # newgeniy 09.02.2013 02:17
да такое понятие есть во всех кроссплатформен ных языках программирования
главное что это есть в вашем любимом Паскале :P
Ответить
 
 
-1 # Dem 13.02.2013 09:37
Там где вы приписываете переменной «s2» значение... Это уже строка №12, а не №11.
Ответить
 
 
+2 # Никита 28.11.2016 10:15
У меня вопрос,можно ли сделать в Pascal ABC так,чтобы созданный файл открылся,и редактирование производить уже в нём???
Ответить
 
 
0 # Друзья 29.09.2021 06:10
Программа редактирования строки текстового файла, например: нам дан 1.txt в нём 10 строк и мне нужно написать hello people на 9 строке:
begin
var s := ReadAllLines('1 .txt');
s[8] := 'hello people';
WriteAllLines(' 1.txt', s);
end.
Ответить
 

Добавить комментарий

   ГлавнаяПаскальПроцедуры и ФункцииПодпрограммы в Паскаль.