Чайник
Содержание материала
Чайниками принято называть тех, кто не обладает знаниями в какой либо области и для них понятным и доступным языком объясняются, может быть, даже сложные понятия. Главное - это желание разобраться и терпение, чтобы не бросить. Ну что же, встаем на увлекательную дорогу программирования, а я постараюсь, чтобы на ней было интересно и понятно. В путь!
Модуль1. Простые задачи на линейный алгоритм
Задача: Z1.0 Ввести с клавиатуры скорость катера v и скорость течения vt. Какой путь S пройдет катер по течению за t=2 часа?
Program Z;
Const t=2; { объявляется константа t=2}
var v,vt,vp,s: integer;
begin
Write ('Введи v катера и v течения ');
Readln (v, vt);
vp:=v+vt; {находим скорость по течению}
s:=t*vp; {находим расстояние по течению}
Writeln ('Расстояние по теч.=',s); {печать результата}
end.
Измени программу, чтобы время в пути – переменная, а катер плыл против течения.
Предложение от Андрея Вожегова: Известно расстояние, скорость катера и скорость течения. Найти время в пути в часах и минутах
1. Разминка
Z1.1 В магазине предлагают конфеты по N рублей за килограмм. Сколько кг и гр можно купить на M рублей? Оформить программу, M, N ввести с клавиатуры.
Z1.2. Пожарных учат надевать штаны за 23 секунды. Ввести с клавиатуры время в минутах. Напечатать, сколько штанов успеет надеть хорошо обученный пожарный за это время (целое число: штаны - штучная вещь!).
Z1.3 Написать программу, которая меняет местами значения двух переменных a и b, введенных с клавиатуры. Комментарий: чтобы решить эту задачу, используем следующий алгоритм:
1) объявим в программе третью переменную Х;
2) запомним в новой переменной Х значение А;
3) скопируем в А значение из В;
4) скопируем в В число из Х (исходное значение А).
Решение - найди ошибку и исправь
Program Change;
Var a,b,x: integer;
begin
Write ('Введи А и В ');
Readln (a, b);
x:=a;
a:=b;
b:=a;
Writeln('a=', a, ' b=', b);
end.
Z1.4 Что делает эта программа? Оформите программу понятным вводом и выводом.
Program pr;
var
a, b, c, d: longint;
begin
readln(a);
b := a; c := a; d := a;
b := a div 3600;
c := (a mod 3600) div 60;
d := a mod 60;
writeln('',b, ':',c,':',d);
end.
Z1.5 За день машина проезжает n километров. Сколько дней нужно, чтобы проехать маршрут длиной m километров?
2. Функции Pascal
Прочитать стр. 6-9 учебника. Обратить внимание на функцию квадратного корня.
Z1.6 Ввести с клавиатуры длины катетов треугольника. Найти гипотенузу по теореме Пифагора.
3. Случайные числа.
Иногда при решении задач удобно не задавать значения переменным с клавиатуры, а вводить их случайным образом: пусть число выбирает сам компьютер. Для этого следует:
1) включить генератор случайных чисел "Randomize". Он записывается в программе сразу после "begin";
2) выбрать значение для переменной с помощью функции "Random"
а) для дробных чисел из интервала [ X0; X1 ): X:=Random * (X1-X0) + X0;
б) для целых чисел из интервала [ X0; X1 ]: X:=Random(X1-X0) + X0.
3) напечатать полученное число, чтобы знать, что выбрал компьютер: Writeln ('X=', X);
ЗАДАЧА. Когда дядя Петя вышел во двор с ружьем, с 1-ой яблони упало f, а со 2-ой - g соседей. Ввести случайным образом значения для f и g, найти общее количество упавших соседей.
Решение.
Program D;
const x0=1; {х0 и х1 – границы интервала случайных чисел }
x1=10;
Var f, g, v: integer;
begin
Randomize;
f:=Random(x1-x0)+x0; {стандартные формулы для случайного числа}
g:=Random(x1-x0)+x0;
Writeln ('на 1 яблоне ',f,' соседей');
Writeln ('на 2 яблоне ',g,' соседей');
v := f+g;
Writeln ('всего ', v ,' соседей');
end.
Z1.7 Петя получил по математике оценку m, а Вася n. Напечатать полученные оценки.Интересно, а пятерки они когда-нибудь получают?
Z1.8 Общая тетрадь стоит m р., а блокнот на n р. меньше. Сколько стоят общая тетрадь и блокнот вместе? m и n задать случайным образом.
4. Данные символьного типа
До этого мы работали только с числовыми переменными. Данные типа CHAR(1 символ) и STRING(256 символов) позволяют представлять в программах тексты и производить над ними некоторые операции, например, вставлять и удалять отдельные буквы и слова и т.д.
Тип STRING
Program Name;
Var c : string;
Begin
WriteLn( 'Как тебя зовут' );
ReadLn( c );
WriteLn( 'Давай дружить,', c,'!' );
end.
Z1.9 Программа спрашивает имя и год рождения. Обращаясь по имени, выводит количество лет.
Z1.10 Программа спрашивает: Как вас зовут? Как зовут вашего друга? Выводит Имя1+Имя2=ДРУЖБА
Тип CHAR
Все символы, которые могут быть значением переменных типа сhar, собраны в таблицу ASCII (как буквы в алфавит). Каждому символу соответствует уникальный код - число от 0 до 255
Символы имеют коды от 0 до 255.
ORD(w) - возвращает код символа w.
CHR(i) - определяет символ с кодом i.
ЗАДАЧА. Ввести с клавиатуры символ . Напечатать его код
Решение.
Program simvol;
Var x:char;
begin
Write ('введи символ ');
Readln (x);
Writeln ('символ - ',x,' код-',ord(x))
end.
Проведи эксперименты с программой и узнай коды чисел, русских букв.
Модуль 2. Алгоритмы с проверкой условия (ветвление)
Что делает эта программа?
program m;
var a, b, m: integer;
begin
writeln('Введите два целых числа');
read ( a, b );
if a > b then begin
m:=a;
end
else begin
m:=b;
end;
writeln ( m);
end.
Прочитать стр. 14-17 Задачи:
Z2.1 Определить является ли введенное с клавиатуры число четным (вспомнить функцию mod).
Z2.2 Одна тетенька произносит К слов в минуту, а другая - С слов. Кто и на сколько больше скажет слов за 3 часа, если они разговаривают одновременно и непрерывно, не слушая друг друга?
Z2.3 Найти наибольшее из трех введенных с клавиатуры чисел
В программе использовать только два IF и дополнительную переменную max
(Алгоритм: сравниваются два первых числа, после определения максимального из них, запоминаем максимальное в дополнительной переменной max, сравнивается max и третье число и определяется максимальное значение. Значение максимального и есть искомый максимум). Посмотрите решение
Z2.4 Программа-шутка. Написать программу, в результате выполнения которой происходит такой диалог:
Не волнуйтесь, Ваше имя?
Хорошо, Имя! Можно, ли делить на ноль?
Если ответ ДА, то сообщение - Имя, Вам необходимо повторить математику!
Если ответ НЕТ, то сообщение - Имя, молодец!
Z2.5 Задать 3 числа. Найти среди них такое, которое меньше наибольшего, но больше наименьшего
Сложные условия.
Во многих задачах при решении требуется проверка выполнения сразу нескольких условий. При проверке их записывают в скобках и связывают союзами Not, And и Or.Например: (a < b) and (b < c); (a < c) or (b < c) and (b < a);Порядок выполнения : выражения в скобках - Not - and - or.
Задача. Ввести с клавиатуры 2 натуральных числа: d - день и m - месяц. определить, нет ли ошибки при вводе.
Решение.
Program Data;
Const dd=30; {максимальное количество дней}
mm=12; {максимальное количество месяцев}
Var d, m: integer;
begin
Write ('Введи день, месяц ');
Readln (d, m);
if(d<=dd) and (m<=mm) then {должны быть выполнены оба условия}
Writeln ('Дата введена верно ')
else Writeln ('Дата введена неверно ');
end.
Z2.6 Ввести возраст человека (от 1 до 100 лет) и вывести его вместе с последующим словом «год», «года» или «лет».
Z2.7 Ввести с клавиатуры 3 натуральных числа: часы, минуты и секунды Определить, нет ли ошибки
Модуль 3. Повторение действий (циклы)
Как организовать повторение действий?
Проведи эксперимент с программой
задача: Вывести на экран квадраты натуральных чисел от 10 до 20.
PROGRAM N1;
VAR i: integer; {счетчик цикла}
a: integer;
BEGIN
FOR i:=10 TO 20 DO
BEGIN
a:=i*i;
writeln('квадрат числа',i,'=',a);
END;
END.
подробнее прочитать стр.21-22
Z3.1 Напечатать таблицу перевода дюймы в сантиметры в виде:
1 дюйм = 2.54 см
2 дюйм = 5.08 см и т.д. до 10
Z3.2 Спортсмен в 1 день пробежал 10 км., в каждый следующий пробегал на 10% больше. Напечатать таблицу пробега за 5 дней.
Для решения следующих задач прочитать стр.23 - базовые циклические алгоритмы:
- определения суммы чисел
- определения количества чисел, удовлетворяющих заданному условию
Z3.3 Друг должен вам 2000 руб. и предложил отдавать частями, а именно:
1 день - 2руб.
2 день - 4руб.
3 день - 8 руб и так 10 дней.
Программа должна выдавать сообщение да, согласен или нет
Z3.4 Сгенерировать случайным образом оценки по математике за неделю и
определить количество 3, 4 и 5
Часто в задачах есть повторение действий, но неизвестно сколько раз действия
будут повторяться. Для этого на помощь нам придет Цикл с предусловием WHILE
Задача 1. Найти количество чисел, сумма которых превысит 100.
PROGRAM N;
var k:integer;
s:integer;
begin
s:=0; k:=0;
while s<=100 do
begin
k:=k+1;
s:=s+k
end;
writeln(‘количество слагаемых=’,k);
end.
подробнее можно прочитать на стр.27-28
Z3.5 Ввести целое число и найти сумму его цифр.
Пример:
Введите целое число:
1234
Сумма цифр числа 1234 равна 10.
Мы решали задачу с определением цифр известного числа - двухзначного, трехзначного и т.д. Задача усложнилась - число цифр в задаче неизвестно
Есть еще один оператор цикла с постусловием Repeat
прочитать можно на 31-34стр.
Z3.6 Натуральное число р называется простым, если оно делится только на 1 и на себя. По соглашению 1 не считают простым числом. Начало последовательности простых чисел имеет вид : 2,3,5,7,11,13, 17, ....
Сколько простых чисел сумеешь найти? А сколько их найдено?
Про простые числа можно прочитать здесь Википедия или Традиция
Определить количесво простых чисел, из введеных с клавиатуры https://pas1.ru/prime-numbers
Модуль 4. Массивы
Массив - очень удобный инструмент в программировании.
Одномерный массив - это фиксированное количество элементов одного типа, объединенных одним именем. Каждый элемент имеет свой номер- индекс. Обращение к элементам массива осуществляется с помощью указания имени массива и номера элементов.
Пусть для решения требуется массив из 30 целых чисел. Тогда объявить массив можно следующим образом:
Var mas: array [1..30] of integer;
mas - имя массива, [1..30] - количество элементов
В следующем примере задается случайным образом из интервала -5;+5 массив из 10 чисел, элементы массива выводятся на экран, определяется сумма элементов массива
Program mass;
Var a: array [1..10] of integer;
i,s: integer;
Begin
RANDOMIZE;
For i:=1 to 10 do begin
a[i]:=Random(10)-5;
WriteLn(i,'элемент массива= ',a[i] );
end;
s:=0;
for i:=1 to 10 do
s:=s+a[i];
writeln ('Сумма= ',s);
end.
прочитать стр.39-42
Z4.1
Объявить массив из 30 элементов – температура за июль 2013 года
Задать с помощью генератора случайных чисел температуру в диапазоне +15;+30
Осуществить вывод на экран значений температуры в виде:
День июля температура
1 20 и т.д. до 30
Найти
1. среднюю температуру июля. Ответ оформить в виде: Средняя температура июля 2013 года - …
2. Определить количество дней, когда температура была больше 25
3. найти день, когда температура максимальная
4. Найти дни, когда температура меньше 18. Ответ вывести в виде: Дни в июле, когда температура меньше 18 …..
Все сделать в одной программе, массив задавать один раз!