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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> 2 задачи про массивы
I_am_HATED
сообщение 26.05.2009 19:18
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Женский
Реальное имя: Ольга

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


1. Нахождение максимального значения в массиве среди всех чётных чисел. Длина массива вводится с клавиатуры. Печатать элементы массивы по 9 штук, по формату :6. Тип обрабатываемых данных - целые.

2. Заполнить двумерный массив A(MxN) элементов символами из одномерного массива В (длиной не более 256 элементов) "змейкой" от конца к началу - сперва N-ю строку справа налево, затем N-1-ю слева направо и т.д. Массив B предварительно заполняется из входного текстового файла. Оба массива распечатать. Предельные значения числа строк 16, столбцов 16. Тип обрабатываемых данных - символьный.

Помогите решить, я что-то путаюсь в них..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.05.2009 19:44
Сообщение #2


Гость






Что сама делала? Или хотя бы пыталась делать?

Что является основной проблемой при решении?
Цитата
Помогите решить
Ключевое слово выделено, ты начинай, сделай хоть что-то, а мы поможем...
 К началу страницы 
+ Ответить 
Krjuger
сообщение 26.05.2009 19:48
Сообщение #3


Профи
****

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

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


Черт взяли и удалила именно ту тему,куда писал)))По поводу второй задачи, заполнять змейкой,то что то в духе

k:=1;{индекс массива В}
s:=1;{переменная для чередования строк}
for i:=n downto 1 do begin
if s mod 2=0 then begin
for j:=1 to m do begin
A[i,j]:=B[k];
k:=k+1;
end;
else
for j:=m downto 1 do begin
A[i,j]:=B[k];
k:=k+1;
end;
end;
s:=s+1;
end;


Вот сам процесс заполнения,сначала справа налево,а потом меняеться.Так же надо предусмотреть когда массив В станет пустым,чтоб нули не приписывать.

УЧТИ.Я лиш подал идею.Это не является решением твоей задачи.(чтоб это стало решением задачи, нужно еще доделать)

Сообщение отредактировано: Krjuger - 26.05.2009 19:54
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.05.2009 19:53
Сообщение #4


Гость






"Змеек" как минимум 4 способа выложено на форуме, половина из них - в FAQ-е, отлаженные и оттестированные. Зачем опять велосипед - непонятно... Что, поиск можно отключать, никто не пользуется? Устроили здесь соревнования Formula I, главное быстрее ответить и счетчик накрутить?
 К началу страницы 
+ Ответить 
Krjuger
сообщение 26.05.2009 20:00
Сообщение #5


Профи
****

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

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


Нет, мне действительно интересно порешать такие задачки в свободное время))))насчет фака,иногда там бывают( конешно же все рабочие и отлаженые) задачи,но довольно "высоко" написанные.я имею в виду их писали бывалые програмисты,а не особо понимающим людям их решения тьма кромешная и им надо что нибудь попроще))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.05.2009 20:32
Сообщение #6


Гость






Попроще - не значит правильнее, правда? Вот у тебя в решении - явное дублирование кода. Избавишься от условия if внутри цикла по строкам, +1 в репутацию тебе обеспечен (за освоение новых, более интересных, чем ты сейчас это делаешь, методов решения smile.gif ) Нельзя же все время делать все "в лоб", надо учиться и другим методам...
 К началу страницы 
+ Ответить 
Krjuger
сообщение 26.05.2009 22:07
Сообщение #7


Профи
****

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

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


Хорошо побежал подключать аспирантов... smile.gif


k:=1;{индекс массива В}
s:=1;{переменная для чередования строк}
for i:=n downto 1 do begin
for j:=1 to m do begin
if s mod 2=0 then
A[i,j]:=B[k];
else
A[i,m-j+1]:=B[k];

k:=k+1;
end;
s:=s+1;
end;


Лучше этого придумать пока что ничего не смог.

Сообщение отредактировано: Krjuger - 26.05.2009 22:15
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.05.2009 22:09
Сообщение #8


Гость






Даже не думай, я ж еще и вопросы задавать буду, почему так, а не иначе... cool.gif Чужими мозгами долго не протянешь...
 К началу страницы 
+ Ответить 
Krjuger
сообщение 26.05.2009 22:17
Сообщение #9


Профи
****

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

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


Мож тогда чему нибудь и научусь smile.gif ,yes my master,покажи мне путь истины.а вообще флуд уже начался,где там создатель темы???Умер чтоли??

Эм ну и где моя обещанная концетка*?

Сообщение отредактировано: Krjuger - 26.05.2009 22:37
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-volvo-
сообщение 27.05.2009 8:52
Сообщение #10


Гость






Цитата
ну и где моя обещанная концетка*?
Ты ж от if-а не избавился smile.gif... Избавляйся - будет "конфетка"
 К началу страницы 
+ Ответить 
Krjuger
сообщение 27.05.2009 20:48
Сообщение #11


Профи
****

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

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



k:=1;{индекс массива В}
s:=m;{переменная для чередования строк}
p:=m;
d:=1;
for j:=m downto 1 do begin
for i:=n downto 1 do begin
A[i,s]:=B[k];
s:=abs(s-p)+1;
k:=k+m;
end;
d:=d+1;
k:=d;
s:=p-1;
end;


Не бей сильно,я не знаю будет работать или нет))))паскаля нету щас с собой(не дома).Это все на что меня хватило,но это уже изврат)

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


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

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

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


Цитата(Krjuger @ 27.05.2009 21:48) *
я не знаю будет работать или нет))))
Не, не будет no1.gif .
Хоть я и не Паскаль..))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 28.05.2009 13:29
Сообщение #13


Профи
****

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

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


Ну подкиньте хоть идейку....Хотяб из теории,а то что то мой нерациональный ум ничего рационального не придумывает,а самому уже стало интересно.пока что я дошел только до варианта,где кол во строк четно.

Сообщение отредактировано: Krjuger - 28.05.2009 13:30
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 28.05.2009 13:44
Сообщение #14


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

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

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


Цитата(Krjuger @ 28.05.2009 14:29) *
Ну подкиньте хоть идейку..
...
пока что я дошел только до варианта,где кол во строк четно.
А при чем тут количество строк?

Идейку?.. Ну, смотри.
Сделай переменную для величины изменения, d. Сначала положи d:=-1. Потом во внешнем цикле (в конце) умножай ее на -1.
Второй индекс, i2, сначала положи равным m, а потом так: Inc(i2,d).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 28.05.2009 14:32
Сообщение #15


Профи
****

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

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



k:=1;{индекс массива В}
s:=1;{переменная для чередования строк}
for i:=n downto 1 do begin
j:=m;
while (s mod 2=0) and (j>=1) do begin
A[i,j]:=B[k];
k:=k+1;
j:=j-1;
end;
while (s mod 2<>0) and (j>=1) do begin
A[i,m-j+1]:=B[k];
k:=k+1;
j:=j-1;
end;
s:=s+1;
end;


Вот еще вариантик.олько,что то мне подсказывает,что его ты тоже забракуеш,потому что
Цитата

Вот у тебя в решении - явное дублирование кода


Опять же пишу из универа.через чужой ноут без паскаля(в плане паскаля у человека нет).

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


mea culpa
*****

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

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


Компилятор в голове... самонадеянно smile.gif


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


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

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

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


Цитата(Krjuger @ 28.05.2009 15:32) *
что то мне подсказывает,что его ты тоже забракуеш,потому что
Цитата
Вот у тебя в решении - явное дублирование кода
Не только поэтому. Ты заменил if на while - и думаешь, прокатит? ))

Чем моя "идейка" не понравилась? вникай..))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 28.05.2009 15:28
Сообщение #18


Профи
****

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

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


Я не знаю почему,но на момент размещения своего варианта,я твою идею,не видел.насчет -1,щас посмотрим...)))

Unconnected

компилятора в голове нету(процессор слишком слабенький,не тянет),задача больше математическая.Жаль до -1 сам не дошел(

Сообщение отредактировано: Krjuger - 28.05.2009 15:57
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 28.05.2009 15:32
Сообщение #19


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+d=-1) or (j+d=n+1);
d:=-d;
dec(i);
writeln;
until (i=0);
readln;
end.


Мой вариант:)

Не знаю правда, это ли Lapp имел в виду, когда говорил про d:=-1;, но кажется принцип похож)

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


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


Гость






Цитата
но кажется принцип похож)
Принцип, может, и похож, но у тебя вылет по ошибке 201 - Range Check, проверяй smile.gif

(не забудь включить контроль границ, естественно)
 К началу страницы 
+ Ответить 

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

 



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