Задание 4 номер 684 информатика

валера8501 / 20 февр. 2015 г., 16:15:31

Задания C4 по информатике
1. Дан список результатов сдачи экзамена учащимися школ некоторого района, с
указанием фамилии и имени учащегося, номера школы и итогового балла.
Напишите эффективную по времени работы и по используемой памяти
программу (укажите используемую версию языка программирования, например,
Borland Pascal 7.0), которая определяет номера школ, имеющих наибольший
средний балл, показанный выпускниками данной школы на экзамене. На вход
программе в первой сроке подается количество учащихся во всех школах района
N. В каждой из последующих N строк находится информация в следующем
формате: <Фамилия> <Имя> <Номер школы> <Балл>
где <Фамилия> – строка, состоящая не более, чем из 20 символов без
пробелов,
<Имя> – строка, состоящая не более, чем из 20 символов без пробелов,
<Номер школы> – число от 1 до 99,
<Балл> — число от 0 до 100.
Порядок следования строк – произвольный.
Пример входных данных:
6
Иванов Сергей 7 70
Сергеев Петр 3 65
Петров Кирилл 7 68
Кириллов Егор 3 75
Егоров Николай 7 71
Николаев Иван 19 70
Программа должна вывести номера школ, имеющих наибольший
средний балл, показанный на экзамене выпускниками этой школы.
Пример вывода для приведенного выше примера ввода:
3
19
При выполнении задания следует учитывать, что значение N может
быть велико (до 10 000).
Содержание верного ответа и указания по оцениванию
(допускаются иные формулировки ответа, не искажающие его
смысла)
Создадим два массива с индексами от 1 до 99, соответствующих номерам школ и
будем хранить в этих массивах количество выпускников из этой школы, сдававших
экзамен и суммарный балл выпускников этой школы. Программа читает все
входные данные один раз. После считывания фамилии, имени, номера школы и
балла считанное значение прибавляется к суммарному баллу для данной школы, а
количество выпускников из этой школы, сдававших экзамен, увеличиваем на 1.

После окончания считывания данных проходим циклом от 1 до 99 по всем школам и
определяем максимальный средний балл по всем школам. Затем во втором цикле
выводим номера школ, средний балл в которых равен максимальному. Ниже
приведены примеры решения задания на языках Паскаль и C++. Допускаются
решения, записанные на других языках программирования. При оценивании
решений на других языках программирования необходимо учитывать особенности
этих языков программирования. Решение на языке Паскаль
var
SchoolSum, SchoolCount: array[1..99] of integer;
i, N, School, Ball, MaxI: integer;
Max: extended;
c: char;
begin
for i:=1 to 99 do
begin
SchoolSum[i] := 0;
SchoolCount[i] := 0
end;
Readln(N);
for i:=1 to N do
begin
repeat
Read(c)
until c=’ ‘;
repeat
Read(c)
until c=’ ‘;
Readln(School, Ball);
SchoolSum[School] := SchoolSum[School] + Ball;
SchoolCount[School] := SchoolCount[School] + 1;
end;
Max:=-1;
for i:=1 to 99 do
if (SchoolCount[i] > 0) and (SchoolSum[i] / SchoolCount[i]
> Max)
then
begin
Max := SchoolSum[i] / SchoolCount[i];
MaxI := i
end;
for i:=1 to 99 do
if (SchoolCount[i]>0) and (SchoolSum[i]*SchoolCount[MaxI]=
SchoolSum[MaxI]*SchoolCount[i])
then

WriteLn(i)
end.
Решение на языке C++
#include<iostream>
#include<string>
using namespace std;
int main()
{
int SchoolSum[100];
int SchoolCount[100];
int i, N, School, Ball, MaxI;
double Max;
string Name;
for (i = 1; i <= 99; ++i)
SchoolSum[i] = SchoolCount[i] = 0;
cin >> N;
for (i = 0; i < N; ++i)
{
cin >> Name >> Name >> School >> Ball;
SchoolSum[School] += Ball;
SchoolCount[School]++;
}
Max=-1;
for(i=1;i<=99;++i)
if (SchoolCount[i]>0 && (double)SchoolSum[i]/SchoolCount
[i]>Max)
{
Max=(double)SchoolSum[i]/SchoolCount[i];
MaxI=i;
}
for(i=1;i<=99;++i)
if (SchoolCount[i]>0 && SchoolSum[i]*SchoolCount[MaxI]=
SchoolSum[MaxI]*SchoolCount[i])
cout << i << endl;
return 0;
}

Указания по оцениванию Балл
Программа работает верно для любых входных данных
произвольного размера и находит ответ, не сохраняя входные данные
в массиве, размер которого соответствует числу N (количество
человек в списке). Программа просматривает входные данные один
раз, сохраняя только информацию о cуммарном балле и количестве
выпускников в каждой школе. Допускается наличие в тексте
программы одной синтаксической ошибки: пропущен или неверно
указан знак пунктуации, неверно написано или пропущено
зарезервированное слово языка программирования, не описана или
неверно описана переменная, применяется операция, недопустимая
для соответствующего типа данных (если одна и та же ошибка
встречается несколько раз, то это считается за одну ошибку).
4
Программа работает верно, но входные данные запоминаются в
массиве, размер которого не меньше N или входные данные
считываются несколько раз. Допускается наличие от одной до трех
синтаксических ошибок. Возможно, в принципиально верно
организованном вводе данных есть одна ошибка. Три балла также
выставляется, если в эффективной программе, удовлетворяющей
критериям выставления 4 баллов, есть одна алгоритмическая ошибка
(например, отсутствует вывод результата при правильном его
нахождении).
3
Программа работает в целом верно, эффективно или нет, но, в
реализации алгоритма содержатся до двух ошибок (неверная
инициализация переменных, в частности значения максимума, выход
за границу массива, перевод символов в числа, используется знак “<”
вместо “<=”, “or” вместо “and” и т.п.). Возможно, некорректно
организовано считывание входных данных. Допускается наличие от
одной до пяти синтаксических ошибок, описанных выше.
2
Программа, возможно, неверно работает при некоторых входных
данных, например, выдает правильный ответ только в том случае,
если школа с максимальным средним баллом только одна. Возможно,
неверно организовано считывание данных и отсутствует вывод
результата. Допускается до 4 различных ошибок в реализации
алгоритма, в том числе описанных в критериях присвоения двух
баллов. Допускается наличие от одной до семи синтаксических
ошибок, описанных выше.
1
Задание не выполнено или выполнено неверно 0

2. Дан список результатов сдачи экзамена учащимися школ некоторого района, с
указанием фамилии и имени учащегося, номера школы и итогового балла.
Напишите эффективную по времени работы и по используемой памяти
программу (укажите используемую версию языка программирования, например,
Borland Pascal 7.0), которая определяет номера школ, имеющих наименьший
средний балл, показанный выпускниками данной школы на экзамене. На вход
программе в первой сроке подается количество учащихся во всех школах района
N. В каждой из последующих N строк находится информация в следующем
формате:
<Фамилия> <Имя> <Номер школы> <Балл>
где <Фамилия> – строка, состоящая не более, чем из 20 символов без
пробелов,
<Имя> – строка, состоящая не более, чем из 20 символов без
пробелов,
<Номер школы> – число от 1 до 99,
<Балл> — число от 0 до 100.
Порядок следования строк – произвольный.
Пример входных данных:
6
Иванов Сергей 7 70
Сергеев Петр 3 68
Петров Кирилл 7 75
Кириллов Егор 3 72
Егоров Николай 7 72
Николаев Иван 19 70
Программа должна вывести номера школ, имеющих наименьший
средний балл, показанный на экзамене выпускниками этой школы.
Пример вывода для приведенного выше примера ввода:
3 19
При выполнении задания следует учитывать, что значение N может
быть велико (до 10 000).
Содержание верного ответа и указания по оцениванию
(допускаются иные формулировки ответа, не искажающие его
смысла)
Создадим два массива с индексами от 1 до 99, соответствующих номерам школ и
будем хранить в этих массивах количество выпускников из этой школы, сдававших
экзамен и суммарный балл выпускников этой школы. Программа читает все
входные данные один раз. После считывания фамилии, имени, номера школы и
балла считанное значение прибавляется к суммарному баллу для данной школы, а
количество выпускников из этой школы, сдававших экзамен, увеличиваем на 1.
После окончания считывания данных проходим циклом от 1 до 99 по всем школам и
определяем минимальный средний балл по всем школам. Затем во втором цикле 

выводим номера школ, средний балл в которых равен минимальному. Ниже
приведены примеры решения задания на языках Паскаль и C++. Допускаются
решения, записанные на других языках программирования. При оценивании
решений на других языках программирования необходимо учитывать особенности
этих языков программирования. Решение на языке Паскаль
var
SchoolSum, SchoolCount: array[1..99] of integer;
i, N, School, Ball, MinI: integer;
Min: extended;
c: char;
begin
for i:=1 to 99 do
begin
SchoolSum[i] := 0;
SchoolCount[i] := 0
end;
Readln(N);
for i:=1 to N do
begin
repeat
Read(c)
until c=’ ‘;
repeat
Read(c)
until c=’ ‘;
Readln(School, Ball);
SchoolSum[School] := SchoolSum[School] + Ball;
SchoolCount[School] := SchoolCount[School] + 1;
end;
Min:=101;
for i:=1 to 99 do
if (SchoolCount[i]>0) and (SchoolSum[i] / SchoolCount[i] <
Min)
then
begin
Min := SchoolSum[i] / SchoolCount[i];
MinI := i
end;
for i:=1 to 99 do
if (SchoolCount[i]>0) and (SchoolSum[i]*SchoolCount[MinI]=
SchoolSum[MinI]*SchoolCount[i])
then
WriteLn(i)
end.

Решение на языке C++
#include<iostream>
#include<string>
using namespace std;
int main()
{
int SchoolSum[100];
int SchoolCount[100];
int i, N, School, Ball, MinI;
double Min;
string Name;
for (i = 1; i <= 99; ++i)
SchoolSum[i] = SchoolCount[i] = 0;
cin >> N;
for (i = 0; i < N; ++i)
{
cin >> Name >> Name >> School >> Ball;
SchoolSum[School] += Ball;
SchoolCount[School]++;
}
Min=101;
for(i=1;i<=99;++i)
if (SchoolCount[i]>0 && (double)SchoolSum[i]/SchoolCount
[i]<Min)
{
Min=(double)SchoolSum[i]/SchoolCount[i];
MinI=i;
}
for(i=1;i<=99;++i)
if (SchoolCount[i]>0 && SchoolSum[i]*SchoolCount[MinI]==
SchoolSum[MinI]*SchoolCount[i])
cout << i << endl;
return 0;
}

Указания по оцениванию Балл
Программа работает верно для любых входных данных
произвольного размера и находит ответ, не сохраняя входные данные
в массиве, размер которого соответствует числу N (количество
человек в списке). Программа просматривает входные данные один
раз, сохраняя только информацию о cуммарном балле и количестве
выпускников в каждой школе. Допускается наличие в тексте
программы одной синтаксической ошибки: пропущен или неверно
указан знак пунктуации, неверно написано или пропущено
зарезервированное слово языка программирования, не описана или
неверно описана переменная, применяется операция, недопустимая
для соответствующего типа данных (если одна и та же ошибка
встречается несколько раз, то это считается за одну ошибку).
4
Программа работает верно, но входные данные запоминаются в
массиве, размер которого не меньше N или входные данные
считываются несколько раз. Допускается наличие от одной до трех
синтаксических ошибок. Возможно, в принципиально верно
организованном вводе данных есть одна ошибка. Три балла также
выставляется, если в эффективной программе, удовлетворяющей
критериям выставления 4 баллов, есть одна алгоритмическая ошибка
(например, отсутствует вывод результата при правильном его
нахождении).
3
Программа работает в целом верно, эффективно или нет, но, в
реализации алгоритма содержатся до двух ошибок (неверная
инициализация переменных, в частности значения максимума, выход
за границу массива, перевод символов в числа, используется знак “<”
вместо “<=”, “or” вместо “and” и т.п.). Возможно, некорректно
организовано считывание входных данных. Допускается наличие от
одной до пяти синтаксических ошибок, описанных выше.
2
Программа, возможно, неверно работает при некоторых входных
данных, например, выдает правильный ответ только в том случае,
если школа с максимальным средним баллом только одна. Возможно,
неверно организовано считывание данных и отсутствует вывод
результата. Допускается до 4 различных ошибок в реализации
алгоритма, в том числе описанных в критериях присвоения двух
баллов. Допускается наличие от одной до семи синтаксических
ошибок, описанных выше.
1
Задание не выполнено или выполнено неверно 0

3. Имеется список людей с указанием их фамилии, имени и даты рождения.
Напишите эффективную по времени работы и по используемой памяти
программу (укажите используемую версию языка программирования, например,
Borland Pascal 7.0), которая будет определять самого старшего человека из этого
списка и выводить его фамилию, имя и дату рождения, а если имеется несколько
самых старших людей с одинаковой датой рождения, то определять их
количество. На вход программе в первой строке подается количество людей в
списке N. В каждой из последующих N строк находится информация в следующем
формате: <Фамилия> <Имя> <Дата рождения>
где <Фамилия> – строка, состоящая не более, чем из 20 символов без
пробелов,
<Имя> – строка, состоящая не более, чем из 20 символов без
пробелов,
<Дата рождения> – стока, имеющая вид ДД.ММ.ГГГГ, где ДД –
двузначное число от 01 до 31, ММ – двузначное число от 01 до 12,
ГГГГ – четырехзначное число от 1800 до 2100.
Пример входной строки:
Иванов Сергей 27.03.1993
Программа должна вывести фамилию и имя самого старшего
человека в списке.
Пример выходных данных:
Иванов Сергей
Если таких людей, несколько, то программа должна вывести их
количество. Пример вывода в этом случае: 3
Содержание верного ответа и указания по оцениванию (допускаются иные
формулировки ответа, не искажающие его смысла)
Программа читает все входные данные один раз, не запоминая их в массиве.
Во время чтения данных определяется дата рождения каждого человека,
которая сравнивается с наименьшей из известных дат рождения среди всех
уже просмотренных людей из списка. Также запоминается количество людей,
имеющих наименьшую дату рождения, фамилия и имя человека, имеющего
наименьшую дату рождения.
Баллы начисляются только за программу, которая решает задачу хотя бы для
одного частного случая (например, когда только один человек имеет
наименьшую дату рождения).
Ниже приведены примеры решения задания на языках Паскаль и C++.
Допускаются решения, записанные на других языках программирования. При
оценивании решений на других языках программирования необходимо
учитывать особенности этих языков программирования.

Решение на языке Паскаль
Var
N, i, Day, Month, Year, MinDay, MinMonth, MinYear, MinCount,
Code: integer;
Name, MinName: string;
Begin
MinYear:=9999;
,Считываем количество людей-
ReadLn(N);
for i:=1 to N do
begin
,Считываем данные об одном человеке-
ReadLn(Name);
,Извлекаем из строки значения дня, месяца, года рождения-
val(Copy(Name,Length(Name)-9,2),Day,Code);
val(Copy(Name,Length(Name)-6,2),Month,Code);
val(Copy(Name,Length(Name)-3,4),Year,Code);
,Если дата рождения совпадает с наименьшей известной
датой, то увеличиваем счетчик числа людей, имеющих минимальную
дату рождения}
if (Year=MinYear) and (Month=MinMonth) and (Day=MinDay)
then
MinCount:=MinCount+1;
,Если дата рождения меньше минимально известной, то
сохраняем его дату рождения, как минимальное, счетчик числа
людей, имеющих такую дату рождения, устанавливаем в 1, также
запоминаем имя человека}
if (Year<MinYear) or (Year=MinYear) and (Month<MinMonth)
or (Year=MinYear) and (Month=MinMonth) and (Day<MinDay)
then
begin
MinYear:=Year;
MinMonth:=Month;
MinDay:=Day;
MinCount:=1;
MinName:=Copy(Name,1,length(Name)-11)
end
end;
,Если счетчик числа людей, имеющих минимальную дату рождения
больше 1, то выводим значение счетчика, иначе выводим имя
человека}
if MinCount>1
then
WriteLn(MinCount)

Else
WriteLn(MinName)
end.
Решение на языке C++
#include<iostream>
using namespace std;
int main()
{
int n, i, day, month, year, minday, minmonth, minyear,
mincount;
string name, minname;
cin >> n;
getline(cin, name);
minyear=9999;
for(i=0;i<n;++i)
{
getline(cin, name);
day=(name[name.length()-10]-‘0’)*10 + name[name.length()-
9]-‘0’;
month=(name[name.length()-7]-‘0’)*10 + name[name.length()-
9]-‘6’;
year=(((name[name.length()-4]-‘0’)*10 + name[name.length
()-3]-‘0’) * 10 + name[name.length()-2]-‘0’)*10 + name
[name.length()-1]-‘0’;
if (year==minyear && month==minmonth && day==minday)
++mincount;
if (year<minyear || year==minyear && month<minmonth ||
year==minyear && month==minmonth && day<minday)
{
minyear=year;
minmonth=month;
minday=day;
mincount=1;
name.resize(name.length()-11);
minname=name;
}
}
if(mincount>1)
cout<<mincount<<endl;
else
cout<<minname<<endl;
return 0;
}

Указания по оцениванию Балл
Программа работает верно для любых входных данных
произвольного размера и находит ответ, не сохраняя входные данные
в массиве, размер которого соответствует числу N (количество
человек в списке). Программа просматривает входные данные один
раз, сохраняя только информацию о cуммарном балле и количестве
выпускников в каждой школе. Допускается наличие в тексте
программы одной синтаксической ошибки: пропущен или неверно
указан знак пунктуации, неверно написано или пропущено
зарезервированное слово языка программирования, не описана или
неверно описана переменная, применяется операция, недопустимая
для соответствующего типа данных (если одна и та же ошибка
встречается несколько раз, то это считается за одну ошибку).
4
Программа работает верно, но входные данные запоминаются в
массиве, размер которого не меньше N или входные данные
считываются несколько раз. Допускается наличие от одной до трех
синтаксических ошибок. Возможно, в принципиально верно
организованном вводе данных есть одна ошибка. Три балла также
выставляется, если в эффективной программе, удовлетворяющей
критериям выставления 4 баллов, есть одна алгоритмическая ошибка
(например, отсутствует вывод результата при правильном его
нахождении).
3
Программа работает в целом верно, эффективно или нет, но, в
реализации алгоритма содержатся до двух ошибок (неверная
инициализация переменных, в частности значения максимума, выход
за границу массива, перевод символов в числа, используется знак “<”
вместо “<=”, “or” вместо “and” и т.п.). Возможно, некорректно
организовано считывание входных данных. Допускается наличие от
одной до пяти синтаксических ошибок, описанных выше.
2
Программа, возможно, неверно работает при некоторых входных
данных, например, выдает правильный ответ только в том случае,
если школа с максимальным средним баллом только одна. Возможно,
неверно организовано считывание данных и отсутствует вывод
результата. Допускается до 4 различных ошибок в реализации
алгоритма, в том числе описанных в критериях присвоения двух
баллов. Допускается наличие от одной до семи синтаксических
ошибок, описанных выше.
1
Задание не выполнено или выполнено неверно 0

4. Имеется список результатов голосования избирателей за несколько партий, в
виде списка названий данных партий. На вход программе в первой строке
подается количество избирателей в списке N. В каждой из последующих N строк
записано название партии, за которую проголосовал данный избиратель, в виде
текстовой строки. Длина строки не превосходит 50 символов, название может
содержать буквы, цифры, пробелы и прочие символы.
Пример входных данных:
6
Party one
Party two
Party three
Party three
Party two
Party three
Программа должна вывести список всех партий, встречающихся в
исходном списке, в порядке убывания количества голосов, отданных
за эту партию. При этом название каждой партии должно быть
выведено ровно один раз, вне зависимости от того, сколько голосов
было отдано за данную партию.
Пример выходных данных для приведенного выше примера входных
данных:
Party three
Party two
Party one
При этом следует учитывать, что количество голосов избирателей в
исходном списке может быть велико (свыше 1000), а количество
различных партий в этом списке не превосходит 10.
Содержание верного ответа и указания по оцениванию
(допускаются иные формулировки ответа, не искажающие его смысла)
Программа читает все входные данные один раз, не запоминая все входные данные
в массиве, размер которого равен N, а составляя только список имеющихся
политических партий и количества голосов, отданных за каждую из них. Во время
чтения данных просматривается список ранее сохраненных партий, если данная
партия уже есть в списке, то количество голосов, отданных за эту партию,
увеличивается на 1, иначе партия добавляется в список известных партий. После
окончания ввода производится сортировка массивов партий и количества голосов,
отданных за них в порядке убывания количества голосов, затем выводится список
партий. Баллы начисляются только за программу, которая решает задачу хотя бы
для одного частного случая.
Ниже приведены примеры решения задания на языках Паскаль и C++. Допускаются
решения, записанные на других языках программирования. При оценивании 

решений на других языках программирования необходимо учитывать особенности
этих языков программирования.
Решение на языке Паскаль
Var
n, NumParties, i, j, t: integer;
Count:array[1..10] of integer;
s: string;
Names: array[1..10] of string;
Begin
,Общее число партий в списке-
NumParties:=0;
,Считываем количество избирателей-
ReadLn(N);
for i:=1 to N do
begin
,Считываем название партии, за которую проголосовал
избиратель-
ReadLn(S);
,Осуществляем поиск считанного названия в списке всех известных партий-
j:=1;
while (j<=NumParties) and (s<>Names[j])
do
j:=j+1;
,Если партия найдена в списке-
if j<=NumParties
then
,Увеличиваем счетчик числа голосов, отданных за эту
партию}
Count[j]:=Count[j]+1
else
begin
,Иначе добавляем партию в конец списка, увеличиваем
число партий на 1, устанавливаем счетчик голосов, отданных за
новую партию, в 1-
Names[j]:=s;
Count[j]:=1;
NumParties:=NumParties+1
end
end;
,Сортируем массивые Names и Count в порядке убывания
значений массива Count}
for i:=NumParties downto 2 do
© МИОО, 2009 г.
for j:=2 to i do
if Count[j-1]<Count[j]
then
begin

t:=Count[j];
Count[j]:=Count[j-1];
Count[j-1]:=t;
s:=Names[j];
Names[j]:=Names[j-1];
Names[j-1]:=s;
end;
,Выводим содержимое массива Countfor
i:=1 to NumParties do
WriteLn(Names[i])
end.
Решение на языке C++
#include<iostream>
using namespace std;
int main()
{
int n, Count[10], NumParties=0, i, j, t;
string Names[10], s;
cin>>n;
getline(cin,s);
for(i=0;i<n;++i)
{
getline(cin,s);
j=0;
while(j<NumParties && s!=Names[j])
++j;
if(j<NumParties)
++Count[j];
else
{
Names[j]=s;
Count[j]=1;
++NumParties;
}
}
for (i=NumParties-1;i>=1;—i)
for (j=1;j<=i;++j)
if (Count[j-1]<Count[j])
{
t=Count[j];
Count[j]=Count[j-1];
Count[j-1]=t;
s=Names[j];
Names[j]=Names[j-1];
Names[j-1]=s;
}
for(i=0;i<NumParties;++i)

cout<<Names[i]<<endl;
}
Указания по оцениванию Балл
Программа работает верно для любых входных данных произвольного
размера и находит ответ, не сохраняя входные данные в массиве,
размер которого соответствует числу N (количество человек в списке).
Программа просматривает входные данные один раз, сохраняя только
информацию о cуммарном балле и количестве выпускников в каждой
школе. Допускается наличие в тексте программы одной синтаксической
ошибки: пропущен или неверно указан знак пунктуации, неверно
написано или пропущено зарезервированное слово языка
программирования, не описана или неверно описана переменная,
применяется операция, недопустимая для соответствующего типа
данных (если одна и та же ошибка встречается несколько раз, то это
считается за одну ошибку).
4
Программа работает верно, но все входные данные запоминаются в
массиве или входные данные считываются несколько раз.
Допускается наличие от одной до трех синтаксических ошибок. Три
балла также выставляется, если в эффективной программе,
удовлетворяющей критериям выставления 4 баллов, есть одна
ошибка, например, использование неверной границы в алгоритме
сортировке, выход за границы массива, используется знак “<” вместо
“<=” и т.д.
3
Программа работает в целом верно, эффективно или нет, но, в
реализации алгоритма содержатся до двух ошибок (неверная
инициализация переменных, в частности значения минимума, выход
за границу массива, используется знак “<” вместо “<=”, “or” вместо
“and” и т.п.). Возможно, некорректно организовано считывание
входных данных. Допускается наличие от одной до пяти синтаксических
ошибок, описанных выше.
2
Программа, возможно, неверно работает при некоторых входных
данных, например, выдает правильный ответ только в том случае,
если школа с максимальным средним баллом только одна. Возможно,
неверно организовано считывание данных и отсутствует вывод
результата. Допускается до 4 различных ошибок в реализации
алгоритма, в том числе описанных в критериях присвоения двух баллов.
Допускается наличие от одной до семи синтаксических ошибок,
описанных выше.
1
Задание не выполнено или выполнено неверно 0

5. Имеется список результатов голосования избирателей за несколько партий, в
виде списка названий данных партий. При этом некоторые голоса являются
недействительными, в этом случае вместо названия партии записан один символ
«.» (точка). Партия проходит в парламент, если за нее отдано не менее 7% от
общего числа действительных голосов (то есть от количества строк в списке,
которые не равны «.»). На вход программе в первой строке подается количество
избирателей в списке N. В каждой из последующих N строк записано название
партии, за которую проголосовал данный избиратель, в виде текстовой строки
или один символ «.», если данный голос считается недействительным. Длина
строки не превосходит 50 символов, название может содержать буквы, цифры,
пробелы и прочие символы.
Пример входных данных:
Party one
Party two
Party one
Party one
Party two
Party two
.
Party three
Party one
Party one
Party two
Party one
Party two
Party two
Party one
Party two
Программа должна вывести список всех партий, прошедших в парламент, в
произвольном порядке. При этом название каждой партии должно быть выведено
ровно один раз, вне зависимости от того, сколько голосов было отдано за данную
партию.
Пример выходных данных для приведенного выше примера входных данных:
Party one
Party two
При этом следует учитывать, что количество голосов избирателей в исходном
списке может быть велико (свыше 1000), а количество различных партий в
этом списке не превосходит 10.

Содержание верного ответа и указания по оцениванию
(допускаются иные формулировки ответа, не искажающие его смысла)
Программа читает все входные данные один раз, не запоминая все входные данные
в
массиве, размер которого равен N, а составляя только список имеющихся
политических партий и количества голосов, отданных за каждую из них. Во время
чтения данных проверяется, не равна ли считанная строка «.». В этом случае
просматривается список ранее сохраненных партий, если данная партия уже есть в
списке, то количество голосов, отданных за эту партию, увеличивается на 1, иначе
партия добавляется в список известных партий. Также счетчик общего числа
действительных голосов увеличивается на 1. После окончания ввода
просматривается список всех партий и выводятся названия тех из них, за которые
отдано не менее 7% от общего числа голосов. Баллы начисляются только за
программу, которая решает задачу хотя бы для одного частного случая. Ниже
приведены примеры решения задания на языках Паскаль и C++.
Допускаются решения, записанные на других языках программирования. При
оценивании решений на других языках программирования необходимо учитывать
особенности этих языков программирования.
Решение на языке Паскаль
Var
n, NumParties, NumVotes, i, j: integer;
Count:array[1..10] of integer;
s: string;
Names: array[1..10] of string;
Begin
NumParties:=0;
NumVotes:=0;
{Считываем количество избирателей}
ReadLn(N);
for i:=1 to N do
begin
{Считываем название партии, за которую проголосовал избиратель}
ReadLn(S);
if S<>’.’ then
begin
NumVotes:=NumVotes+1;
{Осуществляем поиск названия в списке известных партий}
j:=1;
while (j<=NumParties) and (s<>Names[j])
do
j:=j+1;
{Если партия найдена в списке}
if j<=NumParties
then
{Увеличиваем счетчик числа голосов, отданных за эту партию}

Count[j]:=Count[j]+1
else
begin
{Иначе добавляем партию в конец списка,
увеличиваем число партий на 1,
устанавливаем счетчик голосов,
отданных за новую партию, в 1}
Names[j]:=s;
Count[j]:=1;
NumParties:=NumParties+1
end
end
end;
{Проходим по списку партий и выводим только те,
за которые отдано не менее 7% голосов}
for i:=1 to NumParties do
if Count[i]*100>=NumVotes*7 then
WriteLn(Names[i])
end.
Решение на языке C++
#include<iostream>
using namespace std;
int main()
{
int n, Count[10], NumParties=0, NumVotes=0, i, j;
string Names[10], s;
cin>>n;
getline(cin,s);
for(i=0;i<n;++i)
{
getline(cin,s);
if(s!=».»)
{
NumVotes++;
j=0;
while(j<NumParties && s!=Names[j])
++j;
if(j<NumParties)
++Count[j];
else
{
Names[j]=s;
Count[j]=1;
++NumParties;
}
}
}

for(i=0;i<NumParties;++i)
if(Count[i]*100>=NumVotes*7)
cout<<Names[i]<<endl;
}
Указания по оцениванию Балл
Программа работает верно для любых входных данных
произвольного размера и находит ответ, не сохраняя входные данные
в массиве, размер которого соответствует числу N (количество
человек в списке). Программа просматривает входные данные один
раз, сохраняя только информацию о cуммарном балле и количестве
выпускников в каждой школе. Допускается наличие в тексте
программы одной синтаксической ошибки: пропущен или неверно
указан знак пунктуации, неверно написано или пропущено
зарезервированное слово языка программирования, не описана или
неверно описана переменная, применяется операция, недопустимая
для соответствующего типа данных (если одна и та же ошибка
встречается несколько раз, то это считается за одну ошибку).
4
Программа работает верно, но все входные данные запоминаются в
массиве или входные данные считываются несколько раз.
Допускается наличие от одной до трех синтаксических ошибок. Три
балла также выставляется, если в эффективной программе,
удовлетворяющей критериям выставления 4 баллов, есть одна
ошибка, например, использование неверной границы в алгоритме
сортировке, выход за границы массива, используется знак “<” вместо
“<=” и т.д.
3
Программа работает в целом верно, эффективно или нет, но, в
реализации алгоритма содержатся до двух ошибок (неверная
инициализация переменных, в частности значения минимума, выход
за границу массива, используется знак “<” вместо “<=”, “or” вместо
“and” и т.п.). Возможно, некорректно организовано считывание
входных данных. Допускается наличие от одной до пяти
синтаксических ошибок, описанных выше.
2
Программа, возможно, неверно работает при некоторых входных
данных, например, выдает правильный ответ только в том случае,
если школа с максимальным средним баллом только одна. Возможно,
неверно организовано считывание данных и отсутствует вывод
результата. Допускается до 4 различных ошибок в реализации
алгоритма, в том числе описанных в критериях присвоения двух
баллов. Допускается наличие от одной до семи синтаксических
ошибок, описанных выше.
1
Задание не выполнено или выполнено неверно 0

6. Два игрока играют в следующую игру. На координатной плоскости стоит
фишка.
В начале игры фишка находится в точке с координатами (0,0). Игроки ходят по
очереди. Ход состоит в том, что игрок перемещает фишку из точки с
координатами (x, y) в одну из трех точек: (x + 2, y + 3), (x, y + 2), . Игра
заканчивается, как только расстояние по прямой от фишки до начала координат
станет более 9. Выигрывает игрок, который сделал последний ход. Кто
выигрывает при безошибочной игре – игрок, делающий первый ход, или игрок,
делающий второй ход? Каким должен быть первый ход выигрывающего игрока?
Ответ обоснуйте.
16
Party one
Party two
Party one
Party one
Party two
Party two
.
Party three
Party one
Party one
Party two
Party one
Party two
Party two
Party one
Party two
Программа должна вывести список всех партий, прошедших в парламент, в
произвольном порядке. При этом название каждой партии должно быть
выведено ровно один раз, вне зависимости от того, сколько голосов было
отдано за данную партию.
Пример выходных данных для приведенного выше примера входных данных:
Party one
Party two
При этом следует учитывать, что количество голосов избирателей в исходном
списке может быть велико (свыше 1000), а количество различных партий в
этом списке не превосходит 10.
Содержание верного ответа и указания по оцениванию
(допускаются иные формулировки ответа, не искажающие его смысла)
Программа читает все входные данные один раз, не запоминая все входные данные
в
массиве, размер которого равен N, а составляя только список имеющихся
политических партий и количества голосов, отданных за каждую из них. Во время

чтения данных проверяется, не равна ли считанная строка «.». В этом случае
просматривается список ранее сохраненных партий, если данная партия уже есть в
списке, то количество голосов, отданных за эту партию, увеличивается на 1, иначе
партия добавляется в список известных партий. Также счетчик общего числа
действительных голосов увеличивается на 1. После окончания ввода
просматривается список всех партий и выводятся названия тех из них, за которые
отдано не менее 7% от общего числа голосов.
Баллы начисляются только за программу, которая решает задачу хотя бы для одного
частного случая.
Ниже приведены примеры решения задания на языках Паскаль и C++.
Допускаются решения, записанные на других языках программирования. При
оценивании решений на других языках программирования необходимо учитывать
особенности этих языков программирования.
Решение на языке Паскаль
Var
n, NumParties, NumVotes, i, j: integer;
Count:array[1..10] of integer;
s: string;
Names: array[1..10] of string;
Begin
NumParties:=0;
NumVotes:=0;
,Считываем количество избирателей-
ReadLn(N);
for i:=1 to N do
begin
,Считываем название партии, за которую проголосовал избиратель-
ReadLn(S);
if S<>’.’ then
begin
NumVotes:=NumVotes+1;
,Осуществляем поиск названия в списке известных партий-
j:=1;
while (j<=NumParties) and (s<>Names[j])
do
j:=j+1;
,Если партия найдена в списке-
if j<=NumParties
then
,Увеличиваем счетчик числа голосов, отданных за эту партию-
Count[j]:=Count[j]+1
else
begin
,Иначе добавляем партию в конец списка,

увеличиваем число партий на 1,
устанавливаем счетчик голосов,
отданных за новую партию, в 1-
Names[j]:=s;
Count[j]:=1;
NumParties:=NumParties+1
end
end
end;
,Проходим по списку партий и выводим только те,
за которые отдано не менее 7% голосов-
for i:=1 to NumParties do
if Count[i]*100>=NumVotes*7 then
WriteLn(Names[i])
end.
Решение на языке C++
#include<iostream>
using namespace std;
int main()
{
int n, Count[10], NumParties=0, NumVotes=0, i, j;
string Names[10], s;
cin>>n;
getline(cin,s);
for(i=0;i<n;++i)
{
getline(cin,s);
if(s!=».»)
{
NumVotes++;
j=0;
while(j<NumParties && s!=Names[j])
++j;
if(j<NumParties)
++Count[j];
else
{
Names[j]=s;
Count[j]=1;
++NumParties;
}
}
}
for(i=0;i<NumParties;++i)

if(Count[i]*100>=NumVotes*7)
cout<<Names[i]<<endl;
}
Указания по оцениванию Балл
Программа работает верно для любых входных данных
произвольного размера и находит ответ, не сохраняя входные данные
в массиве, размер которого соответствует числу N (количество
человек в списке). Программа просматривает входные данные один
раз, сохраняя только информацию о cуммарном балле и количестве
выпускников в каждой школе. Допускается наличие в тексте
программы одной синтаксической ошибки: пропущен или неверно
указан знак пунктуации, неверно написано или пропущено
зарезервированное слово языка программирования, не описана или
неверно описана переменная, применяется операция, недопустимая
для соответствующего типа данных (если одна и та же ошибка
встречается несколько раз, то это считается за одну ошибку).
4
Программа работает верно, но все входные данные запоминаются в
массиве или входные данные считываются несколько раз.
Допускается наличие от одной до трех синтаксических ошибок. Три
балла также выставляется, если в эффективной программе,
удовлетворяющей критериям выставления 4 баллов, есть одна
ошибка, например, использование неверной границы в алгоритме
сортировке, выход за границы массива, используется знак “<” вместо
“<=” и т.д.
3
Программа работает в целом верно, эффективно или нет, но, в
реализации алгоритма содержатся до двух ошибок (неверная
инициализация переменных, в частности значения минимума, выход
за границу массива, используется знак “<” вместо “<=”, “or” вместо
“and” и т.п.). Возможно, некорректно организовано считывание
входных данных. Допускается наличие от одной до пяти
синтаксических ошибок, описанных выше.
2
Программа, возможно, неверно работает при некоторых входных
данных, например, выдает правильный ответ только в том случае,
если школа с максимальным средним баллом только одна. Возможно,
неверно организовано считывание данных и отсутствует вывод
результата. Допускается до 4 различных ошибок в реализации
алгоритма, в том числе описанных в критериях присвоения двух
баллов. Допускается наличие от одной до семи синтаксических
ошибок, описанных выше.
1
Задание не выполнено или выполнено неверно 0

7. Статья 83 закона «О выборах депутатов Государственной Думы Федерального
Собрания Российской Федерации» определяет следующий алгоритм
пропорционального распределения депутатских мандатов.
Сначала подсчитывается сумма голосов избирателей, поданных за каждую
партию и подсчитывается сумма голосов, поданных за все партии. Эта сумма
делится на 450 – количество распределяемых мандатов, получается величина,
называемая «первое избирательное частное». Далее каждая партия получает
столько мандатов в парламенте, чему равна целая часть от деления числа голосов
за данную партию на первое избирательное частное.
Если после этого сумма количества мандатов, отданных партиям, меньше 450, то
оставшиеся до 450 мандаты передаются по одному партиям, в порядке убывания
дробной части частного от деления числа голосов за данную партию на первое
избирательное частное. Если же для двух партий эти дробные части равны, то
преимущество отдается той партии, которая получила большее число голосов.
Напишите программу (укажите используемую версию языка программирования,
например, Borland Pascal 7.0), которая по количеству голосов, отданных за
каждую партию, будет определять количество мандатов, полученных этой
партией в парламенте.
На вход программе подается количество партий N, участвовавших в выборах,
N≤20. Далее идет N строчек, каждая строчка содержит название партии (строка
длиной не более 50 символов, возможно, содержащая пробелы), затем, через
пробел, количество голосов, полученных данной партией – число, не
превосходящее .
Пример входных данных:
3
Party One 100000
Party Two 200000
Party Three 400000
Программа должна вывести названия всех партий и количество голосов в
парламенте, полученных данной партией. Названия необходимо выводить в том
же порядке, в котором они шли во входных данных. Пример выходных данных
для данного примера входных данных:
Party One 64
Party Two 129
Party Three 257
Содержание верного ответа и указания по оцениванию
(допускаются иные формулировки ответа, не искажающие его смысла)
Создадим массивы, для хранения следующих данных о партиях:
1. Название партии Names – строкового типа
2. Количество голосов, полученных партиями Votes – целочисленного типа
3. Количество мандатов в парламенте, полученных партией Mandates –
целочисленного типа
4. Дробная часть от деления количества голосов на первое избирательное частное

FracPart – вещественного типа (этот массив необходим для второй части
распределения
голосов).
Программа считывает данные один раз, запоминая названия партии в массиве
Names, а
количество голосов, отданных за партию – в массиве Votes. Одновременно в
переменную
SumVotes считается общее число голосов.
Затем в цикле по всем партиям (индексная переменная i обозначает номер партии)
каждая партия получает количество мандатов, равное целой части от деления
Votes[i]
на (SumVotes/450). Данное число мандатов записывается в элемент массива
Mandates
[i], в массив FracPart[i] записывается дробная часть от указанного частного.
Одновременно в SumMandates записывается общее число распределенных между
партиями мандатов.
В следующем цикле пока величина SumMandates меньше 450, распределяется по
одному
дополнительному мандату между партиями. Для этого определяется партия, для
которой
наибольшая величиа FracPart, а если величины FracPart – одинаковые, то партия,
для
которой больше величина Votes. Номер этой партии записывается в переменную i.
Затем
значение Mandates[i] и SumMandates увеличивается на 1, а значение FracPart[i]
устанавливается в 0, чтобы эта партия выбывала из процедуры вторичного
распределения голосов.
Решение на языке Паскаль:
Const
NumMandates=450; ,Число место в парламенте-
Var
N, SumVotes, SumMandates, i, j: longint;
errcore: integer;
Names: array[1..20] of string; {Названия партий}
Votes: array[1..20] of longint; ,Число голосов, отданных за партию-
Mandates: array[1..20] of longint; {Число мест в парламенте}
FracPart: array*1..20+ of real; ,Дробная часть при определении числа
мест-
Begin
ReadLn(N); ,Считали число партий-
SumVotes:=0; ,Общее число голосов избирателей-
for i:=1 to N do
begin

ReadLn(Names*i+); ,Считали название партии и число голосов-
j:=length(Names[i]);
while Names[i][j]<>’ ‘ do j:=j-1; {Нашли последний пробел в
строке}
val(Copy(Names[i],j+1,10),Votes[i],errcode); {Выделили из строки
число голосов-
Names[i]:=Copy(Names[i],1,j-1); ,Выделили из строки название
партии-
SumVotes:=SumVotes+Votes*i+; ,Увеличили общее число голосов-
end;
SumMandates:=0; {Общее число мандатов}
for i:=1 to N do
begin
FracPart[i]:=Votes[i]/(SumVotes/NumMandates);
Mandates*i+:=trunc(FracPart*i+); ,Столько мандатов получила данная
партия}
SumMandates:=SumMandates+Mandates[i]; {Увеличиваем общее число
мандатов}
FracPart[i]:=frac(FracPart[i])
end;
while SumMandates < NumMandates do {Раздаем дополнительные мандаты}
begin__
i:=1;
for j:=2 to N do ,Выбираем партию с наибольшим значением FracPartif
(FracPart[j]>FracPart[i]) or (FracPart[j]=FracPart[i]) and
(Votes[j]>Votes[i])
then i:=j;
Mandates*i+:=Mandates*i++1; ,Выдаем ей дополнительный мандат-
SumMandates:=SumMandates+1; ,Увеличиваем общее число мандатов-
FracPart[i]:=0;
end;
for i:=1 to N do ,Выводим результаты распределения мандатов-
WriteLn(Names[i],’ ‘,Mandates[i])
end.
Решение на языке C++:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
const int NumMandates=450;
int N, SumVotes, SumMandates, i, j;
string Names[20];

int Votes[20];
int Mandates[20];
double FracPart[20];
cin>>N;
getline(cin,Names[0]);
SumVotes=0;
for(i=0;i<N;i++)
{
getline(cin,Names[i]);
j=Names[i].length()-1;
while(Names[i][j]!=’ ‘) j—;
sscanf(Names[i].c_str()+j,»%d»,&Votes[i]);
Names[i].resize(j-1);
SumVotes+=Votes[i];
}
SumMandates=0;
for(i=0;i<N;i++)
{
FracPart[i]=Votes[i]/((double)SumVotes/NumMandates);
Mandates[i]=trunc(FracPart[i]);
SumMandates=SumMandates+Mandates[i];
FracPart[i]-=trunc(FracPart[i]);
}
while (SumMandates < NumMandates)
{
i=0;
for(j=1;j<N;j++)
if (FracPart[j]>FracPart[i] || FracPart[j]==FracPart[i] &&
Votes[j]>Votes[i])
i=j;
Mandates[i]++;
SumMandates++;
FracPart[i]=0;
}
for(i=0;i<N;i++)
cout<<Names[i]<<» «<<Mandates[i]<<endl;
}

Указания по оцениванию Балл
Программа работает верно для любых входных данных
произвольного размера и находит ответ, не сохраняя входные данные
в массиве, размер которого соответствует числу N (количество
человек в списке). Программа просматривает входные данные один
раз, сохраняя только информацию о cуммарном балле и количестве
выпускников в каждой школе. Допускается наличие в тексте
программы одной синтаксической ошибки: пропущен или неверно
указан знак пунктуации, неверно написано или пропущено
зарезервированное слово языка программирования, не описана или
неверно описана переменная, применяется операция, недопустимая
для соответствующего типа данных (если одна и та же ошибка
встречается несколько раз, то это считается за одну ошибку).
4
Программа работает верно во всех случаях, но содержит одну ошибку
(например, не рассмотрена возможность равенства голосов при
вторичном распределении мандатов, или программа не выводит
результат, при верном его нахождении). Допускается наличие от одной
до трех синтаксических ошибок: Возможно, в принципиально верно
организованном вводе данных есть одна ошибка.
3
Программа работает в целом верно, но в реализации алгоритма
содержатся до двух ошибок (неверная инициализация переменных, в
частности значения максимума, выход за границу массива, перевод
символов в числа, используется знак “<” вместо “<=”, “or” вместо “and” и
т.п.). Помимо этого, возможно, некорректно организовано считывание
входных данных. Допускается наличие от одной до пяти синтаксических
ошибок, описанных выше.
2
Программа, возможно, неверно работает при некоторых входных
данных.
Возможно, неверно реализован (или полностью отсутствует) механизм
вторичного распределения мандатов). Допускается до 4 различных
ошибок в реализации алгоритма, в том числе описанных в критериях
присвоения двух баллов. Допускается наличие от одной до семи
синтаксических ошибок, описанных выше.
1
Задание не выполнено или выполнено неверно 0

На уроке рассмотрен материал для подготовки к огэ по информатике, 4 задание разбор

Содержание:

  • Объяснение 4 задания ОГЭ по информатике
    • Поиск кратчайшего пути (перебор)
  • ОГЭ информатика разбор задания 4
    • Актуальное
    • Тренировочные

4-е задание: «Формальные описания реальных объектов и процессов»
Уровень сложности — базовый,
Максимальный балл — 1,
Примерное время выполнения — 3 минуты.

* до 2020 г — это задание № 3 ОГЭ

Графы

Иногда очень трудно структурировать информацию описанными структурами из-за сложных «взаимоотношений» между объектами. Тогда можно использовать графы:

Граф – это набор вершин и связей между ними, называющихся рёбрами:

Граф

Граф, отображающий дороги между поселками

Матрица и список смежности

матрица и список смежностей

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

Связный граф

Связный граф

Дерево – это связный граф без циклов (замкнутых участков).

Дерево - связный граф без циклов

Дерево — связный граф без циклов

Взвешенные графы и весовая матрица

У взвешенных графов указан «вес ребра»:
взвешенный граф

Из взвешенных графов получается весовая матрица, обратное преобразование тоже возможно.

Весовая матрица

Весовая матрица

Поиск кратчайшего пути (перебор)

кратчайший путь

Определение кратчайшего пути между пунктами A и D

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

ОГЭ информатика разбор задания 4

Подробный видеоразбор по ОГЭ 4 задания:

  • Перемотайте видеоурок на решение заданий, если не хотите слушать теорию.
  • 📹 Видеорешение на RuTube здесь

    Актуальное

    Рассмотрим, как решать 4 задание по информатике ОГЭ.

    Разбор задания 4.5. Демонстрационный вариант ОГЭ 2022 г ФИПИ:

    Между населёнными пунктами A, B, C, D, E построены дороги, протяжённость которых (в километрах) приведена в таблице.
    решение 4 задания огэ информатика
    Определите длину кратчайшего пути между пунктами A и Е, проходящего через пункт С.
    Передвигаться можно только по дорогам, протяжённость которых указана в таблице. Каждый пункт можно посетить только один раз.

    ✍ Решение:

    • Построим дерево протяженности дорог, на ветвях будем отображать протяженность. Учтем, что каждая ветвь, должна включить узел пересечения с С:

    Ответ: 8


    Разбор задания 4.6

    Между населёнными пунктами A, B, C, D, E, F построены дороги, протяжённость которых (в километрах) приведена в таблице.

    A B C D E F
    A 5 8 4 1
    B 5 3 3 4
    C 8 3 2 15
    D 4 2 4 12
    E 1 3 4 7
    F 4 15 12 7

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

    ✍ Решение:

    • Найдём все варианты маршрутов из A в F, проходящих через пункт С, и выберем самый короткий.
    • Пройдемся по таблице построчно слева-направо сверху-вниз:
    • A—B—C—D—E--F: длина маршрута 25 км.
      A—B—C—D--F: длина маршрута 29 км.
      A—B—C--F: длина маршрута 28 км.
        пропустим B:
      A—C--F: длина маршрута 23 км.
      A—C—D—E--F: длина маршрута 20 км.
       пропустим и D:
      A—C—E--F: длина маршрута 16 км.
       пропустим и E:
      A—C—D--F: длина маршрута 24 км.
      A—C--F: длина маршрута 23 км.
       поменяем следование маршрута, исключая пункты с большим числом км:
      A—C—B--F: длина маршрута 15 км.
      A—D—С—B--F: длина маршрута 13 км.
    • Самый короткий путь: A—D—С—B--F. Длина маршрута 13 км.
    • Примечание 1: Заметим, что по условию задачи дважды передвигаться по любой из дорог нельзя. Если бы по дороге можно было передвигаться дважды, то был бы другой результат.
    • Примечание 2: Такое задание лучше решать методом построения полного дерева без повтора пунктов — это практически исключит «потерю» какой-то ветви.

    Ответ: 13


    Тренировочные

    Разбор задания 4.1:

    В таблице приведена стоимость перевозок между соседними железнодорожными станциями, укажите схему, соответствующую таблице:

    A B C D E
    A 2 7 4
    B 2
    C 7 3 5
    D 3 3
    E 4 5 3

    ✍ Решение:
     

    • Необходимо рассмотреть каждую схему и подсчитать количество ребер, выходящих из каждой вершины. В скобках будем указывать соответствующую данному «ребру» стоимость:
    • 1 схема:

      A: B(2), C(7), E(4) 
      B: A(2), C(4)
      
      Здесь уже можно остановиться, т.к. для вершины B по схеме два ребра, 
      а по таблице одно значение (B->A=2 )
      
      

      2 схема:

      A: B(2), C(7), E(4) 
      B: A(2)
      C: A(7), D(5), E(3) 
      
      Здесь уже можно остановиться, т.к. для вершины C стоимость по схеме 
      и по таблице различается: по схеме C->D = 5, 
      а по таблице на пересечении C и D цифра 3. 
      

      3 схема:

      A: B(2), C(7), E(4) 
      B: A(2)
      C: A(7), D(3), E(5)
      D: C(3), E(3)
      E: A(4), C(5), D(3)
      
      Данные на схеме полностью совпадают с табличными!
      
    • Схема 3 полностью соответствует таблице.

    Ответ: 3


    Разбор задания 4.2:

    На схеме приведена стоимость перевозок между соседними железнодорожными станциями, укажите таблицу, соответствующую схеме:

    1.

    A B C D E F
    A 3 2 2
    B 3 3 5 4
    C 3 3 5
    D 3 2
    E 5 5 2
    F 2 4
    2.

    A B C D E F
    A 3 2
    B 3 3 5 4
    C 3 2 5
    D 2 3
    E 5 5 3
    F 2 4
    3.

    A B C D E F
    A 3 2
    B 3 3 5 4
    C 3 2 5
    D 2
    E 5 5 3
    F 2 4 3
    4.

    A B C D E F
    A 3 2
    B 3 3 5 4
    C 3 2 3
    D 2 5
    E 5 3 5
    F 2 4

    Подобные задания для тренировки

    ✍ Решение:
     

    • Необходимо рассмотреть каждую таблицу и подсчитать количество пересечений для каждой строки, т.е. для каждой ж.д. станции. В скобках будем указывать соответствующую данной станции стоимость:
    • 1 таблица:

      A: B(3), E(2), F(2) 
      
      Здесь уже можно остановиться, т.к. для станции A по схеме два ребра у вершины А, 
      а по таблице уже три значения
      
      

      2 таблица:

      A: B(3), F(2) 
      B: A(3), C(3), E(5), F(4)
      C: B(3), D(2), E(5) 
      D: C(2), E(3)
      F: A(2), B(4)
      
      Данные на схеме полностью совпадают с табличными!
      
    • Таблица 2 полностью соответствует схеме.

    Ответ: 2


    Разбор задания 4.3:

    В таблице приведена стоимость перевозок между соседними железнодорожными станциями. Укажите таблицу, для которой минимальное расстояние от точки A до точки F больше 8.

    1.

    A B C D E F
    A 2 3
    B 2 5 5
    C 3 4
    D 5 4 2
    E 5 3
    F 2 3
    2.

    A B C D E F
    A 3 4
    B 4 2 2
    C 3 4 4
    D 4 2
    E 4 2
    F 2 2
    3.

    A B C D E F
    A 3 5
    B 4 2
    C 1 2
    D 3 4
    E 5 1 4
    F 2 2 4
    4.

    A B C D E F
    A 2 3
    B 2 5 5
    C 5 3
    D 3 3
    E 5 3 2
    F 3 2

    ✍ Решение:
     

    • Для каждой из таблиц построим дерево перевозок, на ветвях будем отображать суммарную стоимость:
    • 1 таблица:

    • По дереву 1-й таблицы видно, что каждая из ветвей в результате возвращает сумму большую 8. То есть таблица 1 соответствует искомому результату.

    Ответ: 1


    Разбор задания 4.4:

    Между населёнными пунктами А, В, С, D, Е, F построены дороги, протяжённость которых (в километрах) приведена в таблице:

    A B C D E F
    A 5 5 4
    B 5 2
    C 5 2 1
    D 4 1 3
    E 1 1
    F 1 3 1

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

    1) 5
    2) 6
    3) 7
    4) 8

    Подобные задания для тренировки

    ✍ Решение:
     

    • Решать такое задание лучше с помощью дерева:
    • как решать 4 задание по информатике огэ

    • Среди приведенных ответов кратчайший путь, равный 6 км, находится под номером 2.

    Ответ: 2


    Добрый день! Сегодня посмотрим, как «бороться» с 4 заданием из ОГЭ по информатике 2023.

    Четвёртное задание из ОГЭ по информатике достаточно простое, хотя и может показаться кому-то скучным.

    Рассмотрим простой пример из тренировочных заданий для 4 задания.

    Задача (Стандартная)

    Между населёнными пунктами A, B, C, D построены дороги, протяжённость которых (в километрах) приведена в таблице.

    ОГЭ по информатике 2023 - Задание 4 (классическая задача)

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

    Решение:

    Расставим точки, которые символизируют города, примерно по кругу.

    ОГЭ по информатике 2023 - Задание 4 (расставляем точки по кругу)

    Проведём дороги между городами так, как указано в таблице. Если на пересечении городов стоит число, значит, мы проводим линию между этими точками.

    ОГЭ по информатике 2023 - Задание 4 (рисуем дороги)

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

    Теперь найдём самый короткий путь из A в C.

    Можно сразу попасть из A в C по прямой дороге за 8. Если пойдём через пункт D, то придём в город C за 7. Через город B так же можно прийти за 7 километров.

    Но мы видим, что длина дороги из D в B равна 1. Попытаемся эту дорогу использовать при составлении маршрута. Получим путь: A-D-B-C. Получается 3+1+2=6. Это и есть искомый кратчайший путь.

    ОГЭ по информатике 2023 - Задание 4 (нашли самый короткий путь)

    Ответ: 6

    Задача (C обязательным узлом)

    Между населёнными пунктами A, B, C, D, E построены дороги, протяжённость которых
    (в километрах) приведена в таблице.

    ОГЭ по информатике 2023 - Задание 4 (задача с обязательным узлом)

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

    Решение:

    Расставим точки по кругу. Точка С — это обязательный пункт.

    ОГЭ по информатике 2023 - Задание 4 (Расставляем точки 2)

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

    ОГЭ по информатике 2023 - Задание 4 (Рисуем карту городов)

    Теперь можно начать искать кратчайший путь от A до E, проходящего через C.

    Найдём кратчайший путь до точки С. Это и есть путь A-C. Он равен 5.

    От С до E можно добраться разными путями:

    C-E = 8
    C-D-E = 2 + 5 = 7
    C-B-E = 4 + 3 = 7

    Видим длину BD = 1. Попытаемся использовать эту дорогу!

    C-D-B-E = 2 + 1 + 3 = 6

    Это и есть самый короткий путь.

    ОГЭ по информатике 2023 - Задание 4 (Решение)

    В ответе напишем путь: A-C-D-B-E = 5 + 6 = 11.

    Ответ: 11

    Задача (Закрепление)

    Между населёнными пунктами А, B, С, D, E, F построены дороги, протяжённости которых приведена в таблице. (Отсутствие числа в таблице означает, что прямой дороги между пунктами нет.)

    ОГЭ по информатике - Задание 4 (Закрепление)

    Определите длину кратчайшего пути между пунктами A и F (при условии, что передвигаться можно только по построенным дорогам).

    Решение:

    Расставим точки А, B, С, D, E, F по кругу.

    ОГЭ по информатике - Задание 4 (Рисуем карту)

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

    ОГЭ по информатике - Задание 4 (Рисуем дороги)

    Получилась наглядная карта городов. Оценив все пути от пункта A до пункта F, определяем, что самый короткий путь будет 4 + 3 + 4 + 3 = 14.

    ОГЭ по информатике - Задание 4 (получаем ответ)

    Ответ: 14.


    12

    1 ответ:



    0



    0

    <span>811-684=128 (включая число 684), N=128, i=7 бит (2^7=128).
    Где N — мощность алфавита.
    Ответ: 7 бит информации.</span>

    Читайте также

    var

    a,b,i:integer;

    begin

    writeln(‘Введите диапазон чисел: ‘);

    readln(a,b);

    for i:=a to b do

    begin

    writeln(i,’ ‘,sqr(i)*i);

    end;

    end.

    -96 = 1100000
    57 = 111001

    Var a,b:real; 
    <span>begin </span>
    <span>a:=1; </span>
    <span>b:=0; </span>
    <span>repeat </span>
    <span>writeln(‘Квадрат числа ‘,a,’ = ‘,sqr(a),’ Куб числа ‘,a,’ = ‘,power(a,3)); </span>
    <span>a:=a+1+b; </span>
    <span>b:=b+1; </span>
    <span>until b>9 </span>
    <span>end.</span>

    Program n2;
    const n=10;
    var a: array [1..n] of integer;
    i,k,j,temp: integer;
    begin
    randomize;
    writeln(‘исходный массив’);
    k:=0;
    for i:=1 to n do
    begin
    a[i]:=random(201)-100;
    write(a[i],’ ‘);
    end;
    writeln;
    writeln(‘полученный массив: ‘);
    for i:=1 to n do
    for j:=i to n do
    if a[j]>a[i] then
    begin
    temp:=a[i];
    a[i]:=a[j];
    a[j]:=temp
    end;
    for i:=1 to n do begin
    write(a[i],’ ‘);
    if (a[i]<0) and (i mod 2=0) then k:=k+1;
    end;
    writeln;
    write(‘кол-во отрицательных элементов на четных местах: ‘,k);
    end.

    2^i=128 => i=7
    В алфавите мощностью 128 символов один символ занимает 7 бит

  • Задание 15 номер 348634
  • Задание 4 номер 344 информатика
  • Задание 15 номер 340156
  • Задание 4 номер 26823
  • Задание 15 номер 339863