вторник, 25 декабря 2012 г.

задачі

 вивід букв англійського алфавіту
 
var c: char;
 
begin
  for c := 'a' to 'z' do
    write(c,' ');
  writeln;  
  c := 'A';
  while c<='Z' do
  begin
    write(c,' ');
    c := succ(c);
  end;
end.
 
вивід послідовностей 1 2 3 4 5 і 5 4 3 2 1
 
 var i: integer;
begin
//  for
  for i := 1 to 5 do
    write(i,' ');
  writeln;
 
  for i := 5 downto 1 do
    write(i,' ');
  writeln;
  writeln;
 
// while
  i := 1;
  while i<=5 do
  begin
    write(i,' ');
    i := i + 1;
  end;
  writeln;
 
  i := 5;
  while i>=1 do
  begin
    write(i,' ');
    i := i - 1;
  end;
  writeln;
  writeln;

вторник, 11 декабря 2012 г.

Таблиця множення на Паскалі

Досить часто потрібно побудувати на екрані якусь двовимірну таблицю. Це можна реалізувати за допомогою двох циклів для. При цьому один цикл повинен бути вкладений в інший.

Припустимо, нам потрібно вивести на екран таблицю множення.
Алгоритм рішення задачі:

Зовнішній цикл для відповідає за формування рядків. Всього їх буде 10, отже кількість ітерацій циклу повинне бути дорівнює 10.

Внутрішній цикл для формує кожне значення в рядку. Всього значень у рядку 10. Значить і число його ітерацій повинно бути 10.

У тілі вкладеного циклу для відбувається формування конкретного значення шляхом множення поточного значення лічильника зовнішнього циклу на поточне значення лічильника внутрішнього циклу. Оскільки протягом десяти ітерацій внутрішнього циклу, значення лічильника зовнішнього циклу не міняється, то виходить рядок, де числа від 1 до 10 множаться на одне і те ж число.

Після виходу з внутрішнього циклу, перед наступною ітерацією зовнішнього циклу потрібно здійснити перехід на новий рядок. Інакше всі значення будуть записані не у вигляді таблиці, а у вигляді одного рядка.


var
  x,y:0..10;
  s:integer;
begin
  for x:= 0 to 10 do
    for y:= 0 to 10 do
      begin
        s:=(x+1)*(y+1);
        write(s:5);
      end;
   writeln;
end.
 
в такому вигляді таблиця виходить до 11, і останній WriteLn не належить першому циклу, від того і не переносить рядок, після завершення другого. 


 Визначення чверті на координатній площині

 Всім відома прямокутна (декартова) система координат, в якій дві перпендикулярні осі ділять площину на чверті. У першу чверть потрапляють точки, у яких обидві координати (X і Y) більше нуля. У другу: х <0 span="span">, у> 0; третю: х <0, у <0 span="span">; четверту: х> 0, у <0 span="span">.

Допустимо, потрібно написати програму, що визначає по координатам точки, в якій чверті вона знаходиться.
Алгоритм рішення задачі:

Для вирішення цього завдання доречно використовувати умовні оператори, якщо-інакше вкладені одна в одну.



var
    x,y: real;
 
begin
    write ('x = '); read (x);
    write ('y = '); readln (y);
 
    write ('Номер четверті координатної  площини: ');
    if (x > 0) and (y > 0) then
        writeln ('I')
    else
        if (x < 0) and (y > 0) then
            writeln ('II')
        else
            if (x < 0) and (y < 0) then
                writeln ('III')
            else
                if (x > 0) and (y < 0) then
                    writeln ('IV')
                else
                    writeln ('-. Точка лежить на осі.');
 
readln
end.

вторник, 4 декабря 2012 г.

Практичне заняття

Визначити яке з трьох, введених користувачем, чисел максимальне і вивести його на екран.

У програмі буде три змінні для чисел, що вводяться користувачем: N1, N2, N3. Також для спрощення алгоритму введемо четверту змінну, в яку по ходу виконання коду буде поміщено максимальне значення: макс.

 
Алгоритм

     Порівняти перше і друге число (N1 і N2). Змінної макс присвоїти значення змінної, що містить більше значення.
     Порівняти значення змінної макс з третім числом, введеним користувачем (n3). Якщо значення n3 виявиться більше, ніж максимальна, то привласнити максимальне значення третього числа. Якщо ж значення максимальної виявиться більше, то нічого не робити.


var
    a1, a2, a3, max: integer;
 
begin
    write ('Введіть три числа: ');
    readln (a1, a2, a3);
 
    if a1 >= a2 then
        max := a1
    else
        max := a2;
 
    if a3 > max then
        max := a3;
 
    writeln ('Максимальне з них: ', max);
 
readln
end.


Як можна переписати цю програму, щоб позбутися від мітки.


label lab;
var month;
begin
    lab:
    write('Введіть номер місяця: ');
    readln(month);
    if not (month in [1..12]) then
        goto lab;
 
 
 Рішення
 
 while not (month in [1..12]) do begin
    write('Номер місяця : ');
    readln(month);
end;