• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите с объяснением задач

  • Автор темы Автор темы mango
  • Дата начала Дата начала

mango

Ученик
Регистрация
1 Ноя 2011
Сообщения
4
Реакции
0
Баллы
0
Помогите с объяснением задач

Ребят помогите пожалуйста с объяснением каждой строки в задачах пожалуйста, если можно по подробнее, очень нуждаюсь в этом. Буду душевно благодарен.​
---
1. (Двумерный массив)Дан двумерный массив размера M x N. Найти максимальный среди минимальных элементов ее строк.

const n=3; m=4;
var a: array [1...n, 1...m] of integer;
b: array [1...m] of integer;
max i,j: integer;
begin
randomize;
for i:=1 to n do
begin
for j:=1 to m do
begin
a[i,j]:=random(10);
write (a[i,j]:4);
end;
writeln
end;
for i:=1 to n do
begin
b:=a[i,1];
for j:=1 to m do
if b < a[i,j], then
b:=a[i,j];
writeln(' ');
end;
min:=b[1];
for i:=1 to n do begin
if b < min then min:=a;
readkey;
end.
---
2.(Строки)Даны строки S и S0. Найти количество вхождений строки S0 в строку S.

var
S,S0 : string;
flag : boolean;
cout : integer;
begin
write ('введите S:');
readln(S);
write ('введите S0:');
readln (S0);
flag:=false;
if (length (S) < length (S0)) then
write (flag);
else
begin
cout:=0;
temp:=copy (S,1,length (S0));
for i:=2 to length (S)-length(S0) do
begin
inc(cout);
temp:=copy (S,i,length (S0));
end;
else;
begin
temp:=copy (S,i,lenght (S0));
end;
end;
end;
writeln (cout);
end.
 
Паскаль здесь)
 
Код:
const 
 n=3; {количество строк} 
 m=4; {количество столбцов}
var 
 a: array [1...n, 1...m] of integer; {задание целочисленной матрицы}
 [COLOR=Red]b: array [1...m] of integer; {ОШИБКА! Взята не та константа. Строку - убрать!}[/COLOR]
 b: array [1...n] of integer; {задание целочисленного вектора с количеством элементов, равным количеству СТРОК матрицы}
[COLOR=Red] max i,j: integer; {После max отсутствует запятая. Строку - убрать!}[/COLOR]
 max,i,j: integer; {Задание служебных переменных}
begin {Начало программы}
 randomize; {Инициализация генератора случайных чисел}
 for i:=1 to n do {Организация цикла по строкам}
  begin {начало цикла по строкам}
   for j:=1 to m do  {Организация цикла по столбцам}
    begin {начало цикла по столбцам}
     a[i,j]:=random(10); {присвоение случайного значения элементу матрицы}
     write (a[i,j]:4); {вывод элемента матрицы на экран}
    end; {конец цикла по столбцам}
   writeln {перевод строки на экране}
  end; {конец цикла по строкам}
 for i:=1 to n do {организация цикла поиска минимальных элементов строк, сохраняемых в векторе b}
  begin {начало цикла}
   b[i]:=a[i,1]; {i-тому элементу вектора b присваивается исходное значение первого элемента строки матрицы}
   for j:=1 to m do {цикл по столбцам; можно и так, но красивее начинать с j:=2}
 [COLOR=Red]   if b[i] < a[i,j], then {ГРУБЕЙШАЯ ошибка: запятая после квадратной скобки НЕДОПУСТИМА! Строку - убрать!}[/COLOR]
     if b[i] < a[i,j] then b[i]:=a[i,j]; {путём последовательного перебора элемент вектора b[i] получает значение наименьшего элемента строки}
[COLOR=Red]   writeln('   '); {Абсолютно лишняя ненужная строка. Убрать!}[/COLOR]
  end; {конец цикла}
 [COLOR=Red]min:=b[1]; {Требуется найти МАКСИМАЛЬНЫЙ элемент из полученных минимальных, а не минимальный! Строку - убрать!}[/COLOR]
 max:=b[1]; {присвоение исходного значения искомому максимуму}
 for i:=1 to n do {организация цикла по элементам вектора b; опять же - лучше начинать с i:=2} 
 [COLOR=Red] begin {лишняя строка - убрать!}[/COLOR]
[COLOR=Red]  if b[i] < min then min:=a[i]; {мало того, что вместо максимальных идет отбор по минимальным, так еще и вместо b[i] всунуто a[i]. Строку - убрать!}[/COLOR]
  if b[i] > max then max:=b[i]; {путём последовательного перебора max получает значение наименьшего элемента вектора b}
[COLOR=Red] readkey; {Абсолютно недопустимо! Readkey - это команда вспомогательного модуля CRT, каковой у Вас не присоединен. 
   Если хотите пользоваться командами CRT, то соблаговолите в самом начале программы поставить uses CRT; 
   Впрочем, здесь это не нужно: достаточно воспользоваться стандартным оператором Readln. А потому строку - убрать!}[/COLOR]
 writeln('Max= ',max); {вывод результата (между прочим, у Вас напрочь отсутствующий!)}
 readln {остановка программы}
end. {конец  программы}
 
Теперь по второй задаче. Там мало того, что куча ошибок (достаточно заметить, что переменные i и temp не определены вовсе, что в Паскале недопустимо), так еще и путь решения этой глупейшей задачки выбран типа "достать правое ухо через-под левое колено". А потому предлагаю свой вариант, куда более простой, компактный и с комментариями.
Код:
VAR
 S,S0,T:String; {описание строковых переменных}
 i,n:byte; {описание целых переменных}
Begin {начало программы}
 Writeln('Enter S:'); {экранная подсказка ввода строки S}
 Readln(S); {ввод строки S}
 Writeln('Enter S0:'); {экранная подсказка ввода строки S0}
 Readln(S0); {ввод строки S0}
 n:=0; {ввод исходного количества искомого числа вхождений}
 For i:=1 to Length(S)-Length(S0)+1 do {организация цикла по всем номерам строки S,
начиная с первого и до разности длин строк S и S0 плюс 1; 
дальнейшая проверка - бессмысленна)}
  begin {начало цикла}
   T:=Copy(S,i,Length(S0)); {переменной T присваивается значение части строки S длиной, 
   равной длине S0 и начинающейся с текущего значения переменной цикла}
   If T=S0 then INC(n); {проверка совпадения строк T и S0; если совпали, то значение счетчика n увеличивается на 1}
  end; {конец цикла}
 Writeln(n,' times'); {вывод результата на экран}
 Readln; {останов}
End. {всё!}
 
От души за помощь.
Выручил, еще раз огромное тебе спасибк.
 
Назад
Сверху