Ввод логических переменных с клавиатуры.

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

Функции Pred, Succ в Pascal.

В данном уроке мы рассмотрим функции, применяемые к типу CHAR. Функция Pred возвращает в качестве значения предшествующий символ, а функция Succ возвращает последующий символ.

Применение логических операций с оператором IF.

В данном уроке мы рассмотрим применение логической операции And с условным оператором If.

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

Тип данных Boolean.

Тип BOOLEAN (булевский, логический). Логический тип в языке Паскаль задается как перечисляемый тип, содержащий всего два значения, которые имеют идентификаторы FALSE (ложь) и TRUE (истина).

Вложенный арифметический цикл.

Под вложенным арифметическим циклом понимают такую алгоритмическую структуру, при которой в тело одного цикла с параметром включен другой цикл со своим параметром.

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

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





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.
 
   ГлавнаяПаскальПроцедуры и ФункцииПрограмма, которая вводит слово в одном регистре и выводит в другом.