Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 24.12.2011, 21:54   #1 (permalink)
mango
Новичок
 
Регистрация: 01.11.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Exclamation Помогите с объяснением задач

Ребят помогите пожалуйста с объяснением каждой строки в задачах пожалуйста, если можно по подробнее, очень нуждаюсь в этом. Буду душевно благодарен.
---
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[i]:=a[i,1];
for j:=1 to m do
if b[i] < a[i,j], then
b[i]:=a[i,j];
writeln(' ');
end;
min:=b[1];
for i:=1 to n do begin
if b[i] < min then min:=a[i];
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.
mango вне форума   Ответить с цитированием

Старый 24.12.2011, 21:54
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Данные темы скорее всего помогут вам разобраться в вашем вопроса

Помогите с диспетчером задач
Помогите в решение задач по электронике
Visual Basic, помогите с решением задач
Паскаль. Помогите с решением задач

Старый 24.12.2011, 23:39   #2 (permalink)
mango
Новичок
 
Регистрация: 01.11.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Паскаль здесь)
mango вне форума   Ответить с цитированием
Старый 25.12.2011, 10:28   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Код:
const 
 n=3; {количество строк} 
 m=4; {количество столбцов}
var 
 a: array [1...n, 1...m] of integer; {задание целочисленной матрицы}
 b: array [1...m] of integer; {ОШИБКА! Взята не та константа. Строку - убрать!}
 b: array [1...n] of integer; {задание целочисленного вектора с количеством элементов, равным количеству СТРОК матрицы}
 max i,j: integer; {После max отсутствует запятая. Строку - убрать!}
 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}
    if b[i] < a[i,j], then {ГРУБЕЙШАЯ ошибка: запятая после квадратной скобки НЕДОПУСТИМА! Строку - убрать!}
     if b[i] < a[i,j] then b[i]:=a[i,j]; {путём последовательного перебора элемент вектора b[i] получает значение наименьшего элемента строки}
   writeln('   '); {Абсолютно лишняя ненужная строка. Убрать!}
  end; {конец цикла}
 min:=b[1]; {Требуется найти МАКСИМАЛЬНЫЙ элемент из полученных минимальных, а не минимальный! Строку - убрать!}
 max:=b[1]; {присвоение исходного значения искомому максимуму}
 for i:=1 to n do {организация цикла по элементам вектора b; опять же - лучше начинать с i:=2} 
  begin {лишняя строка - убрать!}
  if b[i] < min then min:=a[i]; {мало того, что вместо максимальных идет отбор по минимальным, так еще и вместо b[i] всунуто a[i]. Строку - убрать!}
  if b[i] > max then max:=b[i]; {путём последовательного перебора max получает значение наименьшего элемента вектора b}
 readkey; {Абсолютно недопустимо! Readkey - это команда вспомогательного модуля CRT, каковой у Вас не присоединен. 
   Если хотите пользоваться командами CRT, то соблаговолите в самом начале программы поставить uses CRT; 
   Впрочем, здесь это не нужно: достаточно воспользоваться стандартным оператором Readln. А потому строку - убрать!}
 writeln('Max= ',max); {вывод результата (между прочим, у Вас напрочь отсутствующий!)}
 readln {остановка программы}
end. {конец  программы}
Vladimir_S вне форума   Ответить с цитированием
Старый 25.12.2011, 11:04   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Теперь по второй задаче. Там мало того, что куча ошибок (достаточно заметить, что переменные 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. {всё!}
Vladimir_S вне форума   Ответить с цитированием
Старый 25.12.2011, 11:34   #5 (permalink)
mango
Новичок
 
Регистрация: 01.11.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

От души за помощь.
Выручил, еще раз огромное тебе спасибк.
mango вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 01:22.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.