Напишите программу для решения следующей задачи. Камера наблюдения регистрирует в автоматическом режиме скорость проезжающих мимо неё автомобилей, округляя значения скорости до целых чисел. Необходимо определить минимальную зарегистрированную скорость автомобиля. Если скорость хотя бы одного автомобиля была больше 80 км/ч, выведите «YES», иначе выведите «NO».
Программа получает на вход число проехавших автомобилей N (1 =< N =< 30), затем указываются их скорости. Значение скорости не может быть меньше 1 и больше 300.Программа должна сначала вывести минимальную скорость, затем YES или NO.
Пример работы программы:
Входные данные | Выходные данные |
4 74 69 63 96 |
63 YES |
Что необходимо знать для решения задания 20.2 ОГЭ по информатике 9 класс?
- Типы переменных.
- Оператор цикла FOR
- Условный оператор IF
Пример решения верного решения на 2 балла.
pascal Пустая ветка then в IF — как исправить код, пример программы Паскаль
var
a, b, c, min: integer; //Объявляем переменные целочисленного типа
d: boolean; //объявляем переменную логического типа. Для определения верности условия (скорость больше 80 км/ч)
begin
//******инициализируем переменные*******
min := 300; //переменная для нахождения минимальной скорости. По условию задачи, скорость не может быть более 300
a := 0; //обнуляем переменную
c := 0; //обнуляем переменную
d := false; //задаём исходное логическое значение 0
readln(a); //чтение с клавиатуры числа количества машин
for b := 1 to a do //задаём цикл от 1 до a количества машин
begin
readln(c); //считываем значение скорости
if c min := c; //Каждый раз присваиваем значение переменной min наименьшую введённую скорость
if c > 80 then //производим проверку была ли скорость больше 80
d := true; //если была скорость более 80, то переменная d меняет логическое значение на true (1)
end;
writeln(min); //Выводим минимальную скорость
if d = true then //Проверяем значение логической переменной
writeln(‘YES’) //Выводим YES, если логическая переменная = true
else writeln(‘NO’); //выводим NO, если логическая переменная не равна true
readln; //Чтобы программа не закрывалась
Скачать исходник программы задание 20.2 ОГЭ:
20.2.pas
Программу можно написать и проще.
Пример решения задания в упрощённой форме.
var
a, b, c,d, min: integer;
begin
min := 300;
readln(a);
for b := 1 to a do
begin
readln(c);
if c min := c;
if c > 80 then
d := 1;
end;
writeln(min);
if d = 1 then
writeln(‘YES’)
else writeln(‘NO’);
readln;
В чём разница решений?
Pascal. Примеры программ
Во втором, упрощённом варианте, не инициализированы переменные. Это не обязательно в PascalABC.Net, так как переменные изначально имеют значения «0». Но делать это желательно, так как это считается правилом хорошего тона. Плюс ко всему в других версиях интерпретатора Pascal без инициализации код работать не будет.
Так же, во второй версии программы не использован логический тип переменных. Использовать его не обязательно. Тут решение на усмотрение составителя программы.
Важно!
У проверяющих совсем другие входные данные для проверки вашей программы (не как приведены в задании), поэтому не старайтесь написать программу под конкретные числа.
Источник: www.losev-it.ru
Задача №25. Написание фрагмента программы.
В задачах этого типа встречаются следующие основные алгоритмические (программные) блоки:
Перебор элементов массива
Для одномерного массива запускается цикл по всем его элементам.
Для двумерного массива – цикл в цикле по строкам и столбцам.
Для n-мерного массива – n вложенных циклов.
Перебор элементов массива, удовлетворяющих условию
Для перебора элементов массива, удовлетворяющих условию (например, только четных), в начале цикла устанавливается условие. Тогда все дальнейшие действия выполняются только при выполнении этого условия. Если же условие не выполняется, цикл переходит к следующему элементу массива.
Обмен местами элементов массива
Производится аналогично обмену значениями переменных. Если нужно поменять местами n-й и k-й элементы массива, то n-й элемент сохраняется в буферную переменную, затем значение k-го элемента копируется в n-й, а значение буферной переменной копируется в k-й элемент.
Поиск максимального (минимального) элемента массива
При поиске максимального элемента массива за предполагаемый максимум берется первый элемент массива или число, заведомо меньшее любого элемента массива. Затем каждый следующий элемент массива сравнивается с предполагаемым максимумом, и если значение этого элемента больше, то оно становится новым предполагаемым максимумом.
Аналогично, при поиске минимального элемента массива за предполагаемый минимум берется первый элемент массива или число, заведомо большее любого элемента массива. Затем каждый следующий элемент массива сравнивается с предполагаемым минимумом, и если значение этого элемента меньше, то оно становится новым предполагаемым минимумом.
Вычисление суммы элементов массива
Сначала переменной, выделенной под хранение суммы, присваивается значение 0. Затем, при последовательном переборе элементов массива, значение суммы складывается со значением текущего элемента массива и становится новым значением суммы.
Вычисление произведения элементов массива
Сначала переменной, выделенной под хранение произведения, присваивается значение 1. Затем, при последовательном переборе элементов массива, значение произведения умножается на значение текущего элемента массива и становится новым значением произведения.
Вычисление среднего значения
При вычислении среднего значения выполняется вычисление суммы, а затем сумма делится на количество элементов массива.
Необходимо учитывать, что если в используемом языке программирования есть готовые функции для обработки массивов, то их использовать при решении задачи нельзя.
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от –10 000 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых хотя бы одно число делится на 3. В данной задаче под парой подразумевается два подряд идущих элемента массива. Например, для массива из пяти элементов: 6; 2; 9; –3; 6 – ответ: 4.
Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования и естественного языка. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
Бейсик
Python
DIM A (1 TO N) AS INTEGER
DIM I AS INTEGER,
J AS INTEGER,
K AS INTEGER
FOR I = 1 TO N
INPUT A(I)
NEXT I
# целочисленные переменные j и k
for i in range(0, n):
Паскаль
Алгоритмический язык
var
a: array [1..N] of integer;
i, j, k: integer;
begin
for i := 1 to N do
readln(a[i]);
нач
цел N = 20
целтаб a[1:N]
цел i, j, k
нц для i от 1 до N
ввод a[i]
кц
Си
Естественный язык
int main()
int a[N];
int i, j, k;
for (i = 0; i < N; i++)
return 0;
Объявляем массив A из 20 элементов.
Объявляем целочисленные переменные I, J, K.
В цикле от 1 до 20 вводим элементы массива A с 1-го по 20-й.
В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
Пример программы на языке Паскаль
for i := 1 to N-1 do
if (a[i] mod 3=0) or (a[i+1] mod 3=0) then
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Элемент массива называется хорошим, если это двузначное число, причём цифра в разряде десятков больше, чем цифра в разряде единиц. Опишите на одном из языков программирования алгоритм, позволяющий найти и вывести сумму всех хороших элементов массива.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Бэйсик
Паскаль
DIM A(N) AS INTEGER
DIM I, J, S AS INTEGER
FOR I = 1 TO N
INPUT A(I)
NEXT I
var
a: array [1..N] of integer;
i, j, s: integer;
begin
for i:=l to N do
readln(a[i]) ;
Си
Алгоритмический язык
void main()
int a[N];
int i, j, s;
for (i=0; i < N; i++)
нач
цел N=30
целтаб а[1:N]
цел i, j, s
нц для i от 1 до N
ввод а[i]
кц
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.4) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Пример программы на языке Паскаль
for i:=1 to N do begin
((a[i] div 10) > (a[i] mod 10) ) then s:=s+a[i];
Ты нашел то, что искал? Поделись с друзьями!
Благодарим за то, что пользуйтесь нашими публикациями. Информация на странице «Задача №25. Написание фрагмента программы.» подготовлена нашими редакторами специально, чтобы помочь вам в освоении предмета и подготовке к экзаменам. Чтобы успешно сдать нужные и поступить в высшее учебное заведение или колледж нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий. Также вы можете воспользоваться другими материалами из данного раздела.
Публикация обновлена: 07.06.2023
Источник: ege-study.ru
Пример правильной и эффективной программы на языке Паскаль: Var с: char
DIM s AS STRING DIM si AS STRING, s2 AS STRING mini = 3001 cntl = 0 INPUT n FOR j = 1 TO n LINE INPUT s i = 0 DO i = i. + 1 c$ = MID$(s, i, 1) LOOP WHILE c$ <>,,» DO i = i + 1 c$ = MID$(s, i, 1) LOOP WHILE c$ O,,» DO i = i + 1 c$ = MID$ (s, i, 1). LOOP WHILE c$ <>»” m = VAL(MID$(s, i+ 1, 2)) b = VAL(MID$(s, i + 4)) k = i — 1 s = LEFT$(s, k) IF m = 92 THEN IF mini > b THEN min2 = mini: cnt2 = cntl: s2 = si mini = b: cntl = 1: si = s ELSE IF mini = b THEN cntl = cntl + 1 ELSE IF min2 > b THEN min2 = b: cnt2 = 1: s2 = s ELSE IF min2 = b THEN cnt2 = cnt2 + 1 ENDIF ENDIF ENDIF ENDIF NEXT j
THEN PRINT s2 ELSE PRINT cnt2
THEN PRINT si ELSE PRINT cntl
Произведение двух чисел делится на 22, если:
— один из сомножителей делится на 22 (второй может быть любым) либо
— ни один из сомножителей не делится на 22, причём один из сомножителей делится на 2, а другой — на И.
Поэтому программа, вычисляющая кодовое число, может работать так.
Программа читает все входные данные один раз, не запоминая все данные в массиве. Программа для прочитанного фрагмента входной последовательности хранит значения четырёх величин:
М2 — самое большое чётное число, не кратное 11;
Mll — самое большое число, кратное И, но не кратное 2;
М22 — самое большое число, кратное 22;
MAX — самое большое число среди всех элементов последовательности, отличное от М22 (если число М22 встретилось более одного раза и оно же является максимальным, то MAX = М22).
После того как все данные прочитаны, искомое контрольное значение вычисляется как максимум из произведений М22*MAXи M2*M11.
Ниже приведён пример программы на языке Паскаль, которая реализует описанный алгоритм.
Кроме того, приведён пример программы на языке Бейсик, которая правильно решает задачу, но использует алгоритм, немного отличающийся от описанного выше. Возможны и другие правильные алгоритмы.
Допускаются решения, записанные на других языках программирования_____________________
Пример правильной и эффективной программы на языке Паскаль:__________________________
Var M2,M11,M22,R, MAX, dat, res, i,N: Iongint; begin
MAX := O; readln(N); for i := 1 to N do begin readln(dat);
If ((dat mod 2) = O) and ((dat mod 11) > O)and (dat > М2) then М2 := dat;
If ((dat mod 11) = O) and ((dat mod 2) > O) and (dat > Mil) then Mil := dat;
If (dat mod 22 = O) and (dat > M22) then begin
If M22 > MAX then MAX := M22;
М22 := dat end else if dat > MAX then MAX := dat; end; readln(R); if (M2*M11 < M22*MAX) then res := M22*MAX
Writein (‘Вычисленное контрольное значение: ’,res);
If R = res then writein (’Контроль пройден’) else writein (’Контроль не пройден’);
MAX — О INPUT N FOR I = 1 ТО N INPUT DAT IF DAT MOD 2=0 AND DAT > М2 THEN М2 = DAT ELSE
IF DAT MOD 11 = 0 AND DAT > Ml THEN Mil = DAT END IF END IF
IF DAT MOD 22 = 0 AND DAT > M22 THEN IF M22 > MAX THEN
MAX = M22 END IF М22 = DAT ELSE IF DAT > MAX THEN MAX = DAT END IF END IF
PRINT ’’Вычисленное контрольное значение:”; RES IF RES = R THEN
PRINT ’’Контроль пройден”
PRINT ’’Контроль не пройден»
Для построения программы, эффективной по времени, можно определить для каждого элемента входных данных максимальное значение от начала данных до этого элемента включительно. Затем нужно умножать каждый элемент, начиная с восьмого, на значение этого максимума, взятого на семь элементов раньше, и выбрать наибольшее из этих произведений. Предложенный алгоритм реализован в следующей программе на алгоритмическом языке_____________________________________________________________
Программа 1. Пример правильной программы на алгоритмическом языке.
Программа эффективна по времени, но неэффективна по памяти алг нач
ЦелS = .7 I требуемое расстояние между показаниями ЦелN ВводN ВещтабA[l:N] | все показания прибора ЦелI Нц дляI От1 ДоN ввод a[i] Кц вещтаб макс[1:Ы] ∣ Maκc[i] — максимум из I первых i показаний макс[1] := а[1] Нц дляI От2 ДоN Maκc[i] := max(макс[i-1], a[i]) Кц вещ м I максимальное значение произведения
М О Нц дляI ОтS + 1 ДоN м := max(м, a[i] * Maκc[i — s]) Кц вывод м кон
Можно вместо троекратного обращения к каждому элементу делать все необходимые операции с ним сразу после чтения. В этом случае нужен только массив для хранения максимумов, а сами элементы можно не хранить. Этот путь реализован в следующей программе
Программа 2. Пример правильной программы на алгоритмическом языке. Программа эффективна по времени, но неэффективна по памяти алг нач
ЦелS = 7 I требуемое расстояние между показаниями ЦелN ВводN Вещ а I очередное показание прибора Вещтаб макс[1:М] ∣ Maκc[i] — максимум из
I первых i показаний ЦелI
I ввод первых показаний, допустимых пар пока нет Ввод макс[1] Нц дляI От2 ДоS Ввод а Maκc[i] := max(a, Maκc[i — 1]) Кц
I ввод остальных показаний, проверка пар
Вещ м I максимальное значение произведения
М : = О нц ДляI ОтS + 1 ДоN Ввод а Maκc[i] := max(a, Maκc[i — 1]) м :- max(м, а ★Maκc[i — s]) Кц вывод м Кон
Обе приведённые программы эффективны по времени, но неэффективны по памяти: используемая память пропорциональна объёму исходных данных. Такие (и аналогичные по сути) программы оцениваются не выше 3 баллов.
Чтобы построить программу, эффективную по памяти, заметим, что, поскольку при обработке очередного элемента входных данных используется максимум, найденный на семь элементов раньше, достаточно хранить только семь последних максимумов. Весь алгоритм содержательно остаётся тем же, но нужно аккуратно организовать работу с массивом максимумов из семи элементов. Ниже приводится пример программы, реализующей эту идею*
Программа 3. Пример правильной программы на алгоритмическом языке. Программа эффективна и по времени, и по памяти алг нач
ЦелS = 7 I требуемое расстояние между показаниями ЦелN ВводN Вещ а I очередное показание прибора Вещтаб макс[O :s — 1] !текущие максимумы
I последних 7 элементов ЦелI Ввод макс[1] Нц дляI От2 ДоS Ввод а Maκc[mod(i, s)] := max(a, Maκc[i — 1]) Кц вещ м I максимальное значение произведения м : = О
Источник: apple-tour.ru