Другие статьи из рубрики «ОГЭ и ЕГЭ»

Условие задачи

Целочисленный массив из $28$ элементов. Элементы массива могут принимать значения от $0$ до $100$ – процент выполнения учащимися домашних заданий по информатике. Для получения положительной оценки за год требовалось набрать не менее $40$ баллов.

Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Паскаль

const
    N = 28;
var
    a: array[1 .. N] of integer;
    i, j, min: integer;
begin
    for i := 1 to N do
        readln(a[i]);
    ...
end.

СИ

#include <stdio.h>
#define N 28
void main(void)
{
    int a[N};
    int i, j, min;
    for(i = 0; i < N; i++)
        scanf("%d", &a[i]);
    ...
}

Естественный язык

Объявляем массив $А$ из $28$ элементов.
Объявляем целочисленные переменные $I$, $J$, $MIN$.

В цикле от $1$ до $28$ вводим элементы массива $А$ с $1$-го по $28$-ой.

....

 

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

Решение

$\rightarrow$ Выбор базового языка программирования

Среди четырех предложенных языков (Turbo Pascal, Basic, Си, Естественный язык) лично мне импонирует язык программирования высокого уровня - Turbo Pascal.

Это связано с тем, что язык Turbo Pascal имеет:

  • понятную лексику;

  • хорошо продуманную внутреннюю структуру программы (группировка по разделам);

  • поддержку большого количества стандартных типов данных.

$\rightarrow$ Алгоритмизация поставленной задачи

Для примера рассмотрим одномерный целочисленный статический массив, состоящий из $10$ элементов, являющихся целыми числами из отрезка $[0\ ...\ 100]$.

73 20 83 16 7 93 41 3 24 46 значения элементов
1 2 3 4 5 6 7 8 9 10 индексы элементов

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

73 20 83 16 7 93 41 3 24 46 значения элементов
1 2 3 4 5 6 7 8 9 10 индексы элементов

Значения всех желтых" элементов не меньше $40$. Наша задача найти минимальный из этих "желтых" элементов. Как видно, число $41$ располагается ближе остальных к числу $40$, то есть элемент массива со значением $41$ является наименьшим из подходящих элементов.

enlightened Еще стоит обратить внимание на такой нюанс. До начала обработки заданного одномерного массива у нас нет в наличии минимального балла, который больше $40$, так как обработка еще не начиналась. В подобных ситуациях можно принять за первоначальное минимальное такое значение, которое заведомо больше любого элемента исходного массива. В условии говорится, что значения элементов лежат на отрезке $[0\ ...\ 100]$, следовательно, за первоначальное минимальное можно принять величину, равную $101$.

Мы не можем принять значение $1$-ого элемента массива в качестве минимального балла, так как нет гарантии, что этот $1$-ый элемент будет не меньше $40$.

$\rightarrow$ Что нужно знать, чтобы успешно решить/закодировать поставленную задачу

  1. Цикл со счетчиком for-to-do.

  2. Операции отношения (>, <, >=, <=, =).

  3. Анатомию одномерных статических массивов. Как минимум различать значения элементов и их индексы.

  4. Алгоритм поиска минимального/максимального элемента в массиве.

$\rightarrow$ Реализация задачи на языке программирования Turbo Pascal с подробными комментариями

uses
{подключаем модуль crt – console run time. Данный модуль содержит специализированные подпрограммы для обработки текста, звука, клавиатурных событий}
    crt;
const
{нетипизированная константа, отвечающая за количество учащихся}
    N = 28;
var
{одномерный массив, хранящий баллы учащихся}
    a : array[1..N] of integer;
{счетчики циклов}
    i, j, min : integer;
begin
{очистка дисплея монитора от прошлых выводов}
    clrscr;
{заполнение вводом с клавиатуры значения баллов 28 учащихся}
    for i := 1 to N do
        readln(a[i]);
{предполагаем, что минимальное значение больше максимально возможного на 1}
    min := 101;
{циклически просматриваем все баллы, полученные учащимися}
   for i := 1 to N do
{если текущий балл не меньше 40 и одновременно с этим является меньше минимального среди просмотренных баллов, то запоминаем текущее значение}
         if((a[i] >= 40) and (a[i] < min)) then
         min := a[i];
    writeln;
{вывод результат на дисплей монитора}
    writeln('Минимальная оценка из положительных: ', min);
{имитация задержки программы до нажатия любой клавиши}
    readkey;
end.


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

  • Звоните по номеру телефона: $8(926)\ 610 - 61 - 95$ или

  • пишите на электронный адрес proglabs@mail.ru

 
 
 
 
 
Авторизация на сайте
 
 
 
Обнаружили
ошибку на сайте?
Занятия по информатике