М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
milana6164
milana6164
22.09.2021 08:30 •  Информатика

Решите на паскаль плз 1. «строки» дано арифметическое выражение, требуется вывести его корректность. корректность = true если скобки расставлены в нем верно, = false если неверно. на корректность влияют только скобки. входные данные: арифметическое выражение в одну строку (до 255 символов) выходные данные: корректность пример: вход выход 1+5+(321-54*[321-321]+21) true 1+5+(321-54*[321-321]+21 false

👇
Ответ:
Ggg7376
Ggg7376
22.09.2021
Идея алгоритма заключается в том, что для проверки корректности строки мы заводим стек, содержащий в себе открывающие скобки.
Посмотрим конкретно на вашем примере:)
1+5+(321-54*[321-321]+21)
Мы идём слева-направо, откидывая все символы, не являющиеся скобками, поскольку они нас не интересуют (как это было указано в вашем условии, почему я это и уточнял)
Затем, натыкаясь на открывающую скобку, добавляем её в стек.
В нашем стеке: "("
Идём дальше, находим открывающую квадратную скобку, кладём в стек
В нашем стеке: "(["
Дальше видим закрывающую квадратную скобку, т.к. у нас последняя добавленная скобка - [, значит, она закрываёт её.
В нашем стеке: "("
Аналогично с круглой скобкой, в итоге в нашем стеке не остаётся ничего, строка корректна:)
В остальных случаях:
Если программа наткнётся на закрывающую скобку, для которой не найдётся открытой в стеке, причём той же самой (для квадратной - квадратная, для круглой - круглая, для фигурной - фигурная) выходит, выражение некорректно, что мы и выводим в качестве ответа. Само собой, если после выполнения программы останутся незакрывшиеся скобки, значит, это выражение тоже является некорректным.
Я не мастер объяснять, но надеюсь, что мой разбор вам:)  Исходный код вложен в ответ.

Решите на паскаль плз 1. «строки» дано арифметическое выражение, требуется вывести его корректность.
4,4(97 оценок)
Открыть все ответы
Ответ:
linayaryshkina
linayaryshkina
22.09.2021

Задание 1.

program z1;

var a: array[0..14] of integer;

i: integer;

begin

   Randomize;

   for i:=0 to 14 do a[i] := Random(101) - 50;

   for i:=0 to 14 do write(a[i], ' ');

end.

Задание 2.

program z2;

var a, b, c: array[0..19] of integer;

i: integer;

begin

   Randomize;

   for i:=0 to 19 do begin

       a[i] := Random(21) - 10;

       b[i] := Random(21) - 10;

       c[i] := a[i] + b[i];

   end;

   for i:=0 to 19 do write(a[i], ' ');

   writeln();

   for i:=0 to 19 do write(b[i], ' ');

   writeln();

   for i:=0 to 19 do write(c[i], ' ');

end.

Задание 3.

program z3;

var a: array[0..19] of integer;

i: integer;

begin

   a[0] := 1;

   a[1] := 1;

   for i:=2 to 19 do begin

       a[i] := a[i-1] + a[i-2];

   end;

   for i:=0 to 19 do write(a[i], ' ');

end.

4,4(83 оценок)
Ответ:
Vlipli779
Vlipli779
22.09.2021
Var f:file of integer;   
 a,i,k,n:integer;
begin
randomize;
assign(f,'file');
rewrite(f);
repeat
write('Четное количество элементов: ');
readln(n);
until(n>1) and (n mod 2=0);
for i:=1 to n do
 begin 
 a:=random(100); 
 write(f,a); 
end;
writeln('Содержание исходного файла:');
reset(f);
while not eof(f) do
 begin 
 read(f,a); 
write(a,' ');
 end;
close(f);
writeln;
reset(f);
seek(f,filesize(f)div 2);
truncate(f);
writeln('Содержание измененного файла:');
reset(f);
while not eof(f) do
 begin
  read(f,a); 
 write(a,' '); 
end;
close(f);
readln
end.
4,6(28 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ