Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Упражнения по программированию (3)




1. Напишите программу на Delphi, которая запрашивает и выводит информацию как показано ниже. Заметьте также, что программа понижает отметку на один балл, т. е. выводит следующую по алфавиту букву относительно введенной пользователем (в американских школах принято буквенное обозначение оценок, А — наивысший балл.).

What is your first name? Betty Sue

What is your last паше? Yew

What letter grade do you deserve? В

What is your age? 22

Name: Yew, Betty Sue

Grade: С

Age: 22

2. Запись TCandyBar включает три элемента. Первый элемент содержит имя производителя конфеты-батончика. Второй — вес (определенный с помощью вещественного числа) конфеты-батончика, а третий — количество калорий (целочисленное значение). Напишите программу, которая объявляет такую запись и создает переменную типа TCandyBar с именем snack, присваивая элементам этой структуры значения " Mocha Munch ", 2.3 и 350 соответственно. Присваивание (инициализация) должно быть частью объявления snack. В результате программа должна вывести содержимое переменной snack.

3. Запись TCandyBar содержит три элемента, как описано в упражнении по программированию 2. Напишите программу, которая создает массив из трех записей TCandyBar, присваивает им значения на ваш выбор и затем выводит содержимое каждой записи.

4. Уильям Вингейт предлагает услуги по учету пиццы. Для каждой пиццы он записывает такую информацию:

· Имя компании-производителя пиццы, которое может содержать более одного слова

· Диаметр пиццы

· Вес пиццы

Придумайте запись, которая может хранить такую информацию, и напишите программу, в которой используется переменная специального типа для такой записи. Программа должна предлагать пользователю ввести данные для каждого из названных пунктов и затем выводить эту информацию.

5. Напишите программу к упражнению 2, но используйте оператор new для выделения записи области памяти вместо объявления структурной переменной. Программа должна также запрашивать диаметр пиццы до запроса названия компании — производителя пиццы.

6. Выполните упражнение 3, но вместо объявления массива трех структур типа TCandyBar используйте оператор new для динамического выделения памяти массиву.


Циклы и выражения сравнения

Обзор возможностей цикла FOR

В программе нередко требуется выполнять неоднократно повторяющиеся действия, такие как, например, поочередное сложение элементов массива или двадцатикратную распечатку какого-нибудь хвалебного отзыва. Цикл for упрощает эту задачу. Обратимся к тексту листинга 4.1, а затем обсудим, каким образом он работает.

Программа 4_1

// Краткий обзор возможностей цикла for

program Project1;

{$APPTYPE CONSOLE}

Uses

SysUtils;

Var

i: Integer;

Begin

for i:=1 to 5 do

Writeln('Delphi knows loops.');

Writeln('Delphi knows when to stop.');

Readln;

end.

Результат:

Delphi knows loops.

Delphi knows loops.

Delphi knows loops.

Delphi knows loops.

Delphi knows loops.

Delphi knows when to stop.

Оператор for обеспечивает циклическое повторение некоторого оператора (в частности, составного оператора) заданное число раз. Повторяемый оператор называется телом цикла. Повторение цикла определяется некоторой управляющей переменной (счетчиком), которая увеличивается или уменьшается на единицу при каждом выполнении тела цикла. Повторение завершается, когда управляющая переменная достигает заданного значения.

Оператор for записывается в одной из следующих форм:

for <счетчик> := <начальное значение> to <конечное значение> do

<оператор>;

или

for <счетчик>:=<начальное значение> downto <конечное значение> do

<оператор>;

<счетчик> — локальная управляющая переменная порядкового типа. В начале выполнения оператора for ей присваивается <начальное зназначение> После каждого очередного выполнения тела цикла
<оператор> ее значение увеличивается (в первой форме с to) или уменьшается (во второй форме с downto) на единицу. Когда значение управляющей переменной достигает значения <конечное значение>, тело цикла выполняется последний раз, после чего управление передается оператору, следующему за структурой for.
<начальное значение> и <конечное значение> являются выражениями, совместимыми по типу с управляющей переменной.

Если заданные начальное и конечное значения равны друг другу, тело цикла выполняется только один раз. Если в форме с to начальное значение больше конечного или в форме с downto начальное значение меньше конечного, то тело цикла не выполняется ни разу.

Программа 4_2

program Project1;

{$APPTYPE CONSOLE}

Uses

SysUtils;

Var

i, limit: Integer;

Begin

Write('Enter the starting countdown value: ');

Readln(limit);

for i:=limit downto 1 do

Writeln('i = ', i);

Writeln('Done now that i = ', i);

Readln;

end.

Результат:

Enter the starting countdown value: 4

i = 4

i = 3

i = 2

i = 1

Done now that i = 0

Хотелось бы еще раз обратить внимание читателя на полезность применения циклов. В листинге 4_3 цикл используется для подсчета и сохранения значений факториалов первых 16 чисел. Факториалы вычисляются следующим образом. Нулевой факториал записывается как 0! и, по определению, равен 1. Затем 1! равен 1*1! или 1. Далее 2! равен 2*1! или 2. Затем 3! равен 3*2! или 6 и т.д. Таким образом, факториал каждого целого числа является произведением этого целого числа на факториал предыдущего целого числа. В рассматриваемой программе для подсчета факториалов последовательности чисел и сохранения их в массиве используется один цикл. Затем в ней используется второй цикл для отображения результатов подсчета. Кроме того, в этой программе представлено использование внешних объявлений значений переменных.

Программа 4_3

program Project1;

{$APPTYPE CONSOLE}

Uses

SysUtils;

Const

ArSize = 15;

Var

factorials: array[0..ArSize] of Real;

i: Integer;

Begin

factorials[0]:= 1.0;

factorials[1]:= 1.0;

for i:= 2 to ArSize do

factorials[i]:= i * factorials[i - 1];

for i:= 0 to ArSize do

Writeln(i, '! = ', factorials[i]:0:0);

 

Readln;

end.

Результат:

0! = 1

1! = 1

2! = 2

3! = 6

4! = 24

5! = 120

6! = 720

7! = 5040

8! = 40320

9! = 362880

10! = 3628800

11! = 39916800

12! = 479001600

13! = 6227020800

14! = 87178291200

15! = 1307674368000

Как можно заметить, значения факториалов быстро увеличиваются!

Примечания к программе

Приведенная выше программа создает массив для хранения значений факториалов. При этом нулевой элемент массива равен 0!, первый элемент массива — 1! и т.д. Вследствие того, что первые два факториала равны 1, данная программа для первых двух элементов массива factorials устанавливает значение 1,0 (не следует забывать о том, что индекс первого элемента массива равен 0). После этого используется цикл для задания произведения индекса массива на предыдущий факториал в качестве значения каждого факториала. В этом цикле демонстрируется возможность использования счетчика цикла как обычной переменной в теле цикла.

В программе показано также, каким образом цикл for действует в тесной связи с массивами, обеспечивая при этом удобные средства поочередного доступа к каждому элементу массива. Кроме того, в ней для создания символического представления размера массива применяется переменная типа const - ArSize. Она используется во всех операциях, в которых задействован размер массива, в частности, при определении массива и ограничений для циклов, которые обрабатывают массив. Следовательно, для того, чтобы расширить возможности данной программы, скажем, до вычисления 20 факториалов, достаточно задать для переменной ArSize значение 20 и повторно скомпилировать код. Таким образом, применение символической константы позволяет избежать изменения констант от 16 до 20 в каждом отдельном случае.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...