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

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

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

 
 Ответить  Открыть новую тему 
> преоброзование массива, помогите плиз
goatsee
сообщение 22.06.2007 0:16
Сообщение #1


Гость






как из 2х мерного массива, сделать 1мерный, если размеры совтадают??? жду ответа, буду сидеть до утра=(
 К началу страницы 
+ Ответить 
volvo
сообщение 22.06.2007 0:45
Сообщение #2


Гость






TypeCast-ом...

type
arr_2d = array[1 .. 10, 1 .. 10] of integer;
arr_1d = array[1 .. 100] of integer;

var
mx: arr_2d;
...
arr_1d(mx)[1] := 10;
...

Идея понятна? При записи arr_1d(mx) матрица рассматривается как одномерный массив...

Сообщение отредактировано: volvo - 22.06.2007 0:45
 К началу страницы 
+ Ответить 
goatsee
сообщение 22.06.2007 1:53
Сообщение #3


Гость






что то не выходит, а другова способа нет?
 К началу страницы 
+ Ответить 
volvo
сообщение 22.06.2007 1:57
Сообщение #4


Гость






Не знаю, что там у тебя не выходит... А насчет другого способа - если у тебя ЭТО не получилось, с чего ты взял, что ДРУГОЕ получится? Ну, попробуй так:

type
arr_2d = array[1 .. 10, 1 .. 10] of integer;
arr_1d = array[1 .. 100] of integer;

var
mx: arr_2d;
arr: arr_1d absolute mx; { <--- физически накладываешь массив на матрицу }

Все, дальше можно работать с массивом arr, ибо как массив так и матрица находятся в одном и том же месте в памяти...
 К началу страницы 
+ Ответить 
goatsee
сообщение 22.06.2007 7:01
Сообщение #5


Гость






volvo супер 2рой вариант сработал=)
один вопрос остался
Код

program practuka;
uses crt;
type
  arr_2d=  array[1 .. 2, 1 .. 2] of integer;
  arr_1d=  array[1 .. 4] of integer;
var  f: text; x,i,j:integer;
mx: arr_2d;
arr: arr_1d absolute mx;
begin
assign(f, 'matr.txt');
rewrite(f);
clrscr;
begin
for i:=1 to 4 do
begin
write('3HA4EHUE',i,':');
read(arr[i]);
writeln;
end;
end;
for j := 1 to 4 do
for i := 1 to 4 do
if arr[i]<arr[i+1] then
begin
x:=arr[i];
arr[i]:=arr[i+1];
arr[i+1]:=x;
end;
writeln;
for i:=1 to 4 do
writeln(f,'(',arr[i],')','(',i,',',j,')'); {в файле выводятся координаты}
close(f);
end.

проблема в том, что координаты с 1мевого массива, как переделать что б в файле записывались координаты 2мерного массива
пример:
1 2
3 5
выводит:
(5)(1,4)
(3)(2,4)
(2)(3,4)
(1)(4,4)
а надо
(5)(2,2)
(3)(2,1)
(2)(1,2)
(1)(1,1)

 К началу страницы 
+ Ответить 
hiv
сообщение 22.06.2007 8:07
Сообщение #6


Профи
****

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

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


Цитата(goatsee @ 22.06.2007 8:01) *

один вопрос остался
проблема в том, что координаты с 1мевого массива, как переделать что б в файле записывались координаты 2мерного массива

Подумай хорошенько над этим!
Код

...
for j := 1 to 4 do {зачем тебе этот цикл, ведь j потом нигде не используется}
for i := 1 to 4 do
if arr[i]<arr[i+1] then {при i=4, чему будет равен arr[i+1]}
begin
x:=arr[i];
arr[i]:=arr[i+1]; {аналогично предыдущему}
arr[i+1]:=x;       {аналогично предыдущему}
end;
...



--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
goatsee
сообщение 22.06.2007 8:39
Сообщение #7


Гость






просто он сортирует, но не выводит данные координат
я согласен, что тут лушнее, но по другому он не хочет
 К началу страницы 
+ Ответить 
hiv
сообщение 22.06.2007 8:57
Сообщение #8


Профи
****

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

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


Цитата(goatsee @ 22.06.2007 9:39) *

просто он сортирует...
У нас здесь телепатов нет! Откуда я знал что здесь должна быть сортировка? Да даже если она и должна быть там, то все мои вопросы остаются в силе, т.к. запрограммировано неправильно! См. FAQ Методы сортировок


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 22.06.2007 9:44
Сообщение #9


Профи
****

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

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


Цитата(goatsee @ 22.06.2007 9:39) *
... , но по другому он не хочет
Захочет, если репу почесать...
program practuka;
uses crt;
type
arr_2d= array[1 .. 2, 1 .. 2] of integer;
arr_1d= array[1 .. 4] of integer;
var f: text;
x,i,k,j:integer;
mx: arr_2d;
arr: arr_1d absolute mx;
sort: boolean;
begin
assign(f, 'matr.txt');
rewrite(f);
clrscr;
for i:=1 to 4 do
begin
write('3HA4EHUE',i,':');
read(arr[i]);
writeln;
end;

repeat
sort:=true;
for i := 1 to 3 do
if arr[i]<arr[i+1] then
begin
x:=arr[i];
arr[i]:=arr[i+1];
arr[i+1]:=x;
sort:=false;
end;
until sort;
writeln;

for i:=1 to 4 do
begin
k := (i-1) div 2 + 1;
j := i-(k-1)*2;
writeln(f,'(',arr[i],')','(',k,',',j,')'); {в файле выводятся координаты}
end;
close(f);
end.




--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.06.2007 11:37
Сообщение #10


Гость






hiv, не совсем... Надо вводить индексный массив, чтобы распечатать изначальные позиции чисел:
program practuka;
uses crt;
type
arr_2d= array[1 .. 2, 1 .. 2] of integer;
arr_1d= array[1 .. 4] of integer;
var f: text;
x,i,k,j:integer;
mx: arr_2d;
arr: arr_1d absolute mx;
indexes: arr_1d;
sort: boolean;
begin
assign(f, 'matr.txt');
rewrite(f);
clrscr;
for i:=1 to 4 do
begin
write('3HA4EHUE',i,':');
read(arr[i]);
writeln;
indexes[i] := i;
end;

repeat
sort:=true;
for i := 1 to 3 do
if arr[i]<arr[i+1] then
begin
x:=arr[i];
arr[i]:=arr[i+1];
arr[i+1]:=x;

x := indexes[i];
indexes[i] := indexes[i+1];
indexes[i+1] := x;

sort:=false;
end;
until sort;
writeln;

for i:=1 to 4 do
begin
k := (indexes[i]-1) div 2 + 1;
j := indexes[i]-(k-1)*2;
writeln(f,'(',arr[i],')','(',k,',',j,')');
end;
close(f);
end.



У тебя печатается нечто другое... yes2.gif
 К началу страницы 
+ Ответить 
hiv
сообщение 22.06.2007 11:47
Сообщение #11


Профи
****

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

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


Цитата(volvo @ 22.06.2007 12:37) *

hiv, не совсем... Надо вводить индексный массив...
Понял - введем!

Вот:
program practuka;
uses crt;
type
arr_2d= array[1 .. 2, 1 .. 2] of integer;
arr_1d= array[1 .. 4] of integer;
var f: text;
x,i,k,j:integer;
mx: arr_2d;
arr: arr_1d absolute mx;
index: arr_1d;
sort: boolean;
begin
assign(f, 'matr.txt');
rewrite(f);
clrscr;
for i:=1 to 4 do
begin
write('3HA4EHUE',i,':');
read(arr[i]);
writeln;
index[i]:=i; {инициализируем индексы}
end;

repeat
sort:=true;
for i := 1 to 3 do
if arr[i]<arr[i+1] then
begin
x:=arr[i];
arr[i]:=arr[i+1];
arr[i+1]:=x;
sort:=false;
x:=index[i]; {также меняем местами и индексы}
index[i]:=index[i+1];
index[i+1]:=x;
end;
until sort;
writeln;

for i:=1 to 4 do
begin
k := (index[i]-1) div 2 + 1; {вместо i используем индексный массив}
j := index[i]-(k-1)*2;
writeln(f,'(',arr[i],')','(',k,',',j,')'); {в файле выводятся координаты}
end;
close(f);
end.

На выходе:
Код
(5)(2,2)
(3)(2,1)
(2)(1,2)
(1)(1,1)


Сообщение отредактировано: hiv - 22.06.2007 11:59


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
goatsee
сообщение 22.06.2007 14:43
Сообщение #12


Гость






большое спасибо
 К началу страницы 
+ Ответить 

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

 



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