Добрый день (утро, вечер), уважающие нас подписчики!!
Немного посоветовавшись с командой, было решено посвятить данный выпуск символьному типу, о
котором до этого умалчивалось. Но сначала надо написать тут решение домашнего задания.
Первый номер by Brut.
uses crt;
var n:longint;
s:byte;
begin
clrscr;
writeln('Vvedite chislo');
readln(n);
s:=0;
while n<>0 do {знак <> - не равно}
begin
s:=s+n mod 10;
n:=n div 10;
end;
writeln(s);
readkey;
end.
Принцип работы - "отрезаем" от каждого числа последнюю цифру, складываем её значение с суммой всех
цифр, что уже "отрезали" от числа, до тех пор, пока от числа ничего не останется.
№2 by v()v@#[CPM]
mailto: vovanc@bigmir.net
uses crt;
var
chislo:word;
result:byte;
delitel:word;
begin
clrscr;
writeln('Programm by v()v@#');
write('Enter some number: ');
readln(chislo);
writeln('Mnozhiteli:');
if chislo=1 then writeln('1') else
while chislo<>1 do begin
for delitel:=2 to chislo do if chislo mod delitel = 0 then break;
chislo:=chislo div delitel;
writeln(delitel);
end;
writeln('Thank you.');
readkey;
end.
№2 by Александр.Чтобы показать, что одну программу можно написать
разными способами.
uses crt;
var
d {delitel}
,m {vvodimoe chislo}
,i {peremennaia cikla, proveriat delitel na celoe chislo}
:integer;
begin
d:=2;
repeat
clrscr;
writeln('zadacha prostie mnozhiteli');writeln;
write('vvedite chislo > 0 ');
readln(m);
until m>0;
clrscr;
writeln('zadacha prostie mnozhiteli');writeln;
writeln('vi vveli chislo ',m,', ego prostie deliteli:');writeln;
if (m<=2) and (m>0) then writeln(m);
while (m>2) do begin
if d>m then begin writeln('d=',d);break;end;
if (m mod d)=0 then begin
m:=m div d;
writeln(d);
dec(d);
end;
inc(d);
end;
repeat until keypressed;
end.
№5 by [CPM]
uses crt;
var
i:word; {для цикла}
x,y:byte; {координаты текущего символа}
l,r,t,b,df:byte;
{переменные, чтоб узнать максимальную и минимальную координату
на данном этапе (для поворотов) и переменная,
определяющая направление}
begin
clrscr;
x:=1;
y:=x;
df:=x;
l:=0;
r:=l;
t:=l;
b:=l;
for i:=1 to 1975 do begin
gotoxy(x,y);
write('a');
if x=79-r then begin
if df=1 then begin
df:=2;
inc(t);
end;
if df=2 then begin
if y=25-b then begin
df:=3;
inc(r);
end;
end;
end;
if x=1+l then begin
if df=3 then begin
df:=4;
inc(b);
end;
if df=4 then begin
if y=1+t then begin
df:=1;
inc(l);
end;
end;
end;
case df of
1:inc(x);
2:inc(y);
3:dec(x);
4:dec(y);
end;
delay(400);
end;
end.
Теперь о символьном типе.
Переменные данного типа хранят один символ, и под каждую из них отводится 1 байт памяти.
Нужны такие переменные, в основном, когда от пользователя требуется подтвердить какое-то действие, например, нажать "у" в качестве подтверждения
чего-либо. Объявляются переменные данного типа, как и все остальные, в разделе объявлений переменных (var).
Объявление выглядит примерно так.
var
name_of_variable:char;
...
Переменной можно, как и любой другой, присвоить какое-либо значение в виде одного символа.
Также можно присвоить значение нажатой клавиши. Это делается примерно так:
....
ch:=readkey;
....
Чтобы всем было понятнее, что я имел в виду, приведу пример проги. Эта прога практически ничего не будет делать, кроме как
выводить просьбу о нажатии на 'y' или 'n'.
uses crt;
var
ch:char;
begin
clrscr;
repeat
textcolor(red);
writeln('Вы хотите понажимать на кнопки(y/n)?');
ch:=readkey;
clrscr;
if ch='y' then writeln('Мне тоже нравиться нажимать на кнопки!');
until ch='n';
end.
Тут мы читаем то, что нажал пользователь, пока он не нажмёт 'n' или Reset/Power.
Если он нажимает 'y', то мы ему ещё одно сообщение выводим. Всё остальное прога игнорирует.
Теперь надо рассмотреть пару функций для работы с переменными данного типа. Дело в том, что
переменная хранит не сам символ, а его номер в таблице ASCII. В нашей программе, если мы нажмём, например,
какую-то из "стрелочек", то в переменную занесётся код нажатой клавиши. В наших программах мы можем
печатать любой символ из этой таблицы. Поэкспериментируйте с такой строчкой в своих программах.
....
writeln(#1);
writeln(#100);
....
На экране будут первый и сотый символы таблицы. Но как же мы узнаем, какой код имеет тот или иной
символ? Мы можем посмотреть в таблицу символов, а можем сделать для этого программу.
Но перед этим рассмотрим пару функций.
1) Ord(x); - возвращает порядковое значение выражения перечисляемого типа. В нашем случае, если в
качестве параметра (вместо х) поставить переменную символьного типа, функция возвратит нам код этого символа.
2) Chr(x); - в качестве параметра передаём число от 0 до 255 и получаем соответствующий символ.
А теперь открываем Паскаль и набиваем следующий код
uses crt;
var
c:char;
begin
clrscr;
repeat
c:=readkey;
if c=#0 then begin write(ord(c)); c:=readkey;
writeln(' and ',ord(c));
end
else writeln(c,'=',ord(c));
until c=#27;
end.
Вы заметите, что заглавные и прописные буквы расположены по алфавиту, мы можем использовать их в
цикле.
...
for ch:='a' to 'z' do write(ch);
for ch:='z' downto 'a' do write(ch);
...
На экран будет выведен алфавит, а потом алфавит в обратном порядке.
Напишем Paint в текстовом режиме.
uses crt;
var x,y:byte;
begin
clrscr;
writeln('esc for exit');
x:=12;
y:=12;
repeat
gotoxy(x,y);
write(#1);
c:=readkey;
case c of
#72: dec(y);
#80: inc(y);
#77: inc(x);
#75: dec(x);
end;
until c=#27;
end.
Объявляем пару переменных для положения "кисти". Чистим экран. Рисуем символ в
позиции, заданной координатами х и у. Читаем у Юзверя клавишу. После этого сравниваем
то, что он нажал с каждой из "стрелочек". В зависимости от того, что он нажал, увеличиваем\уменьшаем
соответствующую координату на 1. Рисуем символ в позиции,... Всё это работает до нажатия Esc.
Домашнее задание:
1) Написать прогу, которая выведет каждую вторую букву алфавита.
2) Вывести на экран все символы с их кодами.
3) Пользователь вводит, что хочет с клавиатуры, а мы считаем все символы 'a' в
последовательности, а все 'o' заменяем на '()'.
4) Усовершенствовать "PAINT" - добавить смену цвета при нажатии + или -.
На этом всё. Ответы шлите на ящик. Вопросы тоже туда.
Благодарю читателей за содействие, особенно хочется поблагодарить Strory
за действительно дельные советы. Призываю подключатся к разработке и усовершенствованию
оформления рассылки. Чем удобней оно будет - тем легче будет воспринимать написанное.
Мыло в заголовке.