В
Все
Б
Биология
Б
Беларуская мова
У
Українська мова
А
Алгебра
Р
Русский язык
О
ОБЖ
И
История
Ф
Физика
Қ
Қазақ тiлi
О
Окружающий мир
Э
Экономика
Н
Немецкий язык
Х
Химия
П
Право
П
Психология
Д
Другие предметы
Л
Литература
Г
География
Ф
Французский язык
М
Математика
М
Музыка
А
Английский язык
М
МХК
У
Українська література
И
Информатика
О
Обществознание
Г
Геометрия
falendadmitry
falendadmitry
20.04.2021 14:15 •  Информатика

В симфонический оркестр приняли на работу трёх музыкантов: Дину, Артура и Султана, умеющих играть на скрипке, флейте, альте, кларнете, гобое и трубе. Известно, что: 1. Артур самый высокий. 2. Когда между альтистом и трубачом возникает ссора, Артур мирит их. 3. Дина не умеет играть ни на трубе, ни на гобое. 4. Музыкант, играющий на скрипке, меньше ростом играющего на флейте. 5. Музыканты, играющие на скрипке и флейте, и Дина любят пиццу. На каких инструментах играет каждый из музыкантов, если каждый играет на двух инструментах?

Показать ответ
Ответ:
neste2
neste2
17.11.2022 19:34
Если в нашем распоряжении имеется современная версия PascalABC.Net 3.2, то есть минимум два решить такую задачу. Массив мы будем заполнять случайными числами из интервала [1;98].

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

// PascalABC.NET 3.2, сборка 1353 от 27.11.2016
// Внимание! Если программа не работает, обновите версию!

begin
  var a:=ArrRandom(30,1,98); a.Println;
  Writeln('D=',a.Where(x->x.IsEven).Max-a.Where(x->x.IsOdd).Max)
end.

Пример
29 52 58 75 13 77 63 13 17 6 67 17 53 51 14 93 83 30 81 17 93 58 13 71 78 96 42 66 4 91
D=3

Второй не привязан к упомянутой выше версии языка, т.е. может быть использован в школах, исповедующих "доисторический стиль программирования" ))) Естественно, он длиннее и можно будет сравнить количество строк кода. Алгоритм основан на последовательном переборе элементов массива и одновременном получении максимума среди четных и нечетных его элементов.

const
  n=30;
var
  a:array[1..30] of integer;
  i,a1max,a2max:integer;
begin
  Randomize;
  a1max:=0; a2max:=0;
  for i:=1 to n do begin
    a[i]:=Random(98)+1;
    Write(a[i],' ');
    if a[i] mod 2 <> 0 then
      begin if a1max<a[i] then a1max:=a[i] end
    else
      if a2max<a[i] then a2max:=a[i]
    end;
  Writeln;
  Writeln('D=',a2max-a1max)
end.

Замечу, что данный вариант программы содержит фрагмент, в котором школьники (да и не только школьники) часто делают ошибку.
if a[i] mod 2 <> 0 then
  begin if a1max<a[i] then a1max:=a[i] end
else
  if a2max<a[i] then a2max:=a[i]
Выделенные мной begin и end на первый взгляд не нужны. Но в этом-то и ошибка!
По правилам языка паскаль когда внутри одного if встречается другой if и хотя бы один из них неполный, т.е. не содержит else, последний else относится к самому последнему из if, который без его будет неполным.
Запутанно? Поясню на нашем фрагменте.
Его без этих begin ... end можно понимать так:

if a[i] mod 2 <> 0 then
  if a1max<a[i] then a1max:=a[i]
else
  if a2max<a[i] then a2max:=a[i]

Но можно и так:

if a[i] mod 2 <> 0 then
  if a1max<a[i] then a1max:=a[i]
  else
     if a2max<a[i] then a2max:=a[i]

И паскаль, увы, понимает как раз по последнему варианту. Посему как раз begin ... end решают эту проблему. Но... встречается она не очень часто и о ней быстро забывают. А потом нарываютcя и не могут понять причины.

Что ж, выбор как решать - за вами!
0,0(0 оценок)
Ответ:
baubaubau
baubaubau
29.09.2021 08:18
1 задача:

const n=10;
var 
  min,i: integer;
  a: array[1..n] of integer;
begin
  randomize;
  min:=11;
  for i:=1 to n do begin
    a[i]:=random(1,10);
    write (a[i],' '); // для наглядности. можно удалить
    if  (i mod 2 =1) and (a[i]<min) 
      then min:=a[i];    
  end;
  writeln;
  writeln ('min = ',min)
end.

Пример:
5 4 7 8 6 2 10 4 9 9 
min = 5


2 задача:

const n=10;
var 
  max,count,i: integer;
  a: array[1..n] of integer;
begin
  randomize;
  max:=0;
  count:=0;
  for i:=1 to n do begin
    a[i]:=random(1,10);
    write (a[i],' '); // для наглядности. можно удалить
    if a[i]>max
      then max:=a[i];     
  end;
  for i:=1 to n do 
    if max=a[i] then count:=count+1;
  writeln;
  writeln ('max = ',max);
  writeln ('count = ',count);
end.

Пример:
8 5 3 2 2 10 10 9 3 10 
max = 10
count = 3
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота