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

Pascal с нуля by [CPM]

  Все выпуски  

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


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

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


by v()v@#[CPM]


BEGIN

Доброе время суток, уважаемые подписчики!!

Очень было приятно, когда на наши e-mail после выпуска рассылки №5 начали приходить многочисленные письма с ответами на домашнее задание, а от особо умных и внимательных читателей указания на ошибки.

Все должны были заметить ошибку, которая была допущена в прошлом выпуске. Но заметили это единицы. Хочется попросить вас внимательней читать рассылку и более критично относиться ко всей литературе, которую вы читаете, включая нашу рассылку.
ОШИБКА:
Операция "включения" битов. Вместо логического "И" там надо ставить логическое "ИЛИ" или мы ничего не получим в приведённом примере, кроме нулей. №3 из домашнего задания - подумать, как "выключаются" биты. На этот вопрос нам прислали огромное кол-во разных вариантов. Самым универсальным является такой:

1001001001
and
1111111110
---------
1001001000

Как видите, после выполнения такого трюка был выключен последний бит.

Всё в домашнем задании должно быть ясно. Но всё-таки я приведу решения некоторых из них. №4 и №7.
№4 by v()v@#[CPM]

uses crt;
var
x,x1:real;
a,b,c:real;
d:real;
begin
clrscr;
writeln('Made by v()v@#. KIEV,UKRAINE,2004'); {понты}
writeln('Enter a,b and c (ax^2+bx+c=0)');
write('a=');
readln(a); {читаем а,...}
write('b=');
readln(b); {...b и...}
write('c=');
readln(c); {...с.}
if a=0 then begin {если а=0, то у нас уравнение вида bх+c=0}
  if b=0 then begin {если и b равно нулю, то у нас уравнение вида с=0}
   if c=0 then writeln('X is R') {если и с равно нулю, то равенство получается при любых значениях Х}
   else writeln('Бред'); {если а=0, b=0, с не равно нулю, то у нас получается что-то типа 3=0, а это бред.}
  end
  else begin {если b не равно 0, то решаем уравнение вида bх+c=0 и выводим корень}
   x:=(-c)/b;
    writeln('X = ',x);
  end;
end
else begin {если не повезло и все коэффициенты не равны нулю, решаем уравнение, а для этого...}
 d:=b*b-4*a*c; {...находим дискриминант.}
  if d<0 then writeln('X is empty, because d<0') {...если он меньше нуля, то корней ур-ие не имеет.}
  else begin
   x:=((-b)-sqrt(d))/2*a;
   x1:=((-b)+sqrt(d))/2*a;
   writeln('x1 = ',x);
   writeln('x2 = ',x1);
  end;
end;
readkey;
end.


№7 by lemyx
program n7;
uses crt;
var hour, min : byte; {chasy i minuty}
begin
clrscr;
write('Vvedite vremya : hh mm',#13#10,'hour=');
readln(hour);
if hour > 23 then begin
 clrscr;
  writeln('Chasy dolzhny byt'' v predelah ot 0 do 23');
end
Else begin
write('minute=');
readln(min);
if min > 59 then begin
  writeln('Minuty dolzhny byt'' v predelah ot 0 do 59');
end else begin
writeln('Vvedennoe vremya: ',hour,':',min);
{podschet vremeni na minutu bol'she}
inc(min);
if min=60 then begin
  writeln('Nastupil novyi chas');
  min:=0;
  inc(hour);
  if hour=24 then begin
   writeln('Nastupil noviy den');
   hour := 0;
  end
end;
{vivodim novoe vremya}
writeln('Novoe vremya: ',hour,':',min);
end;
end;
readln;
end.


Теперь начнём рассматривать совершенно новую фишку в программировании - циклы. Сегодня мы рассмотрим первый из них. Это цикл с заданным количеством повторений. Но то, что я только что написал, наверное не вызвало у вас никаких эмоций, а некоторые даже не поняли того, о чём я писал.
Представим такую ситуацию: вам надо вывести своё имя посередине экрана 25 раз сверху вниз. Вам сразу захотелось написать что-то типа ...
gotoxy(38,1);
write('v()v@#');
gotoxy(38,2);
write('v()v@#');
gotoxy(38,3);
write('v()v@#');
gotoxy(38,4);
write('v()v@#');
...


И так 25 раз. Но можно сделать это намного проще, ведь существуют циклы. В этом выпуске мы рассмотрим первый из них - цикл с заданным количеством повторений. Он имеет такой синтаксис.
for [переменная_счётчик]:=[начальное_значение] to [конечное_значение] do
begin
куча операций. но если действие одно, не надо ставить бєгин и єнд.
end;

Теперь напишем предложенную программу с использованием цикла.
uses crt; {традиция}
var
i:byte; {переменная под счётчик. так как делаем всего 25 повторений, хватит байта}
begin
clrscr;
for i:=1 to 25 do
begin
 gotoxy(38,i);
 write('v()v@#');
end;
readkey;
end.


Такое решение, по-моему, намного проще и красивее. Теперь давайте подробнее рассмотрим эту программу. Я опускаю объяснение "традиционных" строк типа очистки экрана. Начнём со строки for i:=1 to 25 do. Это заголовок цикла. Тут мы говорим программе делать 25 повторений действий между begin и end;. А там у нас стоят аж 2 действия. Первое- gotoxy(38,i); - переместить курсор в указанную позицию. У вас возникнет вопрос о букве i на месте указания координаты относительно оси (у). Дело в том, что в цикле от нас "скрыто" одно очень интересное действие: inc(i);, что аналогично i:=i+1;. Что же получается? Мы присваиваем начальное значение переменной i, после чего выполняются ещё две операции. После этого у нас на мониторе что-то типа
  v()v@#
  
  
  
  
  
  
После этого цикл пойдёт выполняться по второму кругу. Выполнится также inc(i);, что сделает i=2. И запись gotoxy(38,i); станет эквивалентной такой gotoxy(38,2);. На экране будет:
  v()v@#
  v()v@#  
  
  
  
  
  
И так цикл буде выполняться, пока i не станет равно 25. После последнего выполнения цикла программа будет выполняться дальше. В нашем случае перейдёт на команду readkey;.

Теперь для закрепим выученное и напишем великую программу с кодовым названием "таблица умножения"
uses crt;
var
a,i:byte; {а под число, на которое будем генерировать таблицу, і под счётчик цикла}
begin
clrscr;
writeln('vvedite chislo ot 1 do 10');
readln(a);
for i:=1 to 10 do {таблица у нас показывает результат умножения числа на каждое от 1 до 10, поэтому в цикле 10 шагов}
 writeln(a,'*',i,'=',a*i); {(1)}
readkey;
end.


Всё должно быть понятно, вот только строчку с пометкой (1) я попытаюсь вам разъяснить подоходчивей.
writeln(a,'*',i,'=',a*i);
Строка выводит на экран число, которое мы ввели (например, 4), потом знак "*", потом то значение, которое в данный момент "лежит" в переменной i, потом знак "=", а потом результат умножения введённого числа на переменную-счётчик.
Таким образом после первого выполнения на экране будет:
vvedite chislo ot 1 do 10
5
5*1=5
  
  
  
  
  
  
После второго:
vvedite chislo ot 1 do 10
5
5*1=5
5*2=10 
  
  
  
  
  
И так далее, пока не выполнится 10 действий. На экране будет:
vvedite chislo ot 1 do 10
5
5*1=5
5*2=10 
5*3=15  
5*4=20  
5*5=25  
5*6=30
5*7=35
5*8=40
5*9=45
5*10=50  
  
На этом заканчиваю свою писанину.
ДОМАШНЕЕ ЗАДАНИЕ
1) Разобраться с материалом
2) Разобрать программу. Ниже код.
uses crt;
var
y:byte;
begin
clrscr;
for y:=1 to 25 do begin
 gotoxy(round(y*3),y);
 write('VOVAN');
 textcolor(y);
end;
readkey;
end.


3) Написать программу, аналогичную данной, только чтоб выводила по антидиагонали
4) Написать программу вывода треугольника Паскаля до 9-го ряда. Выглядит примерно так:
      1 
     1  1
    1  2  1
   1 3  3  1
  1 4 6  4  1
 1 5 10 10 5 1
  
Корявая она у меня получилась, но это исправимо. Если не получится сделать треугольник, то хоть вывод энного ряда сделайте.
Все ответы просьба слать на мыло.

END.


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

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

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

Ждёт вдохновления>>>@mor[CPM]

Вот они все пишут да пишут(но пишут интересно:) - а красоты  то нету.
Вот я(Ustas[CPM]) и взялся за дизайн. Но это только начало. Ждите сайт. Если есть 
жалобы и пожелания - на моё мыло: Ustas1715@yandex.ru

 




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


В избранное