Ребята,помогите!!! мне нужно решить 2 задачки.Вот уже сессия через 2 дня начнется..одна на одномерный массив,а другая на двумерный. 1.двумерный:Создать матрицу A[1..N,1..M].Упорядочить ее строки по убыванию их первых элементов. 2.одномерный:Создать массив целых чисел B[1..N].Сформировать новый массив,содержащий суммы элементов,раположенных между соседними локальными минимумами.Заранее большое спасибо!!!
Lapp
5.10.2007 16:35
1. Матрицу как задавать? случайным образом? Элементы целые? Тогда так:
fo j:=1to M for i:=1to N do A[i,j]:=Random(MaxInt);
Что касается сортировки - посмотри тему FAQ (ссылочка вверху, красная), там есть. Единственная загвоздка - как менять строки. Подумай, если не получится - спрашивай.
2. Локальный минимум, как я понимаю, удовлетворяет условию:
((i=1) or (B[i-1]>B[i]) and ((i=N) or (B[i]<B[i+1]))
Проверяй его в цикле и, если выполнено - добавляй число в массив C[j], увеличивая его счетчик j :
Inc(j);
C[j]:=B[i];
Упс, ошибочка... Серое - неправильно. забыл, что спрашивается в условии . Сейчас исправлюсь!
Пока записанное выше условие не выполено, накапливай сумму элементов. Как только оно выполнится - записывай его в новый массив C (как в том фрагменте, что неправильный) и обнуляй переменную для накапливания суммы
volvo
5.10.2007 16:45
Цитата
Единственная загвоздка - как менять строки.
И насчет этого тоже неплохо было бы посмотреть FAQ. Уже делалось.
Lyorri
17.10.2007 1:37
Lapp,с одномерным массивом вроде разобрался,а вот с двумерным пока чет не очень получается.
Вот программка(если конечно ее можно так назвать)
{создать матрицу A[1..N,1..M].упорядочить ее строки по убыванию их первых элементов.}{-------------}{для того,чтобы поменять местами строки в матрице максимально быстро,матрицу нужно задавать как массив строк:}program one;
const
n = 10; { число строк }
m = 8; { число столбцов }type
stroka = array[1 .. m] of integer;
smatrix = array[1 .. n] of stroka;
{при таком определении для того,чтобы поменять местами строки матрицы,достаточно сделать следующее:}procedure sort(var a: smatrix);
var{const} i, j: integer;
var c:stroka;
beginfor i:=2to n dofor j:=n downto i dobeginif c[j-1]>c[j] thenbegin
c:=a[j-1];a[j-1]:=a[j];a[j]:=c;
end;
end;
{вывод готовой матрицы}procedure print(var a: smatrix);
var i, j: integer;
beginfor i := 1to n dobeginfor j := 1to m do
write(a[i,j]:4);
writeln
end;
end;
var
a: smatrix;
i, j: integer;
begin{ заполнение матрицы }
randomize;
for i := 1to n dofor j := 1to m do
a[i,j] := random(100);
{ матрица до обмена }
writeln('до обмена:'); print(a);
{ обмен строк }
sort(a);
{ матрица после обмена }
writeln('после обмена:'); print(a);
end.
М
Пожалуйста, используй теги для программного текста (выделить программу блоком и выбрать нужный тип в меню CODE сверху от окна ввода) -- Lapp
Lapp
17.10.2007 13:07
Давай разбираться. В процедуре sort, что имел в виду под этим:
if c[j-1]>c[j] then
- а?
Во-первых, сравнивать нужно только первые элементы. Во-вторых, строка с служит всего лишь буфером. В самом начале, например, в ней вообще ничего осмысленного нету. В третьих, тебе надо по убыванию, а ты делаешь по возрастанию. Поменяй знак неравенства. Короче, надо так:
if a[j-1][1]<a[j][1] then
Остальное пока не смотрел.
Lyorri
17.10.2007 23:23
хорощо.Буду пробовать...
Lyorri
18.10.2007 1:19
Это ведь сортировка массива методом обмена?
procedure sort(var a: smatrix);
var{const} i, j: integer;
var c:stroka;
beginfor i:=2to n dofor j:=n downto i dobeginif a[j-1][1]<a[j][1] thenbegin
c:=a[j-1][1];a[j-1][1]:=a[j][1];a[j][1]:=c;
end;
end;
end;
Теперь выдает ошибку 26(несоответствие типов)
volvo
18.10.2007 2:06
Цитата
Теперь выдает ошибку 26(несоответствие типов)
Потому что нельзя в переменную типа stroka затолкать Integer, и наоборот... Вот так менять строки местами:
if a[j-1][1]<a[j][1] thenbegin
c:=a[j-1];a[j-1]:=a[j];a[j]:=c;
end;
Lyorri
18.10.2007 3:36
Спасибо,Lapp. Спасибо,volvo. Все работает.. пойду сдаваться..
volvo
18.10.2007 3:54
Нет, не понял... Я тебе написал, как... Ты же все, чего добьешься - это отсортируешь ПЕРВЫЕ элементы по убыванию, а по заданию тебе надо отсортировать СТРОКИ по убыванию их первых элементов. Это разные вещи...
Lyorri
18.10.2007 4:10
VOLVO,так получилось я не то скинул.Не посмотрев... Сейчас все нормально,спасибо.
Lyorri
18.10.2007 12:41
у меня тут есть одна программка.Она рабочая на другом компьютер,а на моем компилируется,но не запускается выдает ошибку 200(деление на ноль)>наверно что то в установках паскаля.Подскажите...
Tan
18.10.2007 13:04
Было бы здорово, если бы ты показал отрывок программы, где эта ошибка фиксируется компилятором иначе как уже неоднократно было сказано "все экстрасенсы в отпуске".