24.12.2011, 21:54 | #1 (permalink) | ||
Новичок
Регистрация: 01.11.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите с объяснением задач
Ребят помогите пожалуйста с объяснением каждой строки в задачах пожалуйста, если можно по подробнее, очень нуждаюсь в этом. Буду душевно благодарен. ---1. (Двумерный массив)Дан двумерный массив размера M x N. Найти максимальный среди минимальных элементов ее строк. Цитата:
2.(Строки)Даны строки S и S0. Найти количество вхождений строки S0 в строку S. Цитата:
|
||
24.12.2011, 21:54 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Данные темы скорее всего помогут вам разобраться в вашем вопроса Помогите с диспетчером задач Помогите в решение задач по электронике Visual Basic, помогите с решением задач Паскаль. Помогите с решением задач |
25.12.2011, 10:28 | #3 (permalink) |
Специалист
Регистрация: 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. {конец программы} |
25.12.2011, 11:04 | #4 (permalink) |
Специалист
Регистрация: 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. {всё!} |
25.12.2011, 11:34 | #5 (permalink) |
Новичок
Регистрация: 01.11.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
От души за помощь.
Выручил, еще раз огромное тебе спасибк. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|