IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Массивы, 2 задачи связанные с массивами
org777
сообщение 15.05.2009 22:24
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Такая проблема: есть 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.



--------------------
Когда вам говорят - "придурок" - это намек на то, что рядом с вами находится дура.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 15.05.2009 23:02
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Вот тут:
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, там есть все про сортировку.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
org777
сообщение 16.05.2009 6:42
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Не выходит... =(


--------------------
Когда вам говорят - "придурок" - это намек на то, что рядом с вами находится дура.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 16.05.2009 7:35
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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) *
Не выходит... =(
- и все, ВСЕ сказано!!

Где, что не выходит - гадайте сами. То ли каменный цветок, а то ли еще чего. Ну вас ваще.. Не приставайте ко мне вашими мелочами в моей нирване.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
org777
сообщение 17.05.2009 11:05
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Lapp, в тебе живет душа поэта good.gif
А по теме: то, что ты мне посоветовал и не выходит...


--------------------
Когда вам говорят - "придурок" - это намек на то, что рядом с вами находится дура.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 17.05.2009 11:09
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата
А по теме: то, что ты мне посоветовал и не выходит...

Так что именно не выходит-то? Сортирует, не сортирует, вообще не компилируется?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
org777
сообщение 17.05.2009 14:36
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Вообще не компилируется


--------------------
Когда вам говорят - "придурок" - это намек на то, что рядом с вами находится дура.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 17.05.2009 21:21
Сообщение #8


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
org777
сообщение 17.05.2009 23:21
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Цитата(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.


--------------------
Когда вам говорят - "придурок" - это намек на то, что рядом с вами находится дура.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 18.05.2009 0:04
Сообщение #10


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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.
Но только боюсь, что твоя преподавательница опять будет недовольна. Ты фактически избегаешь использовать матрицу о которой идет речь в условии. Сделай, как я тебе сделал в первой задаче.

И, пожалуйста, форматируй код по-человечески!! Невозможно же читать, приходится сначала все форматировать..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
org777
сообщение 18.05.2009 9:30
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


по твоему способу он на все вводимые с клавы числа выводит max=16...


--------------------
Когда вам говорят - "придурок" - это намек на то, что рядом с вами находится дура.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.05.2009 9:40
Сообщение #12


Гость






Цитата
по твоему способу он на все вводимые с клавы числа выводит max=16...
А randomize у тебя есть, чтобы при разных запусках программы генерировались разные случайные числа? У тебя ж генерируется все время все одинаковое... Для отладки - хорошо, для работы - не очень. Добавь randomize первой строкой программы, и запускай.
 К началу страницы 
+ Ответить 
org777
сообщение 18.05.2009 10:12
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Короче, получилось вот так вот:
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.

Но саму матрицу он опять не показывает... =(


--------------------
Когда вам говорят - "придурок" - это намек на то, что рядом с вами находится дура.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.05.2009 10:33
Сообщение #14


Гость






Цитата
Но саму матрицу он опять не показывает... =(
А ты ее где-нибудь хотя бы заполняешь (я не говорю о том, что компилятору надо сообщить о своем желании вывести матрицу на экран, он сам этого делать не умеет). Нет. Ты выбрал самый простой путь: заполняешь столбцы, ищешь в них минимумы, потом среди найденного ищешь максимум. Очень удобно, без лишних телодвижений, да? Ан вот оно "золотое правило". Где-то выиграл - значит, где-то проиграл. А проиграл ты в удобстве вывода результатов... В принципе, задача решается так (если принять, что матрица хранится по столбцам, и печатать ее соответственно):
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
сообщение 18.05.2009 10:41
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Да уж, о "золотом правиле" я и не подумал...
Если я правильно понял, ты ее через вектор сделал... Не подумал я...
а что за переменная cols?


--------------------
Когда вам говорят - "придурок" - это намек на то, что рядом с вами находится дура.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.05.2009 10:46
Сообщение #16


Гость






А что за переменная M у тебя была? Как хочу, так и обзываю переменные. Только в моем случае понятно, что это - переменная для перебора столбцов (columns), а в случае M может быть вообще что угодно.
 К началу страницы 
+ Ответить 
org777
сообщение 18.05.2009 10:47
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


ааа, просто я не знал о переменной для перебора столбцов, поэтому и стало любопытно smile.gif
большое спасибо =)


--------------------
Когда вам говорят - "придурок" - это намек на то, что рядом с вами находится дура.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.04.2024 16:42
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"