Размер шрифта: A AA Изображения Выключить Включить Цвет сайта Ц Ц Ц Х
Бесплатный конструктор сайтовuCoz
Четверг, 17.07.2025, 05:35
Приветствую Вас Гость | RSS

Сайт учителя информатики  и ИКТ Шинкаренко Евгения Александровича

Реклама
Оцените сайт
Оцените мой сайт
Всего ответов: 837
Программирование
Какой язык программирования выбрать для подготовки к ЕГЭ
Всего ответов: 804

Решение задачи №1.

Задача №1.

На автозаправочных станциях (АЗС) продается бензин с маркировкой 92, 95 и 98. В городе N был проведен мониторинг цены бензина на различных АЗС. Напиши­те эффективную по времени работы и по используемой памяти программу, которая будет определять для каждого вида бензина, сколько АЗС продают его дешевле всего. На вход программе в первой строке подается число АЗС, участвующих в мони­торинге стоимости бензина. В каждой из последующих N строк находится информа­ция в формате:

<Компания> <Улица> <Марка> <Цена>

где

<Компания> — строка, состоящая не более чем из 20 символов без пробелов, <Улица> — строка, состоящая не более чем из 20 символов без пробелов, <Марка> — одно из чисел 92, 95 или 98,

<Цена> — целое число в диапазоне от 1000 до 3000, обозначающее стоимость одного литра бензина в копейках.

<Компания> и <Улица>, <Улица> и <Марка>, <Марка> и <Цена> разделены ровно одним пробелом.

Пример входной строки: Синойл Цветочная 95 2250

Программа должна выводить через пробел три числа — количество АЗС, прода­ющих дешевле всего 92-й, 95-й и 98-й бензин соответственно. Если бензин какой-то марки нигде не продавался, то следует вывести 0.

Пример выходных данных: 12 1 0

Решение задачи №1
var
min: array[92..98]of integer;    {задаем массив, в котором будет храниться минимальное значение цены марки бензина}
azs: array[92..98]of integer;    {задаем массив, в котором будет храниться количество АЗС, продающих бензин по минимальной цене}
i,n,m,cen:integer;   {задаем переменные: i - переменная счетчик, n - количество АЗС, участвующих в мониторинге, m - марка бензина, cen - цена бензина}
str:char;   {символьная переменная для чтения названия компании и улицы}
begin     
for i:=92 to 98 do  {зададим массивам начальные значения}
begin
min[ i ]:=3001;   {массиву минимальных значений (min) присвоим максимальное значение (выходящее из рамков задачи) равное 3001}
azs[ i ]:=0;        {массиву количества АЗС (azs) присвоим минимальное значение (0)}
end;
readln(n);          {считываем количество АЗС, участвующих в мониторинге}
for i:=1 to n do begin  {задаем цикл c постусловием в котором будем считывать значения введенные с клавиатуры}
repeat          {для того чтобы считать символы названия компании АЗС запускаем цикл, который считывает каждый символ до пробела}
read(str);      {считываем символы до пробела}
until str=' ';   {проверяем условие str=' ' (является ли символ пробелом), если символ пробел выходим из цикла (прекращаем считывание названия компании}
repeat           {задаем цикл для считывания названии улицы аналогично предыдущему циклы}
read(str);
until str=' ';
readln(m,cen); {считываем марку бензина (m) и цену бензина (n)}
if min[m]>cen then  {проверяем меньше ли цена бензина значения массива минимума (min), при первом проходе цикла считывания данных с клавиатуры данное условие будет выполняться, так как изначально значение массива минимума равно 3001, что больше условии задачи (диапазон цен от 1000 до 3000)}
begin   {если цена бензина меньше, то....}
min[m]:=cen;   {массив минимальных значений принимает значение данной цены}
azs[m]:=1;      {а массив количества АЗС с минимальной ценой бензина принимает значение 1}
end        
else     {если цена бензина больше либо равна значению массива минимальной цены, то...} 
if min[m]=cen then   {проверяем равна ли цена значению массива минимальной цены}
azs[m]:=azs[m]+1;  {если есть равенство, тогда значение массива количества АЗС с минимальной ценой увеличиваем на 1}
end;
write('Результат: '); 
writeln(azs[92],' ',azs[95],' ',azs[98]); {выводим результаты, разделяя их пробелами}
end.



Алгоритм решения задачи:
  • Считать вводимые с клавиатуры значения марки бензина и его цены (переменные m и cen).
  • Сравнить значение массива минимальной цены (min), значение которого в начале программы равно 3001(заведомо больше минимально допустимой в задаче цены) c ценой бензина (cen), в случае если цена ниже массива минимума, тогда значение массива минимума принимает значение цены, а значение массива количества (azs) принимает значение единицы.
  • Если значение массива минимальной цены (min) больше или равно значению цены (cen), то проверяем равенство значений цены и массива минимума.
  • Если цена бензина равна значению массива минимума, тогда значение массива количества АЗС с минимальной ценой увеличивается на единицу.
Обратите внимание, что для считывания символов названия АЗС и улицы используем одну символьную переменную (str), которая по символу считывает название компании, находит пробел. Затем заново по символу считывает название улицы до пробела, и далее в программе не используется. Символьная переменная, так сказать, перемещает курсор считывания до интересующих нас данных (марки и цены бензина).

Возврат к списку задач.
Реклама
Календарь
«  Июль 2025  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Счетчик яндекс
Яндекс.Метрика