Операции умножения и сложения в Pascal.

В данном уроке мы рассмотрим операции умножения и сложения в Pascal. Умножение в Pascal обозначается знаком «*», а сложение - знаком «+».

Строковые константы в Pascal.

В качестве значения строковой константы может выступать любая последовательность символов. Эта последовательность заключается в апострофы. Строковая константа отличается от символьной константы тем, что здесь в качестве значения константы можно ...

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

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

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

Массив символов.

Одномерный массив символов по своим свойствам существенно отличается от всех остальных массивов языка Паскаль. Свойства одномерного массива символов приближены к свойствам коротких строк (String).

Разветвляющийся вычислительный процесс.

Если вычислительный процесс зависит от определенных условий и реализуется по одному из нескольких заранее предусмотренных направлений, он называется разветвляющимся вычислительным процессом, а каждое ...

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

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





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.
Ответить
 
 
0 # Никита 28.11.2016 10:15
У меня вопрос,можно ли сделать в Pascal ABC так,чтобы созданный файл открылся,и редактирование производить уже в нём???
Ответить
 

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

Защитный код
Обновить

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