![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Lyorri |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Ребята,помогите!!! мне нужно решить 2 задачки.Вот уже сессия через 2 дня начнется..одна на одномерный массив,а другая на двумерный.
1.двумерный:Создать матрицу A[1..N,1..M].Упорядочить ее строки по убыванию их первых элементов. 2.одномерный:Создать массив целых чисел B[1..N].Сформировать новый массив,содержащий суммы элементов,раположенных между соседними локальными минимумами.Заранее большое спасибо!!! |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
1. Матрицу как задавать? случайным образом? Элементы целые? Тогда так:
fo j:=1 to M for i:=1 to 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 |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата Единственная загвоздка - как менять строки. И насчет этого тоже неплохо было бы посмотреть FAQ. Уже делалось. |
Lyorri |
![]()
Сообщение
#4
|
|||
![]() Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
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;
begin
for i:=2 to n do
for j:=n downto i do
begin
if c[j-1]>c[j] then
begin
c:=a[j-1];a[j-1]:=a[j];a[j]:=c;
end;
end;
{вывод готовой матрицы}
procedure print(var a: smatrix);
var i, j: integer;
begin
for i := 1 to n do
begin
for j := 1 to m do
write(a[i,j]:4);
writeln
end;
end;
var
a: smatrix;
i, j: integer;
begin
{ заполнение матрицы }
randomize;
for i := 1 to n do
for j := 1 to m do
a[i,j] := random(100);
{ матрица до обмена }
writeln('до обмена:'); print(a);
{ обмен строк }
sort(a);
{ матрица после обмена }
writeln('после обмена:'); print(a);
end.
Сообщение отредактировано: Lapp - |
|||
Lapp |
![]()
Сообщение
#5
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Давай разбираться.
В процедуре sort, что имел в виду под этим: if c[j-1]>c[j] then
- а?Во-первых, сравнивать нужно только первые элементы. Во-вторых, строка с служит всего лишь буфером. В самом начале, например, в ней вообще ничего осмысленного нету. В третьих, тебе надо по убыванию, а ты делаешь по возрастанию. Поменяй знак неравенства. Короче, надо так: if a[j-1][1]<a[j][1] then
Остальное пока не смотрел. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lyorri |
![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
хорощо.Буду пробовать...
|
Lyorri |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Это ведь сортировка массива методом обмена?
procedure sort(var a: smatrix);
var{const} i, j: integer;
var c:stroka;
begin
for i:=2 to n do
for j:=n downto i do
begin
if a[j-1][1]<a[j][1] then
begin
c:=a[j-1][1];a[j-1][1]:=a[j][1];a[j][1]:=c;
end;
end;
end;
Теперь выдает ошибку 26(несоответствие типов) Сообщение отредактировано: Lyorri - |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата Теперь выдает ошибку 26(несоответствие типов) ![]() if a[j-1][1]<a[j][1] then
begin
c:=a[j-1];a[j-1]:=a[j];a[j]:=c;
end;
|
Lyorri |
![]()
Сообщение
#9
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Спасибо,Lapp.
Спасибо,volvo. Все работает.. пойду сдаваться.. Сообщение отредактировано: Lyorri - |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Нет, не понял... Я тебе написал, как... Ты же все, чего добьешься - это отсортируешь ПЕРВЫЕ элементы по убыванию, а по заданию тебе надо отсортировать СТРОКИ по убыванию их первых элементов. Это разные вещи...
|
Lyorri |
![]()
Сообщение
#11
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
VOLVO,так получилось я не то скинул.Не посмотрев...
Сейчас все нормально,спасибо. |
Lyorri |
![]()
Сообщение
#12
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
у меня тут есть одна программка.Она рабочая на другом компьютер,а на моем компилируется,но не запускается выдает ошибку 200(деление на ноль)>наверно что то в установках паскаля.Подскажите...
|
Tan |
![]()
Сообщение
#13
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 559 Пол: Мужской Реальное имя: Бруно Репутация: ![]() ![]() ![]() |
Было бы здорово, если бы ты показал отрывок программы, где эта ошибка фиксируется компилятором иначе как уже неоднократно было сказано "все экстрасенсы в отпуске".
-------------------- Цитата Imagination is more important than knowledge. Albert Einstein |
Lyorri |
![]()
Сообщение
#14
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
просто появляется окно с этой ошибкой...и все.
|
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
|
Lyorri |
![]()
Сообщение
#16
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
VOLVO,спасибо.Посмотрел и разобрался...
|
![]() ![]() |
![]() |
Текстовая версия | 21.04.2025 14:01 |