Задачи по теме «Основы алгоритмизации и программирования» для 8 класса Г. В. Кирись

Вид материалаДокументы

Содержание


Линейные алгоритмы
Алгоритмы с ветвлением
Abs(x) (возвращает модуль действительного числа x), используются процедуры SetPenColor(color)
Алгоритмы с повторением
Алгоритмы с повторением и ветвлением
Подобный материал:

Задачи по теме «Основы алгоритмизации и программирования» для 8 класса Г.В. Кирись


Г.В. Кирись, методист высшей категории по информатике отдела методического обеспечения естественно-математического образования Национального института образования

Задачи по теме «Основы алгоритмизации
и программирования» для 8 класса


В соответствии с утвержденной Министерством образования учебной программой для общеобразовательных учреждений «Информатика VI-XI классы» (Минск, НИО, 2008), начиная с VI класса, предусмотрено изучение языка программирования. В программе не указано конкретное программное обеспечение, однако, в изданном в 2008 году учебном пособии «Информатика. VI класс» авторов А.Е. Пупцева, Н.П. Макаровой, А.И. Лапо и в планируемом учебном пособии для VII класса рассматривается язык программирования Pascal и система программирования PascalABC.

Учащиеся VIII класса в текущем учебном году начинают изучать программирование, поэтому в календарно-тематическом планировании предусмотрены часы на изучение среды программирования, типов данных, арифметических операций и выражений, стандартных арифметических функций, ввода и вывода данных (что должно быть по программе изучено в VII классе), а затем происходит изучение тем программы VIII класса. В представленной статье сначала рассматриваются задачи на линейные алгоритмы (могут быть использованы на уроках 1-3 изучения темы 12 «Основы алгоритмизации и программирования»), а затем – на ветвление (уроки 4-6) и повторение (уроки 7-10).

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

Программирование – увлекательная работа. Это хорошо известно всем, кто занимается или занимался ранее программированием. Как привить учащимся интерес к составлению алгоритмов? На мой взгляд, для повышения мотивации к изучению программирования важно показать учащимся практическую направленность данной темы. Большую роль в этом играет подбор задач, предлагаемых учащимся для решения, составленных с учетом межпредметных связей. С этой целью в данной статье рассматриваются задачи из курса физики 8 класса по темам «Механические явления», «Тепловые явления» и «Электрические явления», из курса математики 8 класса по темам «Неравенства» и «Квадратные уравнения», которые будут пройдены к моменту изучения темы «Основы алгоритмизации и программирования». Важно показать учащимся, что составленные алгоритмы можно применять для решения упражнений из учебных пособий по математике и физике. Конечно, не все учащиеся захотят стать программистами, но у некоторых школьников появится желание составить алгоритмы к решению задач по другим изучаемым формулам физики, химии, математики, а это может быть станет толчком к выбору в будущем профессии программиста.

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

Представленные в статье задачи не являются сложными, но в записанных алгоритмах большое внимание уделяется «красивому» выводу результатов работы, например, при выводе квадратного уравнения ax2+bx+c=0 рассматриваются варианты b>0, b<0, c>0, c<0, чтобы не получился вид: -3x2+-5x+-11=0 (см. задачи 8-11 из алгоритмов с ветвлением). Это увеличивает количество строк программы, однако способствует достижению вышеназванной цели.

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

Линейные алгоритмы

Задача 1. Вычислите сколько в N сутках часов, минут, секунд.

program lin_1;

uses crt;

var n,nh,nm,ns : integer;

begin

write('Введите количество суток: ');

readln(n);

nh := n*24; {в сутках 24 часа}

nm := nh*60; {1 час = 60 минут}

ns := nm*60; {1 минута = 60 секунд}

writeln(n,' суток = ',nh,' часов = ',nm,' минут = ',ns,
' секунд');

end.

Задача 2. Введите значение скорости в м/с и переведите ее в км/ч ().

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

program lin_2;

uses crt;

var v_ms,v_kmh : real;

begin

write('Введите значение скорости в м/с: ');

readln(v_ms);

v_kmh := v_ms*3.6; {умножаем скорость в м/с на 3.6}

writeln(v_ms:4:2,' м/с = ',v_kmh:4:2,' км/ч');

end.

Задача 3. Введите значение скорости в км/ч и переведите ее в м/с

()

program lin_3;

uses crt;

var v_ms,v_kmh : real;

begin

write('Введите значение скорости в км/ч: ');

readln(v_kmh);

v_ms := v_kmh/3.6; {делим скорость в км/ч на 3.6}

writeln(v_kmh:4:2,' км/ч = ',v_ms:4:2,' м/с');

end.


Задача 4. Вычислите среднюю температуру воздуха за последние четыре дня.

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

program lin_4;

uses crt;

var t1,t2,t3,t4,tsr : real;

begin

writeln('Введите температуру воздуха');

write('в первый день: ');

readln(t1);

write('во второй день: ');

readln(t2);

write('в третий день: ');

readln(t3);

write('в четвертый день: ');

readln(t4);

tsr := (t1+t2+t3+t4)/4; {средняя температура за 4 дня}

writeln('Средняя температура воздуха за четыре дня: ',tsr:4:1,

' градусов С');

end.

Задача 5. Под действием силы тяги F  (н) автомобиль совершает путь
s  (м). Определить работу силы F
(работа вычисляется по формуле
A = F*s).


program lin_5;

uses crt;

var a,f,s : real;

begin

writeln('Введите величину силы тяги (н): ');

readln(f);

writeln('Введите расстояние (м): ');

readln(s);

a := f*s;

writeln('Совершенная работа силы тяги ',a:5:2,' Дж');

end.

Задача 6. Вычислите количество кубиков с ребром а (см), которые можно поместить на полоску длиной L (см) (размеры могут быть вещественными числами).

В программе используется стандартная функция Pascal ABC: Trunc(x) (возвращает целую часть действительного числа х).

program lin_6;

uses crt;

var a,L : real;

kol : byte;

begin

write('Введите длину ребра кубика (см): ');

readln(a);

writeln('Введите длину полоски (см): ');

readln(L);

kol := trunc(L/a); {целая часть при делении L на a}

writeln('На полоску длины ',L,' можно поместить ',kol,' кубика(ов)');

end.

Задача 7. Вычислите количество теплоты Q (Дж), необходимое для нагревания тела массой m на ∆tº. (Q=cm∆t, с – удельная теплоемкость вещества, сAl =920, cFe =460,
cAu =130, cPb =120, CAg =250, CZn =400 )

program lin_7;

uses crt;

var q,m,dt : real;

c : integer;

begin

write('Введите массу тела (кг): ');

readln(m);

write('Введите на сколько градусов необходимо нагреть тело: ');

readln(dt);

write('Введите значение удельной теплоемкости вещества (Дж/(кг град.С)): ');

readln(c);

q := c*m*dt; {количество теплоты}

writeln('Для нагревания тела массой ',m,' кг на ',dt,

' градусов ');

writeln('необходимо ',q,' джоулей теплоты');

end.

Задача 8 Найдите удельную теплоемкость вещества, из которого сделан шар массой m (кг), если на его нагревание от t1º до t2º потребовалось
Q (Дж) теплоты
(; например, если m=0.2 кг, t
1=20º, t2=30º, Q=500 Дж, то c=250 Дж/(кг ºС), шар сделан из олова)

program lin_8;

uses crt;

var c,q,m,t1,t2 : real;

begin

write('Введите массу шара: ');

readln(m);

write('Введите начальную температуру шара: ');

readln(t1);

write('Введите конечную температуру шара: ');

readln(t2);

write('Введите количество теплоты, затраченной на нагревание шара: ');

readln(q);

c := q/(m*(t2-t1));

writeln('Удельная теплоемкость вещества: ',c,

' Дж/(кг*град.С)');

end.

Задача 9. Расстояние от Минска до населенного пункта Беларуси S (км). Вычислите, сколько литров топлива (бензина, дизельного топлива, газа) потребуется на дорогу из Минска в заданный населенный пункт и обратно и сколько денег необходимо уплатить за это топливо, если расход топлива на 100 км составляет K (л), а 1 л топлива стоит P (руб).

В программе используется стандартная функция Pascal ABC: Round(x) (возвращает результат округления действительного числа x до ближайшего целого).


program lin_9;

uses crt;

var s,v_100,v_2s : real;

v_2s_int,p : integer;

begin

write('Введите значение расстояния в км: ');

readln(s);

write('Введите расход топлива (л на 100 км): ');

readln(v_100);

write('Введите стоимость 1 л топлива: ');

readln(p);

v_2s := 2*s/100*v_100; {расход топлива на весь путь}

writeln('На дорогу потребуется ',v_2s:4:2,' литров топлива');

v_2s_int := round(v_2s); {округлим расход топлива до целых единиц}

p := p*v_2s_int; {стоимость топлива на весь путь}

writeln('За ',v_2s_int,' литр(ов) топлива придется уплатить ',p,' рублей');

end.

Задача 10. N одинаковых проводников соединены в цепь последовательно. Вычислите силу тока, напряжение и сопротивление на участке цепи. (I=I1, U=N*U1, R=N*R1 )

program lin_10;

uses crt;

var u,uc,i,ic,r,rc : real;

n : byte; {для n достаточно 1 байта памяти}

{n может принимать значения от 0 до 255}

begin

writeln('Участок цепи содержит N одинаковых последовательно соединенных проводников');

write('Введите количество проводников: ');

readln(n);

write('Введите значение силы тока одного проводника (А): ');

readln(i);

write('Введите значение напряжения одного проводника (В): ');

readln(u);

writeln('Введите значение сопротивления одного проводника (Ом): ');

readln(r);

ic := i; {сила тока на участке цепи}

uc := n*u; {напряжение на участке цепи}

rc := n*r; {сопротивление участка цепи}

writeln('Сила тока на участке цепи равна ',ic:5:2,' ампер');

writeln('Напряжение на участке цепи равно ',uc:5:2,' вольт');

writeln('Сопротивление участка цепи равно ',rc:5:2,' ом');

end.

Задача 11. N одинаковых проводников соединены в цепь параллельно. Вычислите силу тока, напряжение и сопротивление на участке цепи. (I=N*I1, U=U1, R=R1 /N)

program lin_11;

uses crt;

var u,uc,i,ic,r,rc : real;

n : byte; {для n достаточно 1 байта памяти}

{n может принимать значения от 0 до 255}

begin

writeln('Участок цепи содержит N одинаковых параллельно соединенных проводников');

write('Введите количество проводников: ');

readln(n);

write('Введите значение силы тока одного проводника (А): ');

readln(i);

write('Введите значение напряжения одного проводника (В): ');

readln(u);

write('Введите значение сопротивления одного проводника (Ом): ');

readln(r);

ic := n*i; {сила тока на участке цепи}

uc := u; {напряжение на участке цепи}

rc := r/n; {сопротивление участка цепи}

writeln('Сила тока на участке цепи равна ',ic:5:2,' ампер');

writeln('Напряжение на участке цепи равно ',uc:5:2,' вольт');

writeln('Сопротивление участка цепи равно ',rc:5:2,' ом');

end.

Алгоритмы с ветвлением

Задача 1. Введите рост (в сантиметрах) трех подружек Маши, Наташи и Оли. Узнайте, какая из подружек самая маленькая.

program if_1;

uses crt;

var m,n,o,min : byte;
{для значения роста (в см) достаточно 1 байта памяти}

{в этом случае рост может принимать значения от 0 до 255}

begin

writeln('Введите рост трех подружек(см)');

write('Маша: '); readln(m);

write('Наташа: '); readln(n);

write('Оля: '); readln(o);

min := m; {самая маленькая - Маша}

if n < min then min:=n; {самая маленькая - Наташа}

if o < min then min:=o; {самая маленькая - Оля}

write('Самая маленькая из подружек - ');

if min = m then writeln('Маша')

else if min = n then writeln('Наташа')

else writeln('Оля');

end.

Задача 2. Введите вес (в килограммах) трех друзей Сергея, Паши и Максима. Узнайте кто из них самый тяжелый.

program if_2;

uses crt;

var s,p,m,max : real;
{вес может задаваться действительным числом}

begin

writeln('Введите вес трех друзей(кг)');

write('Сергей: '); readln(s);

write('Паша: '); readln(p);

write('Максим: '); readln(m);

max := s; {самый тяжелый - Сергей}

if p > max then max:=p; {самый тяжелый - Паша}

if m > max then max:=m; {самый тяжелый - Максим}

write('Самый тяжелый из друзей - ');

if max = s then writeln('Сергей')

else if max = p then writeln('Паша')

else writeln('Максим');

end.

Задача 3. Введите число N. Проверьте, делится ли это число нацело на число A.

В программе используется операция mod(a,b) (остаток при делении a на b нацело)

program if_3;

uses crt;

var n,a : integer;

begin

writeln('Введите число: ');

readln(n);

writeln('Введите число-делитель: ');

readln(a);

write('Число ',n,' на ',a); {общая часть вывода на экран для двух случаев}

{нет перехода на новую строку}

if n mod a = 0 then writeln(' делится нацело')

else writeln(' не делится нацело');

end.

Задача 4. Введите число. Если введенное число неотрицательное, то найдите квадратный корень из числа, иначе вычислите обратное число.

В программе используется стандартная функция Pascal ABC: Sqrt(x) (возвращает квадратный корень из действительного числа x).

program if_4;

uses crt;

var k,k1 : real;

begin

writeln('Введите число: ');

readln(k);

if k>=0 then begin

k1 := sqrt(k);

writeln('Квадратный корень из числа: ',k1:5:2);

end

else begin

k1 := 1/k;

writeln('Обратное число: ',k1:9:6);

end;

end.

Задача 5. Напишите программу для решения линейного неравенства вида
a*x < b


program if_5;

uses crt;

var a,b,c : real;

begin

writeln('Неравенство вида ax < b');

write('a= '); readln(a);

write('b= '); readln(b);

writeln(a,'x < ',b); {вывод исходного неравенства}

if a <> 0 then

begin

c := b/a;

write('x'); {начинаем вывод решения}

{при делении неравенства на отрицательное число знак неравенства меняется}

if a > 0 then write(' < ') {выводим знак неравенства}

else write(' > ');

writeln(c:5:2); {завершаем вывод решения}

end;

if (a = 0) and (b > 0) then writeln('Любое число является решением неравенства');

if (a = 0) and (b <= 0) then writeln('Неравенство не имеет решений');

end.

Задача 6. Напишите программу для решения линейного неравенства вида
a*x ≥ b


program if_6;

uses crt;

var a,b,c : real;

begin

writeln('Неравенство вида ax >= b');

write('a = '); readln(a);

write('b = '); readln(b);

writeln(a,'x >= ',b); {вывод исходного неравенства}

if a <> 0 then {случай, когда а=0, рассматриваем далее}

begin

c := b/a;

write('x'); {начинаем вывод решения неравенства}

{при делении неравенства на отрицательное число знак неравенства меняется}

if a > 0 then write(' >= ') {выводим знак неравенства}

else write(' <= ');

writeln(c:5:2); {завершаем вывод решения}

end;

if (a = 0) and (b <= 0) then writeln('Любое число является решением неравенства');

if (a = 0) and (b > 0) then writeln('Неравенство не имеет решений');

end.

Задача 7. Определить максимальное число плоских карточек размером axb см, которые можно уложить в один ряд в прямоугольный лоток размером mxn  см параллельно краям лотка.

В программе используется стандартная функция Pascal ABC: Trunc(x) (возвращает целую часть действительного числа х).

program if_7;

uses crt;

var a,b,m,n : real;

kx,ky,k1,k2 : integer;

begin

write('Введите размер карточки (см): ');

readln(a,b);

write('Введите размер лотка (см): ');

readln(m,n);

{первый вариант укладки: сторона а карточки вдоль стороны m лотка}

kx := trunc(m/a); {кол-во карточек в ряду по горизонтали}

ky := trunc(n/b); {кол-во карточек в ряду по вертикали}

k1 := kx*ky; {количество карточек при первом варианте укладки}

writeln('Вариант 1: ',kx,' по горизонтали, ',ky,' по вертикали: ',k1,' карточек');

{второй вариант укладки: сторона b карточки вдоль стороны m лотка}

kx := trunc(m/b); {кол-во карточек в ряду по горизонтали}

ky := trunc(n/a); {кол-во карточек в ряду по вертикали}

k2 := kx*ky; {количество карточек при втором варианте укладки}

writeln('Вариант 2: ',kx,' по горизонтали, ',ky,' по вертикали: ',k2,' карточек');

write('Максимальное количество карточек: ');

if k1 > k2 then writeln(k1)

else writeln(k2);

end.

Задача 8. Напишите программу для решения неравенств вида │x+a│> b (решение неравенства: x < -b - a и x > b - a)

program if_8;

uses crt;

var a,b,c : real;

begin

writeln('Неравенство вида: модуль(x+a)> b');

write('a = '); readln(a);

write('b = '); readln(b);

{вывод исходного неравенства}

if a > 0 then writeln('модуль(x + ',a,')> ',b);

{для a<0 будет выведен знак "-" вместе с числом а}

if a < 0 then writeln('модуль(x ',a,')> ',b;

if a = 0 then writeln('модуль(x)> ',b); {для a=0 число 0 не выводим}

if b <= 0 then writeln('Любое число является решением неравенства')

else writeln('x < ',-b-a,' и x > ',b-a);

end.

Задача 9. Напишите программу для решения неравенств вида │x+a│≤ b (решение неравенства: -b - a ≤ x ≤ b - a)

program if_9;

uses crt;

var a,b,c : real;

begin

writeln('Неравенство вида: модуль(x+a)<= b');

write('a = '); readln(a);

write('b = '); readln(b);

{вывод исходного неравенства}

if a > 0 then writeln('модуль(x + ',a,')<= ',b);

{для a<0 будет выведен знак "-" вместе с числом а}

if a < 0 then writeln('модуль(x ',a,')<= ',b);

if a = 0 then writeln('модуль(x)<= ',b); {для a=0 число 0 не выводим}

if b < 0 then writeln('Неравенство не имеет решений');

if b > 0 then writeln(-b-a,' <= x <= ',b-a);

if b = 0 then writeln('x = ',-a);

end.

Задача 10. Для приведенного квадратного уравнения x2+px+q=0 введите коэффициенты p, q, вычислите дискриминант и, если уравнение имеет корни, выведите их сумму и произведение. Найдите корни и проверьте теорему Виета (по теореме Виета
x
1+x2 = - p, x1*x2 = q).

В программе используются стандартные функции Pascal ABC: Sqr(x) (возвращает квадрат действительного числа x), Sqrt(x) (возвращает квадратный корень из действительного числа x).

program if_10;

uses crt, graphabc;

var p,q,d,x1,x2 : real;

begin

writeln('Приведенное квадратное уравнение x2+px+q=0');

writeln('Введите коэффициенты');

write('p = '); readln(p);

write('q = '); readln(q);

write('x2');

if p < 0 then write(p)

else write('+',p);

if q < 0 then writeln('x',q,'=0')

else writeln('x+',q,'=0');

d := sqr(p)-4*q;

writeln('дискриминант = ',d);

if d < 0 then writeln('Уравнение не имеет корней')

else begin

writeln('x1+x2=',-p);

writeln('x1*x2=',q);

end;

{найдем корни и проверим теорему Виета}

if d >= 0 then begin

x1:=(-p+sqrt(d))/2;

x2:=(-p-sqrt(d))/2;

writeln('значения корней округлены до тысячных');

writeln('x1= ',x1:6:3,' x2= ',x2:6:3);

writeln('x1+x2= ',x1+x2,' x1*x2= ',x1*x2);

end;

end.

Задача 11. Если квадратный трехчлен ax2+bx+c имеет корни, то разложите его на множители по формуле ax2+bx+c=a(x-x1)(x-x2) .

В программе используются стандартные функции Pascal ABC: Sqr(x) (возвращает квадрат действительного числа x), Sqrt(x) (возвращает квадратный корень из действительного числа x), Abs(x) (возвращает модуль действительного числа x).

program if_11;

uses crt, graphabc;

var a,b,c,d,x1,x2 : real;

begin

writeln('Квадратный трехчлен ax2+bx+c=0');

writeln('Введите коэффициенты');

write('a = '); readln(a);

write('b = '); readln(b);

write('c = '); readln(c);

d := sqr(b)-4*a*c; {вычисление дискриминанта}

writeln('Дискриминант = ',d);

if d < 0 then writeln('Квадратный трехчлен не имеет корней');

if d >= 0 then

begin

x1 := (-b+sqrt(d))/(2*a); {вычисление корней уравнения}

x2 := (-b-sqrt(d))/(2*a);

writeln('x1=',x1:4:2,' x2=',x2:4:2);

write(a,'x2'); {начинаем вывод квадратного трехчлена}

if b < 0 then write(b) {если b<0 знак "-" будет выведен с числом b}

else write('+',b);

if c < 0 then write('x',c,' = ') {если c<0 знак "-" будет выведен с числом c}

else write('x+',c,' = ');

write(a,'(x'); {начинаем вывод правой части равенства}

if d > 0 then

begin
{для x1>0 выводим: x-x1}

if x1 > 0 then write('-',x1:4:2,')(x')

{для x1<0 выводим: x+, затем модуль числа x1, чтобы не было: x+-x1}

else write('+',abs(x1):4:2,')(x');

{аналогично как для x1}

if x2 > 0 then write('-',x2:4:2,')')

else write('+',abs(x2):4:2,')');

end;

{аналогично как для x1}

if d = 0 then if x1 > 0 then write('-',x1:4:2,')2')

else write('+',abs(x1):4:2,')2');

end;

writeln;

end.

Задача 12. *Найдите длину отрезка прямой. Постройте изображение отрезка красным цветом, если его длина больше 20 единиц, иначе – зеленым цветом (единицу длины показать 5 пикселями).

В программе подключен модуль GraphABC, используется стандартная функция Pascal ABC: Abs(x) (возвращает модуль действительного числа x), используются процедуры SetPenColor(color) (устанавливает цвет пера, задаваемый параметром color), SetPenWidth(w) (устанавливает ширину пера, равную w пикселям), Line(x1,y1,x2,y2) (рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2)).

program if_12;

uses crt, graphabc;

var a,b : integer;

dl : byte;

begin

writeln('Введите координату начала отрезка: ');

readln(a);

writeln('Введите координату конца отрезка: ');

readln(b);

dl := abs(a-b); {вычисляем длину отрезка}

writeln('длина отрезка: ',dl,' единиц(ы)');

write('длина отрезка ');

if dl > 20 then

begin

writeln('больше 20, цвет красный');

SetPenColor(clred)

end

else

begin

writeln('не больше 20, цвет зеленый');

SetPenColor(clgreen);

end;

writeln('на рисунке одна единица длины показана 5 пикселями');

writeln('длина отрезка ',dl*5,' пикселей');

SetPenWidth(5);

line (20,150,20+dl*5,150);

end.

Задача 13. *Введите длину и ширину прямоугольника и определите, является ли прямоугольник квадратом. Постройте данный прямоугольник (единицу длины показать
5 пикселями).

В программе подключен модуль GraphABC, используются процедуры
SetBrushColor(color)(устанавливает цвет кисти, задаваемый параметром color.),
Rectangle(x1,y1,x2,y2) (рисует прямоугольник, заданный координатами противоположных вершин).

program if_13;

uses crt, graphabc;

var a,b,dl : byte;

begin

writeln('Введите длину прямоугольника: ');

readln(a);

writeln('Введите ширину прямоугольника: ');

readln(b);

if a = b then writeln('данный прямоугольник - квадрат');

SetBrushColor(clsilver);

rectangle(20,100,20+a*5,100+b*5);

end.

Алгоритмы с повторением

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

program cykl_1;

uses crt;

var i,k,b,sum,sball_c : integer; {для значения указанных переменных достаточно 1 байта памяти}

{в этом случае они могут принимать значения от 0 до 255}

sball : real;

begin

writeln('Введите количество учащихся в группе: ');

readln(k);

sum := 0;

writeln('Введите отметки по информатике за четверть');

for i := 1 to k do

begin

write(i,': ');

readln(b);

sum := sum+b;

end;

sball := sum/k;

writeln('Cредний балл группы за четверть: ',sball:5:2);

end.

Задача 2. На уборке картофеля работали N человек. Введите массу картофеля, собранного каждым работающим, и вычислите массу собранного картофеля.

program cykl_2;

uses crt;

var i,k : byte; {для указанных переменных достаточно 1 байта памяти}

{в этом случае они могут принимать значения от 0 до 255}

b,sum : real;

begin

writeln('Введите количество работающих на уборке: ');

readln(k);

sum := 0;

writeln('Введите массу убранного картофеля');

for i := 1 to k do

begin

write(i,': ');

readln(b);

sum := sum+b; {находим массу убранного картофеля}

end;

writeln('Всего убрали ',sum,' кг картофеля');

end.

Задача 3. Ввести натуральное число N (не больше 2147483647). Определить сколько в нем знаков, вычислить сумму цифр числа и определить старшую цифру числа.

Замечание. Можно рассмотреть и другие задачи на выделение цифр числа и работу с ними: вычислить сумму цифр числа, количество цифр числа, вывести цифры числа через пробел, найти произведение цифр числа, определить количество четных (нечетных) цифр, определить количество заданных цифр, количество цифр больше (меньше) заданной цифры, получить число-«перевертыш», найти среднее арифметическое цифр числа и т.д.

program cykl_3;

uses crt;

var n,n1,cif,k,s : integer;

begin

write('Введите число: ');

readln(n);

n1 := n; {запомним число n, изменять будем число n1}

k := 0; s := 0;

while n1 > 0 do

begin

cif := n1 mod 10; {cif - очередная цифра числа}

s := s+cif; {сумма цифр числа}

k := k+1; {количество цифр в числе}

n1 := n1 div 10; {отбросим последнюю цифру}

end;

writeln('Число ',k,'-значное');

writeln('Старшая цифра числа ',n,': ',cif);

writeln('Сумма цифр числа: ',s);

end.

Алгоритмы с повторением и ветвлением

Задача 1. Введите количество отметок по одному из предметов за четверть и сами отметки. Выведите информацию о средней отметке с комментирующим текстом.

В программе используется стандартная функция Pascal ABC: Round(x). (возвращает результат округления действительного числа x до ближайшего целого)

program cykl_if_1;

uses crt;

var i,k,b,sum,sball_c : byte; {для значения переменных достаточно 1 байта памяти}

{в этом случае они могут принимать значения от 0 до 255}

sball : real;

begin

write('Введите количество отметок: ');

readln(k);

sum := 0;

for i := 1 to k do

begin

read(b);

sum := sum+b; {сумма отметок}

end;

sball := sum/k; {средний балл}

writeln('Ваш средний балл: ',sball:5:2);

sball_c := round(sball); {округлим средний бал до целых}

writeln('Округлим: ',sball_c);

if sball_c >= 8 then writeln('Молодец!');

if (sball_c >= 6) and(sball_c <= 7) then writeln('Неплохо');

if (sball_c >= 4) and (sball_c <= 5) then writeln('Надо подтянуться!');

if sball_c <= 3 then writeln('!?!');

end.

Задача 2. N проводников соединены в цепь. Введите тип соединения проводников (последовательный или параллельный) и вычислите сопротивление участка цепи (R=R1+R2+R3+… – для последовательного соединения, 1/R=1/R1+1/R2+1/R3+… – для параллельного соединения проводников)

program cykl_if_2;

uses crt;

var r,rc,rab : real;

i,n,sp : byte;

begin

write('Введите количество проводников: ');

readln(n);

writeln('Выберите соединение проводников:');

writeln(' последовательное - 1');

writeln(' параллельное - 2');

readln(sp);

writeln('Введите значение сопротивления проводников(Ом)');

rc := 0; rab := 0; {начальные значения равны 0}

for i := 1 to n do

begin

write('R',i,'= ');

readln(r); {вводим сопротивление каждого проводника}

{находим сопротивление участка цепи}

if sp = 1 then rc := rc+r {для последовательного соединения: rc}

else rab := rab+1/r; {для параллельного соединения

находим промежуточное значение rab}

end;

if sp = 2 then rc := 1/rab;{для параллельного соединения находим сопротивление rc}

writeln('Сопротивлние участка цепи равно ',rc:5:3,' Ом');

end.

Задача 3. N проводников соединены в цепь. Если проводники соединены последовательно, вычислите напряжение участка цепи, если – параллельно, то вычислите ток участка цепи (для последовательного соединения: U=U1+U2+U3+… , для параллельного соединения: I=I1+I2+I3+...)

program cykl_if_3;

uses crt;

var u,uc,i,ic : real;

k,n,sp : byte;

begin

write('Введите количество проводников: ');

readln(n);

writeln('Выберите соединение проводников:');

writeln(' последовательное - 1');

writeln(' параллельное - 2');

readln(sp);

if sp = 1 then {последовательное соединение}

begin

writeln('Введите значение напряжения проводников(В)');

uc := 0; {начальное значение равно 0}

for k := 1 to n do

begin

write('U',k,'= '); readln(u); {вводим напряжение каждого проводника}

uc := uc+u; {находим напряжение участка цепи}

end;

writeln('Напряжение участка цепи равно ',uc:5:3,' Вольт');

end;

if sp = 2 then {параллельное соединение}

begin

writeln('Введите значение силы тока в проводниках (А)');

ic := 0; {начальное значение равно 0}

for k := 1 to n do

begin

write('I',k,'= '); readln(i);{вводим значение силы тока в каждом проводнике}

ic := ic+i; {находим силу тока участка цепи}

end;

writeln('Сила тока участка цепи равна ',ic:5:3,' Ампер');

end;

end.

Aдукацыйны партал www.adu.by