Страница 1 из 2
Не могу понять
Добавлено: 10 мар 2007, 06:57
EgorX
подскажите, что не так,
Дана последовательность целых чисел. Найти наибольший и наимень¬ший из номеров ее членов, попавших в заданный интервал.
Код: Выделить всё
Program ZD_3;
uses crt;
var
a:array[1..10] of integer;
b:array[1..10] of integer;
j,i:word;
P,Q:integer;
min,max:integer;
begin
clrscr;
randomize;
writeln('Matrica');
for i:=1 to 10 do
begin
a[i]:=10+random(90);
write(' ', a[i]);
end;
writeln;
write ('Vvedite nachalo intervala = ');
readln (P);
write ('Vvedite konec intrvala = ');
readln (Q);
for i:=1 to 10 do
begin
if ((a[i])>(P)) and ((a[i])<(Q)) then
a[i]:=b[i];
end;
for i:=1 to 10 do
begin
write(b[i]);
end;
for i:=1 to 10 do
if b[i]<min then
min:=b[i];
for i:=1 to 10 do
if b[i]>max then
max:=b[i];
readln;
writeln ('Min. element', min);
writeln ('Max. element', max);
readln;
end.
Re: Не могу понять
Добавлено: 10 мар 2007, 11:31
Blood_Magic
лажу написал.
Re: Не могу понять
Добавлено: 10 мар 2007, 12:27
EgorX
Blood_Magic, так я понимаю что не правильно, лучше бы помог. а не писл бы что лажу написал
Re: Не могу понять
Добавлено: 10 мар 2007, 23:04
Колядин Максим
EgorX писал(а): подскажите, что не так,
Вообще-то, здесь много чего не так. Например,
EgorX писал(а):Код: Выделить всё
...
a[i]:=b[i]][/quote]
Здесь ты заполненному массиву (a) присваиваешь элементы пустого (b). После этой операции оба массива обнулятся. Нужно наоборот:
[code]
...
b[i]:=a[i];
...
EgorX писал(а):Код: Выделить всё
...
if ((a[i])>(P)) and ((a[i])<(Q)) then
...
Проще сделать так:
EgorX писал(а):Код: Выделить всё
for i:=1 to 10 do
if b[i]<min then
min:=b[i]]>max then
max:=b[i];
readln;
Результат будет неправильным, так как не задан интервал поиска. Пусть минимальный и максимальный элементы будут равны первому числу заданного интервала:
Код: Выделить всё
max:=b[p];
min:=b[p];
for i:=p to q do
if b[i]<min then min:=b[i];
for i:=p to q do
if b[i]>max then max:=b[i];
readln;
Да и вообще, по-моему массив
B здесь лишний. Но... раз уж ты его объявил, значит, наверное, понадобится. Не буду угадывать. Вот итоговый код программы:
Код: Выделить всё
Program ZD_3;
uses crt;
var
a:array[1..10] of integer;
b:array[1..10] of integer;
j,i:word;
P,Q:integer;
min,max:integer;
begin
clrscr;
randomize;
writeln('Matrica');
for i:=1 to 10 do
begin
a[i]:=10+random(90);
write(' ', a[i]);
end;
writeln;
write ('Vvedite nachalo intervala = ');
readln (P);
write ('Vvedite konec intrvala = ');
readln (Q);
for i:=p to q do
begin
b[i]:=a[i];
end;
for i:=p to q do
begin
write(' ',b[i]);
end;
min:=b[p];
max:=b[p];
for i:=p to q do
if b[i]<min then min:=b[i];
for i:=p to q do
if b[i]>max then max:=b[i];
readln;
writeln ('Min. element - ', min);
writeln ('Max. element - ', max);
readln;
end.
Re: Не могу понять
Добавлено: 11 мар 2007, 06:16
EgorX
Колядин Максим, Либо у меня с паскалемчто то не то ... но у меня не работает =((
Re: Не могу понять
Добавлено: 11 мар 2007, 07:30
EgorX
Колядин Максим, спаибо большое, усе ...разобрался ... сделал с одним массивом
Код: Выделить всё
Program ZD_3;
uses crt;
var
a:array[1..10] of integer;
j,i:word;
P,Q:integer;
min,max:integer;
begin
clrscr;
randomize;
writeln('Matrica');
min:=100;
for i:=1 to 10 do
begin
a[i]:=10+random(90);
write(' ', a[i]);
end;
writeln;
write ('Vvedite nachalo intervala = ');
readln (P);
write ('Vvedite konec intrvala = ');
readln (Q);
for i:=1 to 10 do
begin
if (a[i]>P) and (a[i]<Q) then
begin
write (' ',a[i]);
begin
if a[i]<min then min:=a[i];
end;
begin
if a[i]>max then max:=a[i]
end;
end;
end;
writeln;
writeln ('Min. element = ', min);
writeln ('Max. element = ', max);
readln;
end.
Re: Не могу понять
Добавлено: 11 мар 2007, 12:38
Колядин Максим
В твоей программе минимальный элемент всегда будет равен 100, а максимальный 0. Может быть я неправильно понял условие задачи, но по моему мнению, задача выполнена неправильно на основании:
Например, мы ввели интервал поиска элемента от 5 до 6 (P=5; Q=6). Массив заполнен следующим образом:
11 12 13 14 15 16 17 18 19 20
Минимальный элемент в настоящем интервале равен 15, максимальный - 16.Придерживаясь твоего условия, а оно выглядит так:
если (a[15]>5) и (a[15]<6) тогда ...
Сам посуди, что логическое значение этого условия -
false, и программа не будет искать min/max элементы...
Приведи примеры входных и выходных данных.
Re: Не могу понять
Добавлено: 11 мар 2007, 12:53
EgorX
Колядин Максим, ы ... согласен ... не доработана задача .... но мне больше не нужно ... ну посмотрим что завтра на это мне скажут ...
Re: Не могу понять
Добавлено: 11 мар 2007, 12:57
EgorX
Колядин Максим, кстати .... вот я никак не пойму как происходит сортировка данных в массиве ... вот мне нужно в 2D массиве отсортировать столбцы ... по убыванию ... вот не знаешь где можно подробно прочитать про сортировку
Re: Не могу понять
Добавлено: 11 мар 2007, 18:12
Колядин Максим
EgorX писал(а):Колядин Максим, кстати .... вот я никак не пойму как происходит сортировка данных в массиве ...
Вот пример сортировки массива по возрастанию, так называемым "пузырьковым методом".
Код: Выделить всё
var m: array [1..10] of integer]:=i; {1,2,3...10}
repeat
done:=true;
for i:= 1 to 10 do if m[i]<>m[i+1] then begin
buf:=m[i];
m[i]:=m[i+1];
m[i+1]:=buf;
done:=false;
end;
until done;
end.
EgorX писал(а): вот мне нужно в 2D массиве отсортировать столбцы ... по убыванию ... вот не знаешь где можно подробно прочитать про сортировку
Попробуй тут:
http://www.pascaler.ru