Практикум на ЭВМ: I курс

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску

2011/2012 учебный год

Тема 1. Ввод/вывод, переменные и типы данных, присваивание, условный оператор, оператор выбора

Занятие 1 (16 сентября) — Ввод/вывод, переменные и типы данных, присваивание

Запустите среду программирования PascalABC.NET (Пуск / Программирование и ППП / Программирование / PascalABC.NET).

Выполните в классе задания из разделов I-III. Задания раздела IV нужно выполнить дома.

Рекомендации к выполнению

а) Следует уделять внимание оформлению собственных решений (пустые строки, отступы, комментарии), ориентируясь на предоставленные образцы.

б) Переменные следует объявлять непосредственно перед их использованием (переменные для исходных данных в блоке ввода данных, вспомогательные переменные — в блоке вычислений).

в) Решения большинства заданий из этого пункта имеют следующую структуру:

  1. Ввод исходных данных
  2. Вычисление результата
  3. Вывод результата

Блоки решения можно выделять пустыми строками и сопровождать комментариями.

I. Простейший ввод/вывод, оператор присваивания, вычисление значения выражения

1. Рассмотрите пример, создайте файл с этой программой и запустите ее на выполнение:

  // Программа, печатающая приветствие - это комментарий к программе
  program Hello; 

  begin
    Writeln('Привет, мир');
  end.

2. Изучите пример, демонстрирующий использование вещественных переменных:

// Использование вещественных переменных

begin
  // Объявление переменной с одновременным присваиванием значения
  var a:real := 10.1;
  
  // Вывод значения переменной
  Writeln('a = ', a);

  // Присваивание переменной нового значения
  a := 5;
  
  // Увеличение значения переменной
  a += 0.6;
  
  // Вывод значения переменной
  Writeln('a = ', a);
end.

3. Рассмотрите примеры с вычислением периметра квадрата и периметра и длины гипотенузы прямоугольного треугольника:

// Вычисление периметра квадрата по заданной стороне

begin

  Writeln('Введите длину стороны квадрата:');

  // Объявление переменной для хранения длины стороны
  var a: real;
  
  // Ввод длины стороны
  Read(a);
  
  // Вычисление периметра
  var P: real := 4 * a;
  
  Writeln('Периметр P = ', P);
end.
// Вычисление гипотенузы и периметра прямоугольного треугольника по заданным катетам

begin

  Writeln('Введите длины катетов (два числа, разделенные пробелом):');

  // Объявление переменных для хранения катетов
  var a, b: real;
  
  Read(a, b);
  
  // Тип переменной c определяется автоматически, как результат вычислений
  // sqrt - функция вычисления квадратного корня
  var c := sqrt(a*a + b*b);
  
  Writeln('Гипотенуза c = ', c);
  
  // Вычисление периметра треугольника
  var P := a + b + c;
  
  Writeln('Периметр P = ', P);
end.

4. Вычислите синус и косинус угла, заданного в радианах.

5. Найдите наибольшее целое число, которое не превышает корня заданного числа.

6. Вычислите значение выражения по заданным a, b и c: <math>\frac{a+b}{a-b}+\sqrt{\frac{c}{2}}</math>.

7. Вычислите значение функции y = 4(x–3)6 – 7(x–3)3 + 2 для нескольких заданных x. Воспользуйтесь вспомогательной переменной для (x–3)3.

II. Операции с целыми числами

Используемые понятия: тип integer, операции div (вычисление частного от деления) и mod (вычисления остатка от деления), стандартный вид числа (напр. 123 = 1*100 + 2*10 + 3*1).

Основные задания

  1. Определить возраст человека в годах по возрасту, заданному в месяцах.
  2. Дано двузначное целое число. Вывести его правую и левую цифры.
  3. Дано трехзначное число. Вывести сумму и произведение его цифр.
  4. Даны две цифры. Пользуясь стандартным видом числа, сформируйте число, разрядами которого являются заданные цифры. Первая заданная цифра должна соответствовать второму разряду (разряды числа нумеруются справа налево).
  5. Дано двузначное число. Поменяйте в нем местами разряды десяток и единиц.
  6. Дано трехзначное число. Выполните в нем циклический сдвиг разрядов влево (разряд единиц становится разрядом десятков, разряд десятков — разрядом сотен, а разряд сотен — разрядом единиц).

Задания повышенной сложности

Используемые понятия: битовые операции.

К битовым относятся бинарные операции and, or, not, xor, shl, shr. Они производят побитовые манипуляции с операндами целого типа. Битовые операции and, or, not и xor осуществляются следующим образом: с каждым битом (0 принимается за False, 1 — за True) производится соответствующая логическая операция. Операции shl и shr выполняют сдвиг разрядов влево или вправо, при этом недостающие разряды дополняются нулями. Например:

   00010101 and 00011001 = 00010001
   00010101 or 00011001 = 00011101
   00010101 xor 00011001 = 00001100
   not 00010101 = 11101010
   00010101 shl 310 = 10101000
   00010101 shr 310 = 00000010

(по умолчанию операнды и результат представлены в двоичной форме).

В решениях удобно пользоваться функцией перевода целого положительного числа в строковое двоичное представление (в самой функции пока разбираться необязательно, ее можно скопировать в свою программу). Следует также помнить, что правила сложения и вычитания чисел «в столбик» работают вне зависимости от того, в какой системе счисления представлено (например, в двоичном представлении: 00001000 – 00000001 = 00000111).

Замечание: для упрощения работы и проверки результата используйте тип byte (8-битное беззнаковое целое: 0..255) вместо integer.

  1. Дано целое число. Вывести в двоичном и десятичном видах результат операции not над ним. (Для сравнения удобно вывести само число в двоичном виде предварительно.)
  2. Даны два целых числа. Вывести в двоичном и десятичном видах результаты операций and, or и xor над ними. Что если исходные числа равны?
  3. Сдвинуть число 1 влево на 1, 2, 3, 5 и 10 разрядов. Сформулировать (и записать в комментарии в программе) смысл этой операции.
  4. Сдвинуть число 10000 вправо на 1, 2, 3, 5 и 10 разрядов. Сформулировать смысл этой операции.
  5. Дано целое число. Обнулить его младший бит (крайний правый бит в двоичном представлении).
  6. Дано целое число. Обнулить его младший бит. Установить его младший бит.
  7. Даны два целых числа. Сформировать число, каждый бит которого является наименьшим из соответствующих битов исходных чисел.
  8. Сформировать число с установленными третьим, пятым и седьмым битами, считая слева.
  9. Установить третий, пятый и седьмой биты в заданном числе.
  10. Дано целое число. Обнулить его крайний справа единичный бит (например, 00100100 ↦ 00100000). На основе этого проверить, является ли число степенью двойки.
  11. Проверить, имеет ли заданное целое число вид 2n – 1.
  12. Заполнить крайнюю справа непрерывную последовательность нулевых битов заданного числа единицами (например: 00100100 ↦ 00100111).
  13. Обнулить крайнюю справа непрерывную последовательность единичных битов заданного числа (например: 1001100 ↦ 10000000). На основе этого проверить, является ли данное число (положительной) разностью степеней двойки.

III. Операции с символами

  1. Определить код заданного символа
  2. Вывести символ, следующий за данным

IV. Задания на дом

  1. Дана длина ребра куба a. Найти объем куба и площадь его поверхности.
  2. Вычислите значение логарифма числа 1024 по основанию 2, пользуясь функцией ln, вычисляющей натуральный логарифм заданного числа, и формулой: <math>\log_a b = \frac{\ln b}{\ln a}</math>.
  3. Известна скорость лодки и пройденный ею путь. Вычислите время движения лодки.
  4. Вычислите длину окружности и площадь круга заданного радиуса. Используйте константу (const Pi=3.14159265;) для числа π.
  5. Найти расстояние между двумя точками с заданными координатами <math>(x_1, y_1)</math> и <math>(x_2, y_2)</math> на плоскости. Расстояние вычисляется по формуле <math>d=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}</math>.
  6. Даны длины сторон треугольника. Вычислите его площадь, пользуясь формулой Герона <math>S=\sqrt{p(p-a)(p-b)(p-c)}</math>, где p — полупериметр.
  7. Дана температура в градусах Цельсия, вычислите соответствующую ей температуру в градусах Фаренгейта. Шкалы Цельсия и Фаренгейта связаны соотношением <math>t^{\circ}C = \frac{5}{9}(t^{\circ}F-32)</math>.
  8. Даны радиусы двух концентрических окружностей. Вычислите площадь кольца, заключенного между ними.
  9. Известны периметр прямоугольника и длина его диагонали. Найти стороны прямоугольника.
  10. Поменять местами значение переменных. То же, не используя вспомогательную переменную.
  11. Вывести символ, предшествующий данному
  12. Определить, сколько месяцев осталось до дня рождения человека, если известен его возраст в месяцах.
  13. Определить последнюю цифру заданного целого числа.
  14. Даны три цифры, построить соответствующее трехзначное число.
  15. Дано трехзначное число. Выполнить циклический сдвиг его разрядов вправо.
  16. Дано трехзначное число. Поменять в нем местами разряды десятков и единиц.
  17. Дано трехзначное число. Обнулить в нем разряд десятков.
  18. Дано трехзначное число. Сформировать новое число, каждый разряд которого больше на единицу. Если разряд данного числа равен 9, то он должен стать равным 0.

Занятие 2 (17 сентября) — Сравнения и логические операции

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

Используемые понятия: логические операции not, and, or.

I. Основные задания

  1. Даны два целых числа. Вывести значение True, если первое число больше второго, и False в противном случае.
  2. Даны два целых числа. Вывести значение True, если первое число не равно второму, и False в противном случае.
  3. Даны три целых числа: A, B, C. Вывести значение True, если справедливо двойное неравенство A < B < C, и False в противном случае.
  4. Даны три целых числа. Вывести значение True, если они все равны, и False в противном случае.
  5. Даны два целых числа. Вывести значение True, если хотя бы одно из этих чисел является нечетным (нужно использовать функцию odd), и False в противном случае.
  6. Даны три вещественных числа. Вывести значение True, если все эти числа являются положительными, и False в противном случае.
  7. Даны три вещественных числа. Вывести значение True, если хотя бы одно из этих чисел является положительным, и False в противном случае.
  8. Даны числа x, y. Вывести значение True, если точка с координатами (x, y) лежит в четвертой координатной четверти, и False в противном случае.
  9. Даны числа x, y. Вывести значение True, если точка с координатами (x, y) лежит выше оси абсцисс, и False в противном случае.
  10. Даны целые числа a, b, c, являющиеся сторонами некоторого треугольника. Вывести значение True, если треугольник со сторонами a, b, c является равнобедренным, и False в противном случае.

II. Задания повышенной сложности

  1. Даны два целых числа: A, B. Вывести значение True, если числа A и B имеют одинаковую четность, и False в противном случае.
  2. Даны три целых числа: A, B, C. Вывести значение True, если число C находится между числами A и B, и False в противном случае. Указание: Следует рассмотреть два случая: A < B и A > B.
  3. Дано трехзначное число. Вывести значение True, если цифры данного числа образуют возрастающую последовательность, и False в противном случае.
  4. Даны числа A, B, C (число A не равно 0). Рассмотрев дискриминант D = B2 − 4·A·C, вывести значение True, если квадратное уравнение A·x2 + B·x + C = 0 имеет вещественные корни, и False в противном случае.
  5. Даны целые числа a, b, c, являющиеся сторонами некоторого треугольника. Вывести значение True, если треугольник со сторонами a, b, c является прямоугольным, и False в противном случае.
  6. Даны целые числа a, b, c. Вывести значение True, если существует треугольник со сторонами a, b, c, и False в противном случае.
  7. Даны координаты поля шахматной доски x, y (целые числа, лежащие в диапазоне 1–8). Учитывая, что левое нижнее поле доски (1, 1) является черным, вывести значение True, если данное поле является белым, и False в противном случае.
  8. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Вывести значение True, если ладья за один ход может перейти с одного поля на другое, и False в противном случае.
  9. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Вывести значение True, если конь за один ход может перейти с одного поля на другое, и False в противном случае.

III. Задания на дом

  1. Даны два целых числа. Вывести значение True, если первое число не меньше, чем второе, и False в противном случае.
  2. Даны два целых числа. Вывести значение True, если первое совпадает со вторым, и False в противном случае.
  3. Даны два целых числа. Вывести значение True, если ровно одно из этих чисел является четным (функция odd и операция not), и False в противном случае.
  4. Дано трёхзначное число. Вывести значение True, если все цифры данного числа различны, и False в противном случае.
  5. Даны числа x, y. Вывести значение True, если точка с координатами (x, y) лежит во второй или третьей координатной четверти, и False в противном случае.
  6. Даны целые числа a, b, c, являющиеся сторонами некоторого треугольника. Вывести значение True, если треугольник со сторонами a, b, c является равносторонним, и False в противном случае.