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

Pascal с нуля by [CPM]

  Все выпуски  

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


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

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


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

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

Автор: MedL[CPM] mailto: medlmail@bigmir.net

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

Рады вас видеть 8)
За окном пасмурно (не только за Windows'овским), поэтому мы решили выпустить этот выпуск.

Домашнее задание:
Единственная прога, код которой я считаю нужным напечатать - последняя, где надо было вывести треугольник Паскаля. Вот как её "забабахал" Lemyx

 
uses crt;
var i,j,k,s,n : integer;
{   i - номер текущего ряда
    j - номер текущего элемента ряда i
    k - коэффициент, который ищем
    n - нужное количество строк
}
begin
   clrscr;
   write('Введите n - количество строк (1<n<16) : ');
   readln(n);
   GotoXY(35,1);
   Write(1);
   for i:=2 to n do begin
       GotoXY((16-i)*2,i);
       k:=1;
       s :=i-1;
       write(k:5);
       for j:=1 to i-1 do begin

             k:=round(s*k/j);
             dec(s);
             write(k:5)
       end;
   end;
   readln
end.


Сейчас мы рассмотрим ещё пару циклов: цикл с пред- и пост- условием (While & Repeat). Кодовые названия - "Пока", "Повтор". Эти 2 цикла позволяют делать то, что не под силу Forу. В чём их принципиальное отличие от него? Ну, во-первых, никакого заданного количества повторений. Во-вторых, с их помощью (особенно While) можно классно организовать бесконечный цикл, что позволяет улучшить защиту от ДУРАКА, что не может не радовать.

Рассмотрим первый из них - Repeat. Почему Repeat? Потому что так нам хочется. Он нам больше нравится. Итак, его синтаксис:

  Repeat
  .....
  until [условие_выхода];

Цикл выполняется до тех пор, пока не выполнится условие выхода. Также, он в любом случае выполнится один раз. Ещё одно его преимущество - отсутствие традиционных begin ... end;. Это обусловлено наличием собственных операторных скобок.
Пример.

...
repeat
Writeln('v()v@# and MedL');
until keypressed;
 ...

Что мы написали, и что это за keypressed;? Мы написали, что строчка должна выводится до тех пор, пока не нажмут кнопку.

Пример 2.


uses crt;
var
i:byte;
 str:string[15];
begin
clrscr;
str:='v()v@# and MedL';
randomize;
Repeat 
     gotoxy(35,12);
     for i:=1 to 15 do begin
          write(str[i]);
          delay(1024);
          textcolor(random(15));
     end;
until keypressed;
end.

Эта прога иллюстрирует использование одного цикла в теле другого. В любой более-менее приличной программе мы можем встретить очень сложные конструкции из циклов.
Работа проги:
Начало ясно. Там объявляем кучу переменных. Строку на 15 букв, счетчик для For'а.
randomize; - этому мы посвятим целый абзац.

Random(х) - генератор случайных чисел. Х - число, которое определяет интервал, в котором будут находится случайные числа 0..х. Если вы напишите что-то типа


 ...
for i:=1 to 4 do begin

   writeln(random(9999));

end;
 ...

А потом запустите эту прогу несколько раз, вы увидите, что у вас генерируется одна и та же строка. У меня генерируется такая: "0 313 8609 2025".
В природе существует только один настоящий генератор случайных чисел - женская логика. Но никто не может создать программы, которая эмулировала этот процесс.
Но люди потрудились и создали генератор "случайных" чисел, случайность которых зависит от текущего времени и пр. Чтобы его включить, надо написать randomize; где-то в начале проги. Потом вызывать ф-ию random(х), которая возвращает уже случайное число.
У нас в программе случайным образом подбирается цвет каждой буквы строки.
Дальше строка write(str[i]); пишет букву строки с номером i. В нашем случае, если i=3, то строка write(str[i]); выведет на экран ')'. В нашей программе выводится буква, изменяется цвет текста, печатается следующая. Потом всё начинается сначала. Получается "переливающаяся" строка.

Так как данный цикл завершается в случае выполнения условия, мы можем "гонять" его бесконечно, если поставим условие, которое никогда не выполнится. Например, 1=3 или просто false.
Но вы спросите: "Какой в этом смысл?". Например, нам надо организовать защиту от дурака. Мы пишем что-то типа:


 ...
repeat
  write('Введите 100');
  readln(x);
  if x=100 then break;
until false;
 ...


Тут всё ясно. Просьба 'Введите 100' будет выводиться на экран до тех пор, пока пользователь не введёт 100. Оператор break; - "тормоза" нашего цикла. Он прерывает цикл.

Теперь рассмотрим другой цикл - While. Синтаксис:

  while [условие] do 
  begin
   ...
  end;

Цикл выполняется до тех пор, пока выполняется условие. Оба цикла не имеют "привычки" самостоятельно, не спрашивая нас, изменять какую-то переменную. Этот цикл очень похож на repeat; Чтоб сделать бесконечный цикл стоит только написать while true, а для "тормозов" - break.
Пример.


uses crt;
var x:word;
begin
clrscr;
repeat
  write('Введите число: ');
  readln(x);
  while x<>0 do begin
    write(x mod 10);
    x:=x div 10;
  end;
  writeln;
  writeln('Вы хотите повторить действие? 1 - да');
  readln(x);
until not(x=1);
readkey;
end.


Программа пишет число, обратное данному (аналогично написанной раньше). Но на этот раз мы не ограничены тремя знаками, но ограничены типом word; Защиту от дурака пишите сами. Принцип работы: до тех пор, пока от числа ничего не останется, пишем последнюю цифру и отсекаем её.

Домашнее задание:
1) Написать прогу, которая вычисляет сумму цифр числа, введённого с клавиатуры.
2) Написать прогу, которая раскладывает число на простые множители.
3) Написать прогу, которая вычисляет значения ф-ии у(х)=х^2+2x+22 и выводит их на экран для х от -10 до 10 с шагом 1.
4) Вычислить n! для n, введённого с клавиатуры (защита от дурака обязательна).
5) Написать программу, вычисляющую результат возведения заданного числа в заданную степень. Значения степеней - от 2 до 9. Снабдить программу запросом на повторный ввод, расчёт.
6) Написать программу, которая заполняет экран "змейкой", от краёв до центра. Получится что-то типа воронки. Рисунок:

 1) aaaa  2)aaaa  3) aaaa  4)aaaa   5) aaaa
                      a           a      a   a       aaaa
                      a      aaaa      aaaa      aaaa
 

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

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


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

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

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

Во-первых, спасибо за предложения дельные и не очень. Извиняйте, если что не так. Стараемся в меру сил и возможностей. Сами понимаете, что это только рассылка и денег нам за нее не платят:).Прошу обращаться с вопросами, жалобами и предложениями ПО ДИЗАЙНУ на моё мыло.


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

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

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

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

 

 



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


В избранное