Как составить программу нахождения в информатике

текст программы:
var a:string;
begin
writeln(‘Введите Ваше имя’);
readln(a);
writeln(‘Здравствуйте, ‘,a);
end.

Напишите программу, запрашивающую Ваше имя, Ваш возраст и рост в см (ввод с клавиатуры) и выводящую на экран следующее сообщение:
Здравствуйте, …
Вам … лет
Ваш рост … см

текст программы

var a:string;
    v,r:integer;
begin
writeln(‘Введите Ваше имя’);
readln(a);
writeln(‘Сколько Вам лет’);
readln(v);
writeln(‘Введите Ваш рост в см’);
readln(r);
writeln(‘Здравствуйте, ‘,a);
writeln(‘Вам ‘,v,’ лет’);
writeln(‘Ваш рост ‘,r,’ см’);
end.

Вычисление математических выражений

Задача (урок )
Напишите программу для вычисления значение выражения y=5x+20 где x целое число, вводимое с клавиатуры. Вывод оформите следующим образом:
при x=…  y=…

Обратите внимание, что если x – цело число, то вычисляемый y тоже будет целым числом.
Математические выражения на Pascal расписываются со всеми математическими операциями и учитывая порядок действий: y:=5*x+20

текст программы:
var x,y:integer;
begin
writeln(‘введите целое число’);
readln(x);
y:=5*x+20;
writeln (‘при x=’,x,’ y =’,y);
end.

Задача (урок )

Программа демонстрирующая работу функций div и mod.

текст программы:
var a,b:integer;
begin
writeln(‘введите целое число a’);
readln(a);
writeln(‘введите целое число b’);
readln(b);
writeln (‘a mod b = ‘,a mod b);
writeln (‘a div b = ‘,a div b);
end.

Условный оператор if … then … else (если … тогда … иначе)

Задача  (урок )
Напишите программу для вычисления значение выражения  






где x целое число, вводимое с клавиатуры.
Пояснение.
В данной задаче используется условный оператор if для того, чтобы исключить деление на 0. Пример алгоритма с ветвлением (или разветвляющийся алгоритм).

блок-схема
текст программы:
var x:integer;
    y:real;
begin
writeln(‘введите целое число’);
readln(x);
if (x-3)<>0 then
begin
  y:=(x+5)/(x-3);
  writeln (‘при x=’,x,’ y =’,y);
end
else
writeln(‘значение выражения не определено’);
end.

Задача (урок )

Вычислите значение выражения 

x целое число, вводимое с клавиатуры.

Обратите внимание, что в данной задаче у нас идет ограничение на переменную x: под корнем выражение (5x-20) должно быть больше или равно 0 и (x-4) не равно 0. Задачу решаем с использование сложного условия.
Вариант 1 с “и”: (5*x-20>=0) and (x-4<>0)
Вариант 2 с “или”: (5*x-20<0) or (x-4=0)

блок-схема вариант 1

Задача (урок )

Составить программу, которая если вводимое с клавиатуры целое число четное выводить на экран сообщение “это четное число”,  в противном случае – “это нечетное число”.

текст программы:
var x:integer;
begin
writeln(‘Ведите целое число’);
readln(x);
if x mod 2=0 then writeln(‘это четное число‘)
else writeln(‘это нечетное число‘);
end.

Задача (урок 
)

Составить программу, которая если вводимое с клавиатуры целое число больше 0 выводить на экран сообщение “это число положительное”, если число равно 0 – “это ноль”, если число меньше 0 – “это число отрицательное”.
var x:integer;
begin
writeln(‘Ведите целое число’);
readln(x);
if x>0 then writeln(‘это число положительное‘);
if x=0 then writeln(‘это ноль‘);
if x<0 then writeln(‘это число отрицательное‘);
end;

Задача (урок )
Составить программу-тест по арифметике, состоящую из 5 примеров. Программа должна работать следующим образом: на экран выводится пример (вопрос) и пользователь вводит ответ с клавиатуры. За 5 правильных ответов ставиться оценка “5”, за 4 – “4”, за 3 – “3”, за 2, 1, 0 правильных ответов оценка “2”.
Пояснение. 
При написании программы по данной задаче нам потребуется 5 переменных числового типа (лучше использовать тип real, но если оговорить, что ответами на примеры должны быть целые числа, ведь примеры подбирает сам учащийся, то используем тип integer). Назовем наши переменные для хранения ответов ot1, ot2, ot3, ot4, ot5, для оценки – oz. 
Подсчет и выставление оценки: через оператор if за каждый правильный ответ будем прибавлять 1 бал, а чтобы баллы накапливались используем формулу oz:=oz+1. Таким образом, в переменной oz будет храниться правильное количество ответов, но оценки 0 и 1 нет по условию задачи, следовательно нужно через if поставить “2” если oz<=2.

текст программы
var ot1,ot2,ot3,ot4,ot5:real;
    oz:integer;
begin
writeln(‘Вычислите’);

writeln(’12-4=?’);
readln(ot1);
if ot1=8 then oz:=oz+1;

writeln(‘3*15=?’);
readln(ot2);
if ot2=45 then oz:=oz+1;

writeln(‘8+13=?’);
readln(ot3);
if ot3=21 then oz:=oz+1;

writeln(‘7/2=?’);
readln(ot4);
if ot4=3.5 then oz:=oz+1;

writeln(‘9*7=?’);
readln(ot5);
if ot5=63 then oz:=oz+1;

if oz<=2 then oz:=2;
writeln(‘Ваша оценка ‘,oz); 
end.

Задача (урок )

Напишите программу для нахождения корней квадратного уравнения
текст программы
var a,b,c,D:integer;
    x1,x2:real;
begin
writeln(‘Решение квадратного уравнения a*x*x+b*x+c=0’);
writeln(‘введите a’);
readln(a);
writeln(‘введите b’);
readln(b);
writeln(‘введите c’);
readln(c);  
D:=b*b-4*a*c;
if D>=0 then
begin
x1:=(-b+sqrt(D))/2*a;
x2:=(-b-sqrt(D))/2*a;
writeln(‘x1=’,x1,’ x2=’,x2);
end
else writeln(‘нет корней’);
end.

Задача (урок )
Напишите программу нахождения наибольшего числа из трех случайных чисел от 1 до 10.
Для нахождения наибольшего числа из трех, нужно сначала сравнить два числа и выбрать наибольшее из них через оператор if, затем сравнить полученное наибольшее с третьим числом, если третье число больше, то переприсваиваем.

текст программы
var a,b,c,max:integer;
begin
a:=random(20)+1;
writeln(a);
b:=random(20)+1;
writeln(b);
c:=random(20)+1;
writeln(c);
readln(c);
if a>b then max:=a else max:=b;
if max<c then max:=c;
writeln (‘наибольшее из трех чисел ‘,max);
end.

Задача (урок )
Напишите программу которая “умеет” определять четное число вводиться с клавиатуры или нечетное.
Пояснение: четные числа делятся на 2 с остатком 0, поэтому нужно использовать в качестве условия функцию mod (x mod 2=0).
var m:integer ;
begin
writeln(‘введите число’);
readln(m);
if m mod 2=0 then writeln(‘число четное’)
else writeln(‘число нечетное’);
end.

Работа со строковыми функциями copy и length 
Задача (урок )
Напишите программу, которая у любого введенного с клавиатуры слова, длинной не более 15 символов вырезает подстроку с 5-го символа длинной в 5 символов.
текст программы
var sl:string[15];
begin
writeln(‘Ведите слово длинной не более 15 символов’);
readln(sl);
writeln(‘Результат – ‘,copy(sl,5,5));
end.

Задача 10 (урок 09.03.21)

Напишите программу, которая у любого введенного с клавиатуры слова меняет местами 1-ю и последнюю буквы.
Пояснение.
Пусть исходная строка храниться под именем s, тогда последний символ нового слова он же первый символ исходного подстрока – copy(s,1,1).
Как узнать номер последнего символа исходного слова? У нас есть функция вычисляющая длину строки length, количество символов в слове и номер последнего символа это одно и то же число. Получаем первый символ нового слова – copy(s,length(s),1).
Осталось найти середину: нам нужно вырезать со второго символа строчку длинной на 2 символа меньше, чем длинна исходного слова (первый и последний символу уже использованы) – copy(s,2,length(s)-2)

Чтобы было проще записывать выражение, присвоим значение функции переменной n:=length(s)

текст программы
var s:string;
    n:integer;
begin
writeln(‘Ведите слово’);
readln(s);
n:=length(s);
writeln(‘Результат -‘, copy(s,n,1)+copy(s,2,n-2)+copy(s,1,1));
end.



Задача (урок )
Напишите программу, которая получает с клавиатуры слово и если количество букв в слове четное выводит половинку слова (например: дорога – дор), если количество букв в слове нечетное, тогда часть слова до центральной буквы и последнюю букву (например: ромашка – рома).
текст программы

var
s:string;

    k:integer;

begin

writeln(‘введите слово‘);

readln(s);

k:=length(s);

if k mod 2=0 then writeln(copy(s,1,k div 2))

else

writeln(copy(s,1,k div 2)+copy(s,k,1));

end.

Задача (урок )

Напишите программу, которая получает с клавиатуры слово и если количество букв в слове кратно 4 выводит вторую половинку слова (например: крокодил – одил), если количество букв в слове не кратно 4, тогда последние 2 буквы (например: ромашка – ка).
текст программы

var
s:string;

    k,n:integer;

begin

writeln(‘введите слово‘);

readln(s);

k:=length(s);

if k mod
4=0 then

begin

n:=k div 2;

writeln(copy(s,n+1,n))

end

else

writeln(copy(s,k-1,2));
end.



Задача (урок )
Напишите программу, которая для любого вводимого с клавиатуры трехзначного числа вычисляет и выводит на экран количество сотен, десятков и единиц (например, для числа 741 результат будет: сотен – 7, десятков, – 4, единиц – 1)
текст программы
var x:integer;
    e,d,s:integer;
begin
writeln(‘введите 3-х значное число’);
readln(x);
s:=x div 100;
e:=x mod 10;
d:=x div 10 mod 10;
writeln(‘сотен – ‘,s,’ десятков – ‘,d,’ единиц – ‘,e);
end.

Задача (урок)

Составить программу, в которой стороны прямоугольника (a – ширина, b – высота) задаются двумя случайных числа в диапазоне от 5 до 20 и если a больше b, то вычисляется площадь прямоугольника,  иначе – периметр. Вывод данных оформить следующим образом:
ширина …
высота …
площадь (или периметр) …
блок-схема
текст программы
var a,b,s,p:integer;
begin
a:=random(16)+5;
writeln(a);
b:=random(16)+5;
writeln(b);
if a>b then
begin
s:=a*b;
writeln(‘площадь ‘,s);
end
else
begin
p:=2*(a+b);
writeln(‘периметр ‘,p);
end;
end.

Оператор цикла с известным количеством повторений for i:=начальное значение to конечное значение do оператор

Задача (урок )
Составьте программу, которая из 10 случайных чисел из промежутка от 10 до 20 находит количество чисел меньших 17. Оформите вывод следующим образом: вывод чисел через пробел в строчку, на следующей строке количество чисел меньших 17.
блок-схема
текст программы
var i,x,k:integer;
begin
k:=0;
for i:=1 to 10 do
begin
x:=random(11)+10;
write(x,’ ‘);
if x<17 then k:=k+1;
end;
writeln;
writeln(‘Количество меньших 17 ‘,k);
end.


Задача (урок )
Составьте программу, которая выводит на экран в строчку 15 случайных чисел из промежутка от 1 до 30 и подсчитывает количество четных чисел.
Пояснение. 
Обратите внимание, что переменная k – счетчик, поэтому начальное значение переменной обнуляем. Условие для подсчета четных: if a mod 2 =0 then k:=k+1, т.е. если  число четное, то k увеличивается на 1.
Текст программы
var i,a,k:integer;
begin
k:=0;
for i:=1 to 15 do
begin
a:=random(30)+1;
if a mod 2=0 then k:=k+1;
write(a,’ ‘);
end;
writeln;
writeln(‘Количество четных ‘,k);
end.

Задачи из ОГЭ по информатике на циклы:

Что будет напечатано в результате работы следующей программы?

var s,k:integer;

begin
s:=50;
for k:=1 to 6 do s:=s-4;
write(s);
end.

Работа программы:
var s,k:integer; – описание переменных целого типа s и k
s:=50; – s=50
for k:=1 to 6 do s:=s-4;
    k=1 s=50-4=46
    k=2 s=46-4=42
    k=3 s=42-4=38
    k=4 s=38-4=34
    k=5 s=34-4=30
    k=6 s=30-4=26
write(s); – вывод на экран значение переменной s равное 26

Можно решить данную задачу выражением.

Цикл выполняется 6 раз, следовательно  s = 50 – 6*4 = 26

Оператор цикла while (цикл ПОКА)

while <условие> do оператор;

Выполняет действие или действия пока истинно условие. После каждого прохождения тела цикла, условие проверяется и если условие ложно, осуществляется выход из цикла. 
Если условие истинно всегда, то происходит зацикливание.Чтобы прервать зациклившуюся программу, следует использовать комбинацию клавиш Ctrl-F2.
Условие – логическое выражение, записанное с помощью логических операторов сравнения.


Задача (урок )
Составьте программу,которая для введенного с клавиатуры целого числа выводит на экран в столбик число единиц, десятков, сотен и т.д.
Пример: 742
результат
2
4

7
Текст программы
var x,a:integer;
begin
readln(x);
writeln(‘результат’);
while x<>0 do
begin
a:=x mod 10;
writeln(a);
x:=x div 10;
end;
end.

Задача (урок 27.04.2021)
Составьте программу, которая пока не будет введен 0 запрашивает целые положительные числа с клавиатуры и находит среди них наибольшее. Результат выводится на экран.

Пояснение 
Обратите внимание, что если требуется найти наибольшее число, начальное значение переменной, в которой будем его хранить, делаем наименьшим из возможных (в данном случае max=0). 

Условие для нахождения максимального элемента if a>max then max:= a.
блок-схема
Текст программы
var x,max:integer;
begin
max:=0;
readln(x);
while x<>0 do
begin
if x>max then max:=x;
readln(x);
end;
writeln(‘max=’,max);
end.

Задача (урок )
Составьте программу, которая пока не будет введен 0 запрашивает целые положительные числа с клавиатуры и находит среди них количество двузначных чисел, оканчивающихся на цифру 3. Среди вводимых чисел обязательно есть такое число. Результат выводится на экран.
Пояснение. 
Для подсчета количества используем накопитель, переменную k. 
Обратите внимание, что переменная k – счетчик, поэтому начальное значение переменной обнуляем. Условие для подсчета: (x mod 10=3) – окончание на 3, (x>9) and (x<100) – двузначное число, k:=k+1, т.е. если  число удовлетворяет условию, то k увеличивается на 1.

Текст программы
var x,k:integer;
begin
k:=0;
readln(x);
while x<>0 do
begin
if (x mod 10=3)and(x>9)and(x<100) then k:=k+1;
readln(x);
end;
writeln(‘результат’,k);
end.

Задача (урок)
Составьте программу, которая выводит на экран в строчку 10 случайных чисел из промежутка от 2 до 7 и подсчитывает количество чисел равных 2.
Пояснение. 
Для подсчета количества двоек используем накопитель, переменную k. 
Обратите внимание, что переменная k – счетчик, поэтому начальное значение переменной обнуляем. Условие для подсчета 2: if a=2 then k:=k+1, т.е. если  число равно 2, то k увеличивается на 1.
Текст программы
var i,a,k:integer;
begin
k:=0;
for i:=1 to 10 do
begin
a:=random(6)+2;
if a=2 then k:=k+1;
write(a,’ ‘);
end;
writeln;
writeln(‘Количество двоек ‘,k);
end.


Задача (урок)
Составьте программу, которая выводит на экран в строчку 10 случайных чисел из промежутка от 1 до 30 и находит наибольшее число.

Пояснение 
Обратите внимание, что если требуется найти наибольшее число, начальное значение переменной, в которой будем его хранить, делаем наименьшим из возможных (в данном случае max=0). 

Условие для нахождения максимального элемента if a>max then max:= a.
Текст программы
var i,a,max:integer;
begin
max:=0;
for i:=1 to 10 do
begin
a:=random(30)+1;
if a>max then max:=a;
write(a,’ ‘);
end;
writeln;
writeln(‘Максимальное ‘,max);
end.

Задача (урок)
Составьте программу, которая выводит на экран в строчку 10 случайных чисел из промежутка от 1 до 30 и находит наименьшее число.

Пояснение 
Обратите внимание, что если требуется найти наименьшее число, начальное значение переменной, в которой будем его хранить, делаем наибольшим из возможных (в данном случае min=31). 

Условие для нахождения наименьшего if a<min then min:= a.
Текст программы
var i,a,min:integer;
begin
min:=31;
for i:=1 to 10 do
begin
a:=random(30)+1;
if a<min then min:=a;
write(a,’ ‘);
end;
writeln;
writeln(‘Наименьшее ‘,min);
end.

Задача (урок)
Составьте программу, которая выводит на экран в строчку 10 случайных чисел из промежутка от 1 до 10 и находит сумму чисел <=3.
var i,a,s:integer;
begin
s:=0;
for i:=1 to 10 do
begin
a:=random(10)+1;
if a<=3 then s:=s+a;
write(a,’ ‘);
end;
writeln;
writeln(‘Сумма чисел <=3 ‘,s);
end.


Задача (урок)
Составьте программу, которая из 5, вводимых с клавиатуры целых чисел, находит максимальное число, оканчивающееся на цифру “5” (среди вводимых чисел обязательно есть такое число).
Текст программы


var i,a,max:integer;
begin
max:=0;
for i:=1 to 5 do
begin
readln(a);
if (a mod 10=5) and (a>max) then max:=a;
end;
writeln(‘Максимальное число оканчивающееся на 5: ‘,max);
end.


Задача (урок)
Составьте программу, вычисляющую значение выражения f=1+2+3+4+ …+n, где n – целое положительное число, вводимое с клавиатуры.
Пояснение 
Обратите внимание, что в формуле складываются числа с 1 и по порядку до n. Мы знаем, что переменная цикла for i, тоже принимает значения с начального до конечного по порядку. Если n будет конечным значение переменной цикла, то i будет принимать нужные нам слагаемые: 1, 2 ,3, 4 … n.
Остается понять как организовать сложение, здесь и в подобных случаях используется формула f:=f+i и в самом начале программы или перед циклом переменной f присваивается значение 0 (f:=0)
Ход программы (пример):
пусть f=0, n=4

работа оператора for i:=1 to n do f:=f+i
шаг 1: i=1 f=0+1=1, в ОП (оперативной памяти) f=1
шаг 2: i=2 f=1+2=3, в ОП f=3
шаг 2: i=3 f=3+3=6, в ОП f=6
шаг 2: i=4 f=6+4=10, в ОП f=10

Проверка: f=1+2+3+4=10

Текст программы

var i,f,n:integer;

begin

f:=0;

writeln(‘введите целое число < 100’);

readln(n);

for i:=1 to n do f:=f+i;

writeln(‘f=’,f);

end.


Задача (урок)
Составьте программу, вычисляющую значение выражения f=1*2*3*4* …*n, где n – целое положительное число, вводимое с клавиатуры.
Пояснение 
В данной программе мы используем тот же прием, что и в примере 8, но в данной ситуации нам не подходит начальное значение f=0 (при умножении на 0 произведение равно 0). Нам нужно число не влияющее на результат умножения, т.е. начальное значение f=1.
Получаем: for i:=1 to n do f:=f*i

Текст программы
var i,f,n:integer;
begin
f:=1;
writeln(‘введите целое число < 100’);
readln(n);
for i:=1 to n do f:=f*i;
writeln(‘f=’,f);
end.

Задача  (урок)
Составьте программу, вычисляющую значение выражения 


где n – целое положительное число, вводимое с клавиатуры.
Пояснение
В данной программе целесообразно отдельно посчитать в цикле числитель (например, f1=1+2+3+…+n) и знаменатель (f2=1*2*3*…*n), а после цикла вычислить все выражение f=f1/f2.
Обратите внимание, что в данной программе знаменатель никогда не будет равным 0, поэтому исключать деление на 0 через оператор if не нужно.

Текст программы
var i,f1,f2,n:integer;
    f:real;
begin
f1:=0;
f2:=1;
writeln(‘введите целое число < 100’);
readln(n);
for i:=1 to n do
begin
f1:=f1+i;
f2:=f2*i;
end;
f:=f1/f2;
writeln(‘f=’,f);
end.

Задача (урок)
Составьте программу, вычисляющую значение выражения 







где x – целое число, n – целое положительное число, вводимые с клавиатуры.
Пояснение
В данной задаче на каждом шаге цикла нам нужно получить соответствующую степень числа x. На первом – 1-ю, на втором – 2-ю и т.д. Мы не можем использовать переменную цикла i в формуле, так как в pascal нет функции степень с произвольным показателем. Если взять переменную p с начальным значением 1 (p:=1) и в цикле использовать формулу для подсчета степени числа x p:=p*x, то получим:
шаг 1: i=1 p=1*x=x
шаг 2: i=2 p=x*x
шаг 3: i=3 p=x*x*x и т.д.

Но нам нужно подсчитывать и сумму степеней f=x+x*x+x*x*x+…. В этом же цикле будем считать сумму по формуле f:=f+p, задав начальное значение f=0.
шаг 1: i=1 p=1*x=x, f=0+p=x
шаг 2: i=2 p=x*x, f=x+p=x+x*x
шаг 3: i=3 p=x*x*x, f=x+x*x+x*x*x и т.д.

Текст программы
var i,f,p,n,x:integer;
begin
f:=0;
p:=1;
writeln(‘введите целое число < 100’);
readln(n);
writeln(‘введите число x’);
readln(x);
for i:=1 to n do 
begin
p:=p*x;
f:=f+p;
end;
writeln(‘f=’,f);
end.

Задача (урок)

Составьте программу, вычисляющую значение выражения f= x+2x+3x+…+nx
где x – целое число, n – целое положительное число, вводимые с клавиатуры.
Пояснение
В этой программе будем использовать переменную цикла i как коэффициент для переменной x: 

for i:=1 to n do f:=f+i*x

Текст программы
var i,f,n,x:integer;
begin
f:=0;
writeln(‘введите целое число < 100’);
readln(n);
writeln(‘введите число x’);
readln(x);
for i:=1 to n do f:=f+i*x;
writeln(‘f=’,f);
end.

Напишем программу, которая будет вычислять площадь и периметр прямоугольника со сторонами (5) см и (8) см.

Входные данные в задаче:

(a=5) см;

(b=8) см.

На выходе мы должны получить:

(S) — площадь прямоугольника;

(P) — периметр прямоугольника.

Для вычислений будем использовать формулы из курса математики:

S=a×b,P=2×(a+b)

.

Напишем программу:

Screenshot_1.png

С помощью данной программы мы найдем площадь и периметр прямоугольника. 

В окне вывода увидим следующее:

Screenshot_12.png

Данная программа не универсальна для некоторого класса задач, а это противоречит свойствам алгоритма. Программа работает только для одного конкретного прямоугольника со сторонами (5) см и (8) см. Для того, чтобы программа могла находить площадь и периметр для любого прямоугольника, необходимо добавить в неё оператора ввода.

Не квадратное, конечно, но все же
Не квадратное, конечно, но все же

Добрый день, товарищи! И вот я возвращаюсь с новым гайдом, который, думаю, окажется многим полезным. Сегодня мы напишем программу для нахождения корней и дискриминанта квадратного уравнения.

Согласитесь, всегда удобно иметь под рукой небольшой калькулятор, который быстро покажет тебе и дискриминант, и ответ на сложное уравнение.

В конце статьи я дам вам ссылку на Яндекс.Диск для скачивания файла с этим кодом!

1. Объявим и введем переменные

Квадратные уравнения на Pascal. Находим дискриминант.

В этом отрезке кода мы объявляем наши переменные. a, b, c – будет вводить пользователь, это основные части уравнения.

d – наш дискриминант.

x1, x2 – корни уравнения.

Тип данных выберем целый, но при желании все же можно поставить real.

Для наглядности после ввода переменных продублируем их в уравнение, чтобы пользователь видел уравнение.

2. Находим дискриминант квадратного уравнения

Квадратные уравнения на Pascal. Находим дискриминант.

Тут все просто, тут все по математике. Вместо не очень красивого b*b можно использовать функцию возведения в квадрат – sqr(b), в данном примере так сделано для наглядности.

3. Если дискриминант меньше нуля

Квадратные уравнения на Pascal. Находим дискриминант.

Как мы помним из курса математики, если Д меньше нуля – это уравнение не будет иметь смысла. Чтож, поэтому необходимо добавить это исключение.

4. Если дискриминант равен нулю

Квадратные уравнения на Pascal. Находим дискриминант.

Если Д равен нулю – у него лишь один корень, и находится он иначе, чем при Д больше нуля. Поэтому поспешим добавить и это исключение в нашу программу.

5. Находим корни х1 и х2 квадратного уравнения

Квадратные уравнения на Pascal. Находим дискриминант.

Просто найдем х1 и х2. Напомню, что sqrt(d) это корень дискриминанта. После этого просто делим это на 2а. Формулы, думаю, сами знаете.

Чтож, вот и все программа, ссылка, напомню, будет в конце статьи, а сейчас давайте ее протестируем!

6. Тесты

Тесты помещу в галерею. Смотрите остальные (->)

7. Полный код + ссылка

Квадратные уравнения на Pascal. Находим дискриминант.

Тут весь код программы, а ниже вы можете найти ссылку на скачивание этой программы в формате .pas, для открытия файла сразу в паскале.

Скачать код программы с Яндекс.Диска

Квадратные уравнения на Pascal. Находим дискриминант.

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

По возможности я попросил бы подписаться и оценить публикацию. Сейчас это критически важно для развития канала. Так то!

Доброго вам всем здоровьица в эти трудные времена!

Тема: Решение задач на языке Pascal.

Цели урока:

1. Обобщить и систематизировать знания учащихся по данной теме.
2. Продолжить формировать практические навыки по составлению блок схем и программ.
3. Показать взаимосвязь математики и информатики. Научить использовать знания, полученные на уроке математики при решении задач по информатике.
4. Развивать логическое мышление, умение обобщать, сопоставлять и применять полученные знания на практике.
5. Развивать познавательную деятельность учащихся, прививать интерес к составлению программ, развивать умение анализировать происходящие изменения в решении задач.

Воспитательные цели:

1. Развивать познавательный интерес, творческую активность, интеллект.
2. Развивать интуицию, эрудицию, самостоятельность в суждениях, упорство в достижении цели.
3. Развивать культуру общения, воспитывать внимание, сообразительность, находчивость, тренировку памяти, умение работать в группе.

Тип урока: Комбинированный.

Метод: Проблемно – поисковый метод при решении задач по информатике.

ХОД УРОКА

Учитель: В начале урока я предлагаю следующую задачу для решения в классе: Найти наибольшее число из трех заданных чисел. На доске записываю несколько троек чисел: 568, 742, 390.

Учащиеся называют максимальное число: 742.

Вопрос: “Каким образом вы определили, что данное число максимальное?”.

Если это первые уроки программирования, то учащиеся затрудняются ответить на этот вопрос, поскольку они еще не привыкли отслеживать свои действия при решении задач. Надо помочь дополнительными вопросами, в поисках верного ответа:

Учитель: Мы сравнили числа друг с другом.

Учитель: А как на уроке математике вы бы сравнили натуральные трехзначные числа?

Ответ: Посмотрели разряд числа – если единицы разрядов сотен равны, то сравниваем единицы разрядов десятков, если они равны, сравниваем разряд единиц и больше то число, у которого разряд сотен больше.

Вывод: Итак, максимальное число: 742

Проблема: “А как компьютер сравнит три числа?”

Я обращаю внимание ребят, что машина может сравнивать только два числа

Обозначим одно число буквой А, второе число буквой B, третье число – буквой С.

Учащиеся: Предлагают такой вариант решения проблемы: надо сравнивать первые два числа, а затем, большее из них с третьим числом.

Учитель: Нарисуйте в тетради блок – схему для сравнения трех чисел.

Учащиеся в тетради рисуют блок – схему, а затем сравнивают составленную ими схему с блок – схемой на доске. Одному из учащихся предлагаю сделать анализ блок – схемы. А теперь в соответствии с блок – схемой составьте – программу.

Учащиеся самостоятельно составляют программу.

Учитель: Проверьте правильность работы программы, введите заданные числа и посмотрите результат.

Проблема: А может ли измениться исходное значение переменной А в процессе работы программы?

Ответ: Да.

Учитель: А как? Ответ обоснуйте.

Решение:

1. Находим наибольшее из первых двух данных чисел A и B, а затем – максимальное из полученного числа и третьего данного числа С.

Program MAX1;
Var A, B, C, max: real;
begin
writeln (‘Введите три числа A, B, C’);
readln (A, B, С);
if AB then max:=A else max:=b;
if C max then max:=C;
writeln(‘Максимальное значение=’,max);
end.

Учитель: Как вы думаете, можно ли решить задачу другими способами?

Учащиеся получают задание на уроке и продолжают поиск решения задачи.

Предполагаемые решения учащихся:

2 способ. При решении задачи можно проверить, является ли первое число A максимальным и если не является, то сравниваем второе и третье число B и C.

Program MAX2;
Var A, B, C, max: real;
begin
writeln (‘Введите три числа A, B, C’);
readln (A, B, С);
If (AB) and (AC) then max:=A;
if BC then Max:=B else Max :=C;
Writeln(‘Максимальное значение =’, Max);
End;

3 способ. Можно решить задачу, сравнивая попарно все числа .

Program MAX3;
var A, B, C, Max: real;
begin
Writeln(‘Введем три числа’);
readln(A, B, C);
If (AB) and (AC) then Max:= A;
If (BA) and (BC) then Max:=B;
If (CA) and (CB) then Max:=C;
Writeln(Max:6:2);
end.

Чтобы убедиться в правильности выполнения программы, желательно рассмотреть ее выполнение с помощью таблицы значений. При проверке правильности выполнения программы необходимо рассматривать все возможные варианты АВС, АСВ, ВСА, СВА, ВАС, САВ.

Проблема: А можно написать программу, чтобы она выстраивала числа в порядке возрастания или убывания?

Ученики предлагают свои варианты решения данной проблемы.

Варианты решения задачи:

Программа выстраивает числа в порядке убывания.

Program MAX4;
Var A, B, C, Max: real;
begin
Writeln(‘Введите три числа’);
Readln(A, B, C);
If (AB) and (AC) and (BC) then writeln (A, ‘ ‘,B,’ ‘,C);
If (BC) and (BA) and (AC) then writeln (B, ‘ ‘,A,’ ‘,C);
If (CA) and (CB) and (AB) then writeln (C, ‘ ‘,A,’ ‘,B);
If (AB) and (AC) and (CB) then writeln (A, ‘ ‘,C,’ ‘,B);
If (BC) and (BA) and (CA) then writeln (B, ‘ ‘,C,’ ‘,A);
If (CA) and (CB) and (BA) then writeln (C, ‘ ‘,B,’ ‘,A);
End.

Программа печатает максимальное число, минимальное число и среднее число.

Program MAX5;
Var A, B, C, Max, Min, Sr : real;
begin
Writeln(‘Введите три числа’);
Readln(A, B, C);
If AB Then Max:=A else Max:=B;
If C Max Then Max:=C;
If AIf CIf (AB) and (AIf (BA) and (BIf (CA) and (CIf (BC) Then Sr:=B;
If (AC) Then Sr:=A;
If (CB) Then Sr:=C;
Writeln (‘Max=’, Max:6:2);
Writeln (‘Sr=’, Sr:6:2);
Writeln (‘Min=’, Min:6:2);
End.

РАССМОТРИМ ЗАДАЧУ № 2.

Даны три натуральных числа. Найти их наибольший общий делитель.

Вопрос: Какие существуют методы нахождения НОД?

Ответ: Существуют различные методы нахождения наибольшего общего делителя нескольких натуральных чисел:

1. разложения на простые сомножители,
2. алгоритм Евклида,
3. целочисленное деление.

Найти НОД чисел 48, 36, 24

Разложим на множители числа:

48 = 2 * 2 * 2 * 2 *3
36 = 2 * 2 * 3 * 3
24 = 2 * 2 * 2 * 3

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

– это числа 2 * 2 * 3 =12

Учитель: Сделайте вывод для тройки чисел x, y, z.

Проблема: Какие же знания и умения необходимы для построения алгоритма нахождения НОД?

Для того чтобы построить алгоритм, необходимо уметь:

  • определять все простые множители в пределах заранее неизвестных чисел х и у, z;

  • хранить эти простые множители и обращаться к ним;

  • хранить все сомножители для чисел х и у, z;

  • выбирать из трех множеств одинаковые элементы.

Сделайте анализ.

Каждая часть задачи сложна для алгоритмизации. Построение массива простых чисел требует проверки, является ли число простым, т.е. не делится ли оно на все простые числа, меньше данного.

Второй метод решения – рекурсивный. Его общепринятое название – алгоритм Евклида – это алгоритм нахождения наибольшего общего делителя (НОД) двух целых неотрицательных чисел.

НОД (х, у) вычисляется в соответствии со следующим правилом:

НОД (х, у)=

Мы разбирали решение задачи для нахождения НОД двух чисел.

Для решения данной задачи воспользуемся циклом с постусловием.

Третий метод решения – это целочисленное деление.

Пусть х и у – одновременно не равные нулю целые неотрицательные числа, и пусть ху. Если у = 0, то НОД (х, у) = х, а если у0, то для чисел х, у и r, где r остаток от деления х на у, выполняется равенство НОД (х, у) = НОД (у, r).

В соответствие со следующим правилом:

НОД(48, 18) = НОД(18, 12) = НОД(12, 6) = 6.

Первое число делим нацело на второе. Очевидно, что остаток целочисленного деления меньше второго числа. Если остаток равен нулю, то это значит, что первое число нацело делится на второе, и в этом случае второе число и будем считать НОД (в соответствие с определением). Если остаток не равен нулю, то заменим первое число на второе, а второе – на остаток, и будем повторять действия до тех пор, пока остаток не станет равным нулю.

Запишем алгоритм решения задачи:

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

2. Найдем r – остаток от деления х нацело на у.

3. Если r = 0, то найдем значение у, иначе х:=у; у:= r.

4. Найдем r – остаток от деления х нацело на у.

  • Вычислить значение х

  • Порядок действий имеет большое значение. Результат выполнения операций x:=x; y:=r отличен от результата выполнения операций
    y: = r; x: =y.

Проблема: А правильно ли мы составили алгоритм?

Задание на дом: Докажите правильность алгоритма.

Решение задачи для нахождения НОД двух чисел.

Program NOD_1;
Var x, y:integer;
Begin
Writeln(‘Введите два числа’);
Readln (x, y);
Repeat
If x y then x:= x mod y else y:= y mod x;
Until (x = 0) or ( y = 0);
{до тех пор, пока одно из чисел не станет равно нулю}
Writeln (‘НОД=’, x + y);
{ Вывод НОД. Одно из чисел обязательно равно нулю}
Readln;
End.

Машина может находить НОД двух чисел.

Проблема:

Как составить программу для нахождения НОД трех?

Учащиеся:

Сначала находим НОД двух чисел, а затем находим НОД третьего числа.

НОД (a, b, c) = НОД (НОД(a, b), c).

Я предлагаю ученикам самим решить задачу.

Один из способов решения задачи, предлагаемый учениками приведен ниже.

Программа на Паскале:

Program NOD_2;
Var A, B,C, S:integer;
Begin
Readln(A, B, C);
Repeat
If AB then A:=A mod B
Else B:=B mod A;
Until (A = 0) or ( B = 0);
Writeln (‘НОД=’, A + B);
S:=A + B;
Repeat
If S C then S:= s mod C else C:= C mod S;
Until (S = 0) or ( C = 0);
Writeln (‘НОД=’, S + C);
{Вывод НОД. Одно из чисел обязательно равно нулю
Readln;
End.

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

Для учеников проблема состоит еще и в том, чтобы выбрать метод, который будет более эффективен и прост в решении.

Домашнее задание:

1) Написать программу вычисления нахождения максимального числа из трех заданных чисел.
2) Найти НОД трех чисел любым удобным для вас способом.

Голосование за лучший ответ

Симон Сукиасян

Гуру

(3722)


12 лет назад

var
a, b, c, max: longint;
begin
readln(a, b, c);
max:=a;
if b > max then max:=b;
if c > max then max:=c;
writeln(max);
readln;
end

a, b, c – наши числа
max – максимальный
Вводим три числа, в ответ получаем максимальный

lavelas 745

Ученик

(204)


12 лет назад

var
a,b,c : real;
begin
WriteLn (‘введите a,b,c ‘); ReadLn (a,b,c);
if (a>b) and (b>c) then
WriteLn (‘a’)
else
if (b> a) and (a>c) then
WriteLn (‘b’)
else
writeLn (‘c’);
end.

Добавить комментарий