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

Уроки программирования на Turbo Pascal


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


Уроки программирования на Turbo Pascal #8

Подписчиков на 2002-08-08 - 589 человек(а).

Рассылка проекта "Олимпиада.com.ru".


Главная Архив задач Конкурс Рассылки Форум Гостевая книга Контакты

Здравствуйте, уважаемые подписчики!


  Сегодняшний урок мы начнем с разбора 6-го задания предыдущего урока, так как её решение содержит некоторые подводные камни, на которые, как правило, натыкаются начинающие программисты.


Урок 8


6.*Даны два числа. Меньшее из них замените полусуммой этих чисел, а большее - их произведением.

  На первый взгляд задача решается просто:

  If a>b then begin b:=(a+b)/2; a:=a*b end
        else begin a:=(a+b)/2; b:=a*b end;

  но если выполнить эту команду, то ответ получится неверным, почему?
  Предположим
a=10, B=20. Что же получится в результате выполнения оператора. Так как /a<b, то условие, указанное в операторе не выполнено, следовательно, выполнится
  else begin a:=(a+b)/2; b:=a*b end;

  подставим значения и получим:
  a:=(a+b)/2=(10+20)/2=15
  b:=a*b =15*20=300
вместо 10*20=200 потому, что к этому моменту первоначальное значение а=10 изменилось и стало равно 15.

  Следовательно надо как то сохранить первоначальные значения. Можно запомнить их в дополнительных переменных:
  х:=а;
  у:=b;
  If a>b then begin b:=(x+y)/2; a:=x*y end
        else begin a:=(x+y)/2; b:=x*y end;

  а можно запомнить в дополнительных переменных полусумму и произведение:

  Program prim_6;
  Var a,b,x,y:real;
  Begin
    Write('введите два числа');
    Readln(a,b);
    X:=a*b;        {запомним значение произведения}
    Y:=(x+y)/2;    {запомним значение полусуммы}
    If a>b then begin b:=y; a:=x end
      else begin a:=y; b:=x end;
    Writeln (' a= ',a:0:2,' b=',b:0:2);
    Readln
  End


Логические операции и выражения.

  Если условие выполняется, то говорят, что соответствующее выражение истинно, если не выполняется - выражение ложно. Для построения сложных условий в Паскале имеются четыре логических операции:
  NOT - отрицание (НЕТ),
  AND - логическое умножение (И),
  OR  - логическое сложение (ИЛИ),
  XOR - исключающее "или".


  Результаты логических операций для различных значений операндов приведены в таблице, где использованы обозначения: Т- true (истина), F - false (ложь).

A B Not A A and B A or B A xor B
T T F T T F
T F F F T T
F F T F F F
F T T F T T

  где А и В результат операции отношения.

  Приоритеты логических операций: 1) not; 2) and; 3) or; 4) xor.

  Примеры логических выражений:
  a) (0<x) AND (x<=1)
  b) (a=0) OR (abs(x)<5)
  c) NOT (x=y)

  Операции отношений имеют более низкий приоритет, чем логические операции, поэтому их следует заключать в скобки при использовании с логическими операциями.

  Из переменных, констант, сравнений, логических операций и скобок можно строить логические выражения.

  Рассмотрим следующую задачу:
  Имеется прямоугольное отверстие со сторонами а и b и кирпич с ребрами х, у, z. Требуется определить пройдет ли кирпич в отверстие.


  Решение.
  Кирпич имеет три грани, каждую из которых мы можем повернуть на 90 градусов, т.е. для каждой грани надо проверит два случая. Итого шесть. Получаем условие:


  (a>x)and(b>y) or (b>x) and (a>y) or
  (a>x) and(z>y) or (z>x) and(a>y) or
  (b>x) and(z>y) or (z>x) and(b>y)

  Код программы:
  Program prim_8;
  Var a,b,x,y,z:integer;
      F:boolean;
  Begin
    Write('введите размеры отверстия');
    Readln(a,b);
    Write('введите размеры кирпича');
    Readln(x,y,z);
    If (a>x)and(b>y) or (b>x)and(a>y) or (a>x)and(z>y) or

       (z>x)and(a>y) or (b>x)and(z>y) or (z>x)and(b>y)
    then Writeln ('Кирпич пролезет в отверстие')
      Else Writeln ('Кирпич не пролезет в отверстие');
    Readln
  End


Тренировочные задания к 8 уроку.
1. Установить, истинны или ложны следующие условия:
   (A=0) and not (B=0) or not (a=0) and (B=0) при
  a) А=0, В=0
  b) А=0, В=1


2. Ввести три числа. Выбрать и напечатать наибольшее из них.

3. Написать программу, которая требует ввода времени дня и, в зависимости от введенного значения, желает доброго утра, доброго дня, доброго вечера или спокойной ночи.

4. Даны три числа. Найдите наибольшее значение их суммы и произведения.

5. Даны три числа а, b, с. удвойте эти числа, если они являются упорядоченными по возрастанию.

6. Проверьте, есть ли среди трех заданных чисел равные.

7. Дано двузначное число. Определить:
  a) какая из его цифр больше, первая или вторая;
  b) одинаковы ли его цифры.

8. Известны площади круга и квадрата. Определить:
  a) Уместится ли круг в квадрате;
  b) Уместится ли квадрат в круге.

9. Дано трехзначное число. Выяснить, является ли оно палиндромом ("перевертышем"), т.е. таким числом, десятичная запись которого читается одинаково слева направо и справа налево.

Разбор тренировочного задания урока 7.
8. *Дано целое число. Определить:
   a) Является ли оно четным;
   b) Оканчивается ли оно цифрой 7;
   c) Делится ли оно на 13.

  Program prim_6;
  Var a:integer;
  Begin
    Write('введите целое число');
    Readln(a);
    If a mod 2 = 0 then Writeln (а,' - четное ')
      Else Writeln (а,' -нечетное ');
    If а mod 10 = 7 then Writeln (а,'- оканчивается на 7 ')
      Else Writeln (а,' -не оканчивается на 7 ');
    If а mod 13 = 0 then Writeln (а,'- делится на 13 ')
      Else Writeln (а,' -не делится на 13');
    Readln
  End


Желаю успехов!
Ганилова Татьяна Евгеньевна school6@rikt.ru.


Реклама в рассылке:

RLE    

  


Подпишитесь на наши рассылки:

Новости проекта "Олимпиада.com.ru" [Алексей Шамис]
Новости проекта "Olimpiada.com.ru". Новые темы на форуме. Информация о пополнениях в архиве задач. Оперативно и своевременно!

Уроки программирования на Turbo Pascal [Татьяна Ганилова]
Хотите стать Великим Программистом? Начните свой путь к вершине славы с изучения языка Turbo Pascal. Он как нельзя лучше подходит для начинающих программистов и в то же время используется для разработки сложных "профессиональных" программ.

Олимпиадные задачи с решениями на Turbo Pascal [Алексей Шамис]
В рассылке публикуются решения интересных олимпиадных задач различного уровня. Содержит много теоретической информации. Периодичность - 2-3 раза в неделю.

Задача в неделю. Олимпиадные задачи по информатике [Александр Алексеев]
Каждый понедельник в рассылке публикуется задача, которую необходимо решить и в следующий понедельник прислать программу на тестирование. Решения проверяются, и в пятницу публикуется разбор и итоги тестирования.



Всегда рады видеть Вас на нашем сайте. Жду ваших предложений и замечаний, Алексей Шамис

Copyright © 2002 by Tatyana Ganilova.



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

В избранное