Отправляет email-рассылки с помощью сервиса Sendsay

Pascal с нуля by [CPM]

  Все выпуски  

Pascal с нуля by [CPM] Выпуск №9


Информационный Канал Subscribe.Ru

Рассылка "Pascal с нуля" by [CPM]. Выпуск №9


.:.::BEGIN::.:...

Автор: v()v@#[CPM] mailto: vovanc@bigmir.net

Добрый день (утро, вечер), уважающие нас подписчики!!

Немного посоветовавшись с командой, было решено посвятить данный выпуск символьному типу, о котором до этого умалчивалось. Но сначала надо написать тут решение домашнего задания.
Первый номер 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" - добавить смену цвета при нажатии + или -.

На этом всё. Ответы шлите на ящик. Вопросы тоже туда.

Также вопросы можете задавать мне на форуме по адресу http://studcity.ru/forum/viewforum.php?f=10

.:.::END::.:...


Дизайнерское слово Ustasа

Автор: Ustas[CPM] mailto: Ustas1715@yandex.ru

Приветствую Вас!

Благодарю читателей за содействие, особенно хочется поблагодарить Strory за действительно дельные советы. Призываю подключатся к разработке и усовершенствованию оформления рассылки. Чем удобней оно будет - тем легче будет воспринимать написанное. Мыло в заголовке.



Наша команда [CPM]:

Дизайн,верстка и юзабилити >>> Ustas[CPM]

Пишет >>> v()v@#[CPM] ICQ:88880172

Тоже Пишет >>> MedL[CPM]ICQ:88883515 

 

 



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное