понеділок, 18 березня 2013 р.

Как всё-таки решаются задачи с циклами

На позапрошлом занятии были даны 5 заданий на циклы for. К сожалению, даже второе вызвало у многих затруднения. Давайте ещё раз разберём их.

Для начала напомню общую структуру программы в Pascal

program Project1;//имя программы. Не играет роли

{$AppType CONSOLE} //Эту строку вставляет сама Делфи, показывает, что будет паскалевское приложение

uses SysUtils;//Используемые модули. Если работаем черед Делфи, ничего не меняйте

var //здесь объявляются переменные. Если в программе нет ни одной переменной, он не нужен

begin
 //Здесь будет текст собственно программы
  Readln; //Эта команда нужна, чтобы окно после завершения работы не закрывалось автоматически, а можно было увидеть результат.
end.


Напомню также структуру оператора цикла

for {переменная} := {начальное значение переменной} to {конечное значение переменной} do
   begin
     {действия, которые нужно выполнить}
   end;

Задание 1.
Написать программу, которая выведет на экран все числа от 1 до 100


Здесь всё просто (в этом и последующий примерах я буду приводить только блок var и всё, что находится между begin и end)


var i:integer;//забили в памяти ячейку для целого числа - счётчика цикла

begin
 for i := 1 to 100 do //Выполняем действие 100 раз
   begin
     Writeln(i); //А действие это - напечатать число
   end;

  Readln;

end.



Задание 2.
Написать программу, которая выведет на экран квадраты чисел от 1 до 100

Чем это задание отличается от предыдущего? Только действием. Значит и в программе надо поменять только действие:

var i:integer;//забили в памяти ячейку для целого числа - счётчика цикла

begin
 for i := 1 to 100 do
   begin
     Writeln(i*i); //Теперь будет печататься квадрат числа
   end;

  Readln;

end.

Задание 3.
Написать программу, которая выведет на экран квадраты только нечётных чисел от 1 до 100

Чем эта программа отличается от предыдущей? Тем, что перед тем, как выполнить действие, выполнится проверка на чётность. Можно исопльзовать функцию odd() а можно - деление с остатком, mod.

var i:integer;

begin
 for i := 1 to 100 do
   begin
     if odd(i) then
        Writeln(i*i); //Теперь будут печататься только нечётные квадраты
   end;

  Readln;

end.



Задание 4.
Написать программу, которая попросит у человека ввести число, а затем найдёт сумму всех чисел от 1 до введённого числа

Вот здесь было больше всего непоняток. Чем эта программа отличается от самой первой? Тем, что верхняя граница заранее не известна, а её будет водить человек.

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

var i:integer;
n:integer;//вот это вторая переменная

begin
 WriteLn('Vvedite Chislo'); //Сначала объясняем человеку, что мы от него хотим
 ReadLn(n);//получаем это число от человека


 for i := 1 to n do //Выполняем действие n раз
   begin
     Writeln(i); //А действие это - напечатать число
   end;

  Readln;

end.






Задание 5.
Написать программу, которая выведет следующие 100 строк:
1 год
2 года
3 года
4 года
5 лет
6 лет
и т.д.

Давайте для начала сделаем английский аналог. 
1 year
2 years
3 years 
и т.д.

Вспомним задачу 3. Если число будет равно 1, нужнописать year, а если больше - years.

begin
 for i := 1 to 100 do
   begin
     if i=1 then
        Writeln(i, ' year')
     else       
        Writeln(i, ' years');
   end;

  Readln;

end.

А для русского языка сформулируйте условия самостоятельно и напишите аналогичную программу. 

Подскажу, как определить, заканчивается ли число на единицу. Последняя цифра числа - это его остаток от деления на 10. Поэтому русская фраза "Если число i оканчивается на единицу, то..." в Паскале будет выглядеть как:
if (i mod 10) = 1 then

Немає коментарів:

Дописати коментар