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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> 2 задачи про массивы
Unconnected
сообщение 28.05.2009 15:43
Сообщение #21


mea culpa
*****

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

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


blink.gif Как так, у меня всё прекрасно работает, TP7?..
Контроль границ, в настройках компилятора, включен.

Сообщение отредактировано: Unconnected - 28.05.2009 15:44


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 28.05.2009 15:46
Сообщение #22


Профи
****

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

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



until (j+d=-1) or (j+d=n+1);


инвини конешно,то как у тебя в минус 1 уходит если при 0 уже должно выходить...у тебя нету нулового элемента,чтоб до -1 добраться.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.05.2009 15:48
Сообщение #23


Гость






Цитата
у меня всё прекрасно работает, TP7?..
Не работает ни в TP7, ни в других компиляторах:
  repeat
repeat
writeln('i = ', i, ' j = ', j); { <--- Добавь и убедись, что J становится равным 0, а это RTE 201 }
a[i,j]:=b[f];
 К началу страницы 
+ Ответить 
Unconnected
сообщение 28.05.2009 15:51
Сообщение #24


mea culpa
*****

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

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


uses crt;
const m=5;n=5;z=25;
var i,j,f:byte;
d:integer;
b:array[1..z] of byte;
a:array[1..m,1..n] of byte;
begin
clrscr;
randomize;
for i:=1 to z do
begin
b[i]:=random(10);
write(b[i],' ');
end;
readln;
d:=-1;
f:=1;
i:=m;
j:=n;
repeat
repeat
a[i,j]:=b[f];
write(a[i,j],' ');
delay(50000);
inc(f);
j:=j+d;
until (j=0) or (j=n);
d:=-d;
dec(i);
writeln;
until (i=0);
readln;
end.



Вот так лучше?.. Здесь по идее никак не произойдёт обращение к нулевому элементу массива...


Нет, так не лучше, что-то неправильно, сейчас проверю.

Сообщение отредактировано: Unconnected - 28.05.2009 16:03


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 28.05.2009 15:58
Сообщение #25


Профи
****

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

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


Вот вариант,реализации того что Лап посоветовал.

d:=-1;
i2:=m;
for i:=n downto 1 do begin
for j:=m downto 1 do begin
A[i2,j]:=B[k];
k:=k+1;
inc(i2,d);
end;
d:=d*(-1);
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.05.2009 16:00
Сообщение #26


Гость






Это не вариант, приводи программу полностью. Иначе я тебе так опишу типы, что любой, даже самый корявый код не будет вылетать.
 К началу страницы 
+ Ответить 
Krjuger
сообщение 28.05.2009 16:04
Сообщение #27


Профи
****

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

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



uses crt;
const m=5;n=5;z=25;
var
i, j, d, k, i2 :integer;
b:array[1..z] of integer;
a:array[1..n,1..m] of integer;{сори тут помарочка была}
begin
clrscr;
randomize;
for i:=1 to z do
begin
b[i]:=random(100);
write(b[i],' ');
end;
readln;
d:=-1;
i2:=m;
k:=1;
for i:=n downto 1 do begin
for j:=m downto 1 do begin
A[i2,j]:=b[k];
k:=k+1;
write(a[i2,j],' ');{чтоб красиво и наглядно}
inc(i2,d);
end;
d:=d*(-1);
writeln;
end;
readln;
end.


мда я уже совсем.....переменные забыл обьявить.

Теперь работает,а вообще где сам виновник торжества то?

Сообщение отредактировано: Krjuger - 28.05.2009 16:24
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.05.2009 16:07
Сообщение #28


Гость






Переделывай:
Прикрепленное изображение

Ну вы что, ребята, думать совсем разучились? Вы что вообще? Простейшая задача вводит в ступор? А что с более сложными делать? blink.gif
 К началу страницы 
+ Ответить 
Unconnected
сообщение 28.05.2009 16:50
Сообщение #29


mea culpa
*****

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

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


Блин.. уже эти итерации чуть ли не на пальцах считаю, всё равно сдвиг идёт, хотя вроде исправил там кое-что..(

uses crt;
const m=5;n=5;z=25;
var d,i,j,f:integer;
b:array[1..z] of byte;
a:array[1..m,1..n] of byte;
begin
clrscr;
randomize;
for i:=1 to z do
begin
b[i]:=random(8)+1;
write(b[i],' ');
end;
writeln;
readln;
d:=-1;
f:=1;
i:=m;
j:=n;
repeat
repeat
a[i,j]:=b[f];
write(a[i,j],' ');
inc(f);
inc(j,d);
until (j=0) or (j=n+1);
if j=n+1 then dec(j);
d:=-d;
dec(i);
writeln;
until (i=0);
writeln;
for i:=1 to m do
begin
for j:=1 to n do write(a[i,j],' ');
writeln;
end;
readln;
end.



Изображение


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 28.05.2009 17:11
Сообщение #30


Профи
****

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

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


var
a:array[1..5,1..5]of integer;
b:array[1..25]of integer;
i,j,k,m,c:integer;
begin
randomize;
for i:=1 to 25 do
b[i]:=i;
k:=0;
m:=1;
c:=0;
for i:=5 downto 1 do begin
for j:=5 downto 1 do begin
inc©;
a[i,abs(j-k)+1-m]:=b[c];
end;
k:=abs(k-5);
m:=abs(abs(m)-1);
end;
{for i:=1 to 5 do
for j:=1 to 5 do
StringGrid1.Cells[j-1,i-1]:=inttostr(a[i,j])} // это я на дельфи проверял
end;
А можно мне +1? smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.05.2009 19:15
Сообщение #31


Гость






Цитата(Unconnected)
Блин.. уже эти итерации чуть ли не на пальцах считаю, всё равно сдвиг идёт
cool.gif Думай дальше...

Цитата(Krjuger @ 28.05.2009 16:04) *
Теперь работает
Тебе хочется, чтоб работало - не значит, что оно работает:
Прикрепленное изображение
Тоже думай дальше...

Client, наконец-то... Хоть кто-то добрался до невылетающей программы.
 К началу страницы 
+ Ответить 
Unconnected
сообщение 28.05.2009 19:37
Сообщение #32


mea culpa
*****

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

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


blink.gif И как я Это проморгал?

uses crt;
const m=5;n=5;z=25;
var d,i,j,f:integer;
b:array[1..z] of byte;
a:array[1..m,1..n] of byte;
begin
clrscr;
randomize;
for i:=1 to z do
begin
b[i]:=random(8)+1;
write(b[i],' ');
end;
writeln;
readln;
d:=-1;
f:=1;
i:=m;
j:=n;
repeat
repeat
a[i,j]:=b[f];
write(a[i,j],' ');
inc(f);
inc(j,d);
until (j=0) or (j=n+1);
if j>0 then dec(j);
if j=0 then inc(j); {Здесь забыл второе условие}
d:=-d;
dec(i);
writeln;
until (i=0);
writeln;
for i:=1 to m do
begin
for j:=1 to n do write(a[i,j],' ');
writeln;
end;
readln;
end.



--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 28.05.2009 20:03
Сообщение #33


Профи
****

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

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


Volvo,ты ошибаешся,я то, что ты сказал, что не работает, просто отредактировал и не стал создавать новое сообщение.и вообще у меня просто 2 переменные не были инициализированы.и я об этом написал.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.05.2009 20:32
Сообщение #34


Гость






Я скопировал программу из твоего сообщения в 19:12 по времени GMT+2... Твой пост был отредактирован в 16:24 по тому же времени. Пост содержит фразу "Теперь работает". Тестирование выдало то, что приведено у меня на скриншоте. Что я делаю не так?

В общем, халява кончилась, Client получает +1, за первое верное решение. Остальным - спасибо за участие...
 К началу страницы 
+ Ответить 
Krjuger
сообщение 28.05.2009 21:02
Сообщение #35


Профи
****

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

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


Все нашел,ошибку,volvo удали пост пожалуста этот,а то он пустой а я не могу,хотя вот рабочий вариант)


uses crt;
const m=5;n=5;z=25;
var
i, j, d, k, i2 :integer;
b:array[1..z] of integer;
a:array[1..n,1..m] of integer;{сори тут помарочка была}
begin
clrscr;
randomize;
for i:=1 to z do
begin
b[i]:=random(100);
write(b[i],' ');
end;
readln;
d:=-1;
i2:=m;
k:=1;
for i:=n downto 1 do begin
for j:=m downto 1 do begin
A[i,i2]:=b[k];
k:=k+1;
inc(i2,d);
end;
i2:=i2-d;{вот он корень зла где крылся}
d:=d*(-1);
end;
readln;
end.



Сообщение отредактировано: Krjuger - 28.05.2009 21:18
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 29.05.2009 5:46
Сообщение #36


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

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

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


Цитата(Krjuger @ 28.05.2009 22:02) *
 i2:=i2-d;{вот он корень зла где крылся} 
Угу)). Это была ловушка)). Я все ждал - станешь ли ты возмущаться, что тебе типа идею не до конца выдали.
Не стал.. Получай +1 от меня)). И пару замечаний заодно..

1. Во внутреннем цикле незачем идти downto...
2. ... и тогда можно избавиться от одной лишней переменной:
  d:=-1;
i2:=m;
for i:=n downto 1 do begin
for j:=1 to m do begin
A[i,i2]:=b[(n-i)*m+j];
inc(i2,d);
end;
i2:=i2-d;
d:=-d;
end;


И последнее. Константу z определяй так:
z=m*n;

- либо не определяй вообще:
b: array[1..m*n]of integer;


Успехов))


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

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

 



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