Помощь - Поиск - Пользователи - Календарь
Полная версия: Массивы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
org777
Такая проблема: есть 2 задачи, выложенные в фотках внизу. Текст вроде написал... но не хочет работать =(((
Помогите, укажите на мои ошибки пожалуйста и подскажите, как правильно все это сделать.
Заранее благоадрен.
Изображение
Program var13;
type ar=array[1..100] of integer;
var m,z,j,n1:integer;
b:ar;
a1:array[1..100] of integer;
procedure sort(n:integer; var a:ar);
var k,i,t:integer;
begin
for i:=1 to n do read (a[i]);
for k:=1 to n-1 do
for i:=1 to n-1 do
if a[i]>a[i+1] then
begin
t:=a[i];
a[i]:=a[i+1];
a[i+1]:=t;
end;
end;
begin
writeln('vvedite kol-vo el-ov v stroke: ');
readln(n1);
writeln('vvedite kol-vo strok: ');
readln(z);
for m:=1 to z do
begin
writeln('vvedite stroku: ');
sort(n1,b);
for j:=1 to n1 do
a1[m,j]:=b[j];
end;
writeln('massiv: ');
for m:=1 to z do
begin
for j:=1 to n1 do
write(a1[m,j],' ');
writeln;
end;
end.

Изображение
Program var25;
const n=0;
type ar=array[1..100,1..100] of integer;
var s,m,z,j,n1,m1:integer;
b,c:ar;
procedure init(var a:ar);
var i:integer;
function max(a:ar):integer;
var i,max1:integer;
function min(a:ar):integer;
var i,min1:integer;
begin
write('vvedite chislo: ');
readln(n1);
randomize;
for i:=1 to n1 do
begin
for j:=1 to m1 do
begin
a[i,j]:=random(100)-random(100);
write(a[i,j]:8);
end;
write;writeln;
end;
for i:=1 to n do
begin
for j:=1 to m do
readln(a[i,j]);
end;
begin
max1:=a[1,1];
for i:=2 to n do
if a[i,j]>max1 then max1:=a[i,j];
max:=max1;
end;
begin
min1:=a[1,1];
for i:=2 to n do
if a[i,j]<min1 then min1:=a[i,j];
min:=min1;
end;
begin
writeln('kol-vo el-ov v stolbce: ',n);
writeln('vvedite kol-vo stolbcov: ');
readln(z);
for m:=1 to z do
begin
init(b);
c[n1,m1]:=min(b);
end;
s:=max©;
writeln('max= ',s);
readln;
end.

Lapp
Вот тут:
for k:=1 to n-1 do
for i:=1 to n-1 do
if a[i]>a[i+1] then
begin
t:=a[i];
a[i]:=a[i+1];
a[i+1]:=t;
end;
- ты, во-первых, сортируешь по возрастанию, а во-вторых - неправильно.
Вот как-то так попробуй:
for k:=2 to n do for i:=k downto 2 do if a[i]>a[i-1] then begin
t:=a[i];
a[i]:=a[i+1];
a[i+1]:=t;
end;
А вообще загляни в FAQ, там есть все про сортировку.
org777
Не выходит... =(
Lapp
Цитата(org777 @ 16.05.2009 7:42) *
Не выходит... =(
Обожаю я "народный фольклор". Вот есть в нем что-то такое таинственное, зовущее за собой! Вот придет народ, скажет: "замолаживает.." - и сразу все так становится несказанно обворожительно.. Будто к вековечному кладезю мудрости прикоснулся. И не надо слов - одни чувства! Чувствуется величие, фундаментальность, основательность.. Вы только вслушайтесь:
Цитата(org777 @ 16.05.2009 7:42) *
Не выходит... =(
Ведь целая поэма, а?? Вслушайтесь только - ведь сразу все ясно! Ясно, что вот, наверное, вошло.. а вот - не выходит! Где не выходит, что не выходит - это же не важно в конце концов - ну что вы мелочитесь??
Цитата(org777 @ 16.05.2009 7:42) *
Не выходит... =(
- и сразу затихают бури, спят моря, вырастает заря до небес..
Цитата(org777 @ 16.05.2009 7:42) *
Не выходит... =(
- и смятение чувств преполняет чашу океанов земных,
Цитата(org777 @ 16.05.2009 7:42) *
Не выходит... =(
- больше нетгоря, боли, несбывшихся мечт, два слова только:
Цитата(org777 @ 16.05.2009 7:42) *
Не выходит... =(
- да и не два даже, а всего полтора:
Цитата(org777 @ 16.05.2009 7:42) *
Не выходит... =(
- и все, ВСЕ сказано!!

Где, что не выходит - гадайте сами. То ли каменный цветок, а то ли еще чего. Ну вас ваще.. Не приставайте ко мне вашими мелочами в моей нирване.
org777
Lapp, в тебе живет душа поэта good.gif
А по теме: то, что ты мне посоветовал и не выходит...
Ozzя
Цитата
А по теме: то, что ты мне посоветовал и не выходит...

Так что именно не выходит-то? Сортирует, не сортирует, вообще не компилируется?
org777
Вообще не компилируется
Lapp
Цитата(org777 @ 17.05.2009 15:36) *
Вообще не компилируется
О! Партизан заговорил! smile.gif

Ты пойми, что отсутствием информации по тому, что именно происходит, ты сам себе мешаешь. Думаешь, все сразу бросились компилировать твой код? Я глянул, увидел ошибку в сортировке, исправил (правда, у меня там ошибочка - знаки попутал)) - откуда мне знать, что она не компилируется? Кстати, пиши, какую именно ошибку выдает и в какой строке..

По делу.. У тебя массив a1 описан одномерным, а используешь ты его как двумерный. И зачем ты вводишь саму строку в процедуре? Она должна только сортировать.

Короче, вот. И обрати внимание на правильное форматирование и постарайся его придерживаться.
Program var13;
type
ar=array[1..100] of integer;
var
m,z,i,n1:integer;
a1:array[1..100] of ar;

procedure sort(n:integer; var a:ar);
var
k,i,t:integer;
begin
for k:=2 to n do for i:=k downto 2 do if a[i]>a[i-1] then begin
t:=a[i];
a[i]:=a[i-1];
a[i-1]:=t;
end;
end;

begin
writeln('vvedite kol-vo el-ov v stroke: ');
readln(n1);
writeln('vvedite kol-vo strok: ');
readln(z);
for m:=1 to z do begin
writeln('vvedite stroku: ');
for i:=1 to n1 do read (a1[m,i]);
sort(n1,a1[m]);
end;
writeln('massiv: ');
for m:=1 to z do begin
for i:=1 to n1 do write(a1[m,i]:4);
writeln;
end;
end.
org777
Цитата(Lapp @ 17.05.2009 22:21) *

О! Партизан заговорил! smile.gif

Извиняюсь smile.gif Просто тогда времени не было, да и не подумал, если честно... Моя оплошность smile.gif
За задачку спасибо большое!
А вот что со 2 неверно? Я ее сделал, она у меня компилировалась, но матрицу приходилось вводить вручную, и это преподу не понравилось. Они потребовала, чтобы матрица выводилась рандомно. И вот на этом я и завис... Вот самый первый мой рабочий вариант:
Program var25;
const n=4;
type ar=array[1..100] of integer;
var s,m,z,j,n1:integer;
b,c:ar;
procedure init(var a:ar);
var i:integer;
begin
writeln('vvedite chislo: ');
for i:=1 to n do
readln(a[i]);
end;
function max (a:ar):integer;
var i,max1:integer;
begin
max1:=a[1];
for i:=2 to n do
if a[i]>max1 then max1:=a[i];
max:=max1;
end;
function min(a:ar):integer;
var i,min1:integer;
begin
min1:=a[1];
for i:=2 to n do
if a[i]<min1 then min1:=a[i];
min:=min1;
end;
begin
writeln('kol-vo el-ov v stolbce: ',n);
writeln('vvedite kol-vo stolbcov: ');
readln(z);
for m:=1 to z do
begin
init(b);
c[m]:=min(b);
end;
s:=max©;
writeln('max= ',s);
end.
Lapp
Цитата(org777 @ 18.05.2009 0:21) *
матрицу приходилось вводить вручную, и это преподу не понравилось. Они потребовала, чтобы матрица выводилась рандомно. И вот на этом я и завис...
Вводить рандомно всегда проще, чем вручную.
Program var25;
const
n=4;
type
ar=array[1..100] of integer;
var
s,m,z,j,n1:integer;
b,c:ar;

function max (a:ar):integer;
var
i,max1:integer;
begin
max1:=a[1];
for i:=2 to n do if a[i]>max1 then max1:=a[i];
max:=max1;
end;

function min(a:ar):integer;
var
i,min1:integer;
begin
min1:=a[1];
for i:=2 to n do
if a[i]<min1 then min1:=a[i];
min:=min1;
end;

begin
writeln('kol-vo el-ov v stolbce: ',n);
writeln('vvedite kol-vo stolbcov: ');
readln(z);
for m:=1 to z do begin
for j:=1 to n do b[j]:=Random(100); {сл. ч. в диапазоне 0 - 99 }
c[m]:=min(b);
end;
s:=max©;
writeln('max= ',s);
end.
Но только боюсь, что твоя преподавательница опять будет недовольна. Ты фактически избегаешь использовать матрицу о которой идет речь в условии. Сделай, как я тебе сделал в первой задаче.

И, пожалуйста, форматируй код по-человечески!! Невозможно же читать, приходится сначала все форматировать..
org777
по твоему способу он на все вводимые с клавы числа выводит max=16...
volvo
Цитата
по твоему способу он на все вводимые с клавы числа выводит max=16...
А randomize у тебя есть, чтобы при разных запусках программы генерировались разные случайные числа? У тебя ж генерируется все время все одинаковое... Для отладки - хорошо, для работы - не очень. Добавь randomize первой строкой программы, и запускай.
org777
Короче, получилось вот так вот:
Program var25;
const
n=4;
type
ar=array[1..100] of integer;
var
s,m,z,j,i,m1,n1:integer;
b,c:ar;
a:array[1..100,1..100] of integer;

procedure sort(n:integer; var a:ar);
var
k,i,t:integer;
begin
for k:=2 to n do for i:=k downto 2 do if a[i]>a[i-1] then begin
t:=a[i];
a[i]:=a[i-1];
a[i-1]:=t;
end;
end;

function max (a:ar):integer;
var
i,max1:integer;
begin
max1:=a[1];
for i:=2 to n do if a[i]>max1 then max1:=a[i];
max:=max1;
end;

function min(a:ar):integer;
var
i,min1:integer;
begin
min1:=a[1];
for i:=2 to n do
if a[i]<min1 then min1:=a[i];
min:=min1;
end;

begin
randomize;
for i:=1 to n1 do
begin
for j:=1 to m1 do
begin
a[i,j]:=random(100)-random(100);
write(a[i,j]:8);
end;
write;writeln;
end;
for i:=1 to n do
begin
for j:=1 to m do
readln(a[i,j]);
end;
end;

begin
writeln('kol-vo el-ov v stolbce: ',n);
writeln('vvedite kol-vo stolbcov: ');
readln(z);
for m:=1 to z do begin
for j:=1 to n do b[j]:=Random(100);
c[m]:=min(b);
end;
s:=max©;
writeln('max= ',s);
readln;
end.

Но саму матрицу он опять не показывает... =(
volvo
Цитата
Но саму матрицу он опять не показывает... =(
А ты ее где-нибудь хотя бы заполняешь (я не говорю о том, что компилятору надо сообщить о своем желании вывести матрицу на экран, он сам этого делать не умеет). Нет. Ты выбрал самый простой путь: заполняешь столбцы, ищешь в них минимумы, потом среди найденного ищешь максимум. Очень удобно, без лишних телодвижений, да? Ан вот оно "золотое правило". Где-то выиграл - значит, где-то проиграл. А проиграл ты в удобстве вывода результатов... В принципе, задача решается так (если принять, что матрица хранится по столбцам, и печатать ее соответственно):
Program var25;
const
n = 4;
type
vec = array[1 .. 100] of integer;
mx = array[1 .. 100] of vec;

function max (const a: vec; n: integer):integer;
var
i, max1:integer;
begin
max1:=a[1];
for i:=2 to n do if a[i]>max1 then max1:=a[i];
max:=max1;
end;
function min(const a: vec; n: integer):integer;
var
i,min1:integer;
begin
min1:=a[1];
for i:=2 to n do
if a[i]<min1 then min1:=a[i];
min:=min1;
end;

var
cols, s,z,j,n1:integer;
c: vec;
A: mx;

begin
randomize;
writeln('kol-vo el-ov v stolbce: ',n);
writeln('vvedite kol-vo stolbcov: ');
readln(z);
for cols := 1 to z do begin
for j := 1 to n do a[cols, j] := Random(100);
c[cols] := min(a[cols], n);
end;

for j := 1 to n do begin
for cols := 1 to z do
write(a[cols, j]:4);
writeln;
end;
s:=max( c, z );
writeln('max= ',s);
end.
org777
Да уж, о "золотом правиле" я и не подумал...
Если я правильно понял, ты ее через вектор сделал... Не подумал я...
а что за переменная cols?
volvo
А что за переменная M у тебя была? Как хочу, так и обзываю переменные. Только в моем случае понятно, что это - переменная для перебора столбцов (columns), а в случае M может быть вообще что угодно.
org777
ааа, просто я не знал о переменной для перебора столбцов, поэтому и стало любопытно smile.gif
большое спасибо =)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.