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

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

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

 
 Ответить  Открыть новую тему 
> двумерные массивы, Очень очень срочно
Lyorri
сообщение 3.10.2007 0:17
Сообщение #1


Новичок
*

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

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


Ребята,помогите!!! мне нужно решить 2 задачки.Вот уже сессия через 2 дня начнется..одна на одномерный массив,а другая на двумерный.
1.двумерный:Создать матрицу A[1..N,1..M].Упорядочить ее строки по убыванию их первых элементов.
2.одномерный:Создать массив целых чисел B[1..N].Сформировать новый массив,содержащий суммы элементов,раположенных между соседними локальными минимумами.Заранее большое спасибо!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 5.10.2007 12:35
Сообщение #2


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

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

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


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];

Упс, ошибочка... Серое - неправильно. забыл, что спрашивается в условии sad.gif. Сейчас исправлюсь!

Пока записанное выше условие не выполено, накапливай сумму элементов. Как только оно выполнится - записывай его в новый массив C (как в том фрагменте, что неправильный) и обнуляй переменную для накапливания суммы


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


Гость






Цитата
Единственная загвоздка - как менять строки.
И насчет этого тоже неплохо было бы посмотреть FAQ. Уже делалось.
 К началу страницы 
+ Ответить 
Lyorri
сообщение 16.10.2007 21:37
Сообщение #4


Новичок
*

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

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


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.


М
Пожалуйста, используй теги для программного текста (выделить программу блоком и выбрать нужный тип в меню CODE сверху от окна ввода)
-- Lapp



Сообщение отредактировано: Lapp - 17.10.2007 8:52
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 17.10.2007 9:07
Сообщение #5


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

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

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


Давай разбираться.
В процедуре sort, что имел в виду под этим:
      if c[j-1]>c[j] then
- а?

Во-первых, сравнивать нужно только первые элементы.
Во-вторых, строка с служит всего лишь буфером. В самом начале, например, в ней вообще ничего осмысленного нету.
В третьих, тебе надо по убыванию, а ты делаешь по возрастанию. Поменяй знак неравенства.
Короче, надо так:
      if a[j-1][1]<a[j][1] then


Остальное пока не смотрел.


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


Новичок
*

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

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


хорощо.Буду пробовать...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lyorri
сообщение 17.10.2007 21:19
Сообщение #7


Новичок
*

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

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


Это ведь сортировка массива методом обмена?

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 - 17.10.2007 21:52
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.10.2007 22:06
Сообщение #8


Гость






Цитата
Теперь выдает ошибку 26(несоответствие типов)
yes2.gif Потому что нельзя в переменную типа stroka затолкать Integer, и наоборот... Вот так менять строки местами:

      if a[j-1][1]<a[j][1] then
begin
c:=a[j-1];a[j-1]:=a[j];a[j]:=c;
end;
 К началу страницы 
+ Ответить 
Lyorri
сообщение 17.10.2007 23:36
Сообщение #9


Новичок
*

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

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


Спасибо,Lapp.
Спасибо,volvo.
Все работает..
пойду сдаваться..

Сообщение отредактировано: Lyorri - 18.10.2007 0:07
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.10.2007 23:54
Сообщение #10


Гость






Нет, не понял... Я тебе написал, как... Ты же все, чего добьешься - это отсортируешь ПЕРВЫЕ элементы по убыванию, а по заданию тебе надо отсортировать СТРОКИ по убыванию их первых элементов. Это разные вещи...
 К началу страницы 
+ Ответить 
Lyorri
сообщение 18.10.2007 0:10
Сообщение #11


Новичок
*

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

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


VOLVO,так получилось я не то скинул.Не посмотрев...
Сейчас все нормально,спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lyorri
сообщение 18.10.2007 8:41
Сообщение #12


Новичок
*

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

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


у меня тут есть одна программка.Она рабочая на другом компьютер,а на моем компилируется,но не запускается выдает ошибку 200(деление на ноль)>наверно что то в установках паскаля.Подскажите...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tan
сообщение 18.10.2007 9:04
Сообщение #13


Профи
****

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

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


Было бы здорово, если бы ты показал отрывок программы, где эта ошибка фиксируется компилятором иначе как уже неоднократно было сказано "все экстрасенсы в отпуске".


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lyorri
сообщение 18.10.2007 9:28
Сообщение #14


Новичок
*

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

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


просто появляется окно с этой ошибкой...и все.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.10.2007 9:36
Сообщение #15


Гость






Цитата
просто появляется окно с этой ошибкой.

Здесь смотрел?
Error 200. Crt & Delay
 К началу страницы 
+ Ответить 
Lyorri
сообщение 18.10.2007 9:55
Сообщение #16


Новичок
*

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

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


VOLVO,спасибо.Посмотрел и разобрался...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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