Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Массивы

Автор: org777 1.12.2008 22:25

Привет всем. Спасибо за помощь с предыдущими заданиями!)) give_rose.gif
Задала еще лабораторки wacko.gif
Объясните пожалуйста популярно, как это все делается?
P.S. на первой фотке задания с 1 по 3, на других фотках - только самое верхнее задание


Эскизы прикрепленных изображений
Прикрепленное изображение Прикрепленное изображение Прикрепленное изображение

Автор: Lapp 1.12.2008 22:36

Цитата(org777 @ 1.12.2008 18:25) *
Объясните пожалуйста популярно, как это все делается?

А на лекциях/семинарах/в методичках/учебниках это не объясняется популярно?


Добавлено через 1 мин.
Или мы должны повторить тебе твой курс?

Автор: org777 1.12.2008 23:30

В том-то и дело, что не объясняют((( нам дают листок формата А4, на котором приведен всего 1 пример. И с помощь этого 1 примера мы должны сделать штук 5 других разных задач. Преподше главное пихнуть нам этот листок, а самой потом сидеть и со своими делами разбираться.
Учебников у нас тоже нет, мы "обучаемся" только по этим листочкам А4.
Вы мне ничего не должны. Я просто надеюсь на вашу помощь... Если нет - что ж, извините, наверное ошибся адресом...

Автор: Lapp 1.12.2008 23:48

Цитата(org777 @ 1.12.2008 19:30) *
Я просто надеюсь на вашу помощь... Если нет - что ж, извините, наверное ошибся адресом...
Помощь не то же самое, что дать списать. Ты хотя бы пробовал начать? Первая задача (остальные не смотрел) совсем легкая. Покажи, что у тебя получается. Поможем.

Автор: org777 2.12.2008 0:23

Кому легкая, а кому нет...
Я попытался 3 сделать, только она у меня криво как-то выходит...


Program org;
Var a:array[1..20,1..20] of real;
i,j,m,n:integer;
mins,maxs,mini,maxi,t:real;
begin
writeln('input m,n:');
readln(m,n);
randomize;
for i:=1 to m do
for j:=1 to n do
a[i,j]:=random*100-50;
mins:=0;
for j:=1 to n do
mins:=mins+a[1,j];
maxs:=mins;
mini:=1;
maxi:=1;
for i:=2 to m do
begin
t:=0;
for j:=1 to n do
t:=t+a[i,j];
if (t>maxs) then
begin
maxs:=t;
maxi:=i;
end
else if (t<mins) then
begin
mins:=t;
mini:=i;
end;
end;
writeln ('Max summ= ',maxs:8:6,' ','stroki: ',maxi:8:6);
writeln ('Min summ= ',mins:8:6,' ','stroki: ',mini:8:6);
readln;
end.

Автор: Lapp 2.12.2008 5:02

Цитата(org777 @ 1.12.2008 20:23) *
Я попытался 3 сделать, только она у меня криво как-то выходит...
И что тут такого кривого?.. На мой взгляд все прекрасно. Только добавь вывод самой строки, как в условии.
Продолжай в том же духе.

P.S.
Ставь паскалевские теги, а не просто код, пожалуйста.

Автор: org777 2.12.2008 11:58

Он числа рандомом не выводит...
Паскалевские теги - это в смысле выделять черным все эти команды, типа begin, if, then и т.д.?

Автор: Lapp 2.12.2008 17:35

Цитата(org777 @ 2.12.2008 7:58) *
Он числа рандомом не выводит...
Что сие могло бы означать?.. blink.gif
В задании ничего не сказано про "вывод чисел рандомом". Если тебе это все-таки нужно, объясни, что ты под этим словосочетанием понимаешь.

Цитата(org777 @ 2.12.2008 7:58) *
Паскалевские теги - это в смысле выделять черным все эти команды, типа begin, if, then и т.д.?
Нет, конечно smile.gif То есть смысл тот, но этим занимаются два специальных тега (точнее - один с закрытием):

[cоde=pas]
... тут прога ...
[/cоde]

Ты ставишь простые теги [cоde] [/cоde], а нужно с параметром "pas". Обычно это делается выделением программы в блок и выбором нужного пункта из меню CODE над окном ввода текста. Только не пытайся копировать их из этого сообщения - тут я их специально испортил, чтоб они были видны, а не отрабатывали.

Автор: org777 2.12.2008 22:35

Под ранодомом я понимаю то, чтобы он сам задавал числа в случайном порядке, а не чтобы их приходилось вводить собственноручно. Чтобы максимально оптимизировать и автоматизировать этот код. Так во-всяком случае это понимаю я. Может неправильно понимаю, т.к. как я уже говорил - нам толком ничего не объясняют...

Автор: Ozzя 2.12.2008 22:40

Вот это и есть задание массива из случайных элементов.


for i:=1 to m do
for j:=1 to n do
a[i,j]:=random*100-50;


А вот так пришлось бы вводить вручную.

for i:=1 to m do
for j:=1 to n do
readln(a[i,j]);


Автор: org777 2.12.2008 22:44

т.е. я типа все правильно сделал?..

Автор: volvo 2.12.2008 22:44

Цитата
Чтобы максимально оптимизировать и автоматизировать этот код
можно еще автоматически выбирать размеры матрицы, например от 2-х до 20 (меньше двух - бессмысленно, больше 20 - нельзя, ты ограничил тип именно 20-ю). Насколько я вижу, про размерность в задании ничего нет, это противоречить условию не будет.

Автор: Ozzя 2.12.2008 22:48

В 1-й задаче должно быть "массива А, удовлетворяющих условию -2<a[i]<2

...
k:=0;
sum:=0;
for i:=1 to n do
if (a[i]<2) and (a[i]>-2) then {выбираем только те элементы массива, которые удовл. условию}
begin
sum:=sum+a[i]; {Считаем их сумму...}
k:=k+1; {... и количество}
end;
sum:=sum/k; {средн. ариф-кое}
...

Автор: org777 2.12.2008 22:50

Ладно, с этой задачей разобрался. Помогите пожалуйста с другими? Направьте хотя бы, а то у меня даж идейй нету... Я в паскале не особо хорошо шарю, так что и понять мне немного сложнее...

Автор: Ozzя 2.12.2008 22:59

Зад. 2.2

...
k:=0;
readln(n);
for i:=1 to n do
begin
readln(a); {вводим очередной элемент последовательности}
if (not odd(i)) {четный порядковый номер } and (odd(a)) {четный элемент } then
k:=k+1;
end;
...

Автор: org777 2.12.2008 23:01

подправьте пожалуйста, если что не так...)))


Program org;
const nn=10;
var a:array[1..nn] of real;
i,n,k:integer; s:real;
begin
writeln('input n:');
readln(n);
k:=0;
s:=1;
for i:=1 to n do
if (a[i]<2) and (a[i]>-2) then
begin
s:=s+a[i];
k:=k+1;
end;
s:=s/k;
writeln('s=',s:8:5);
readln;
end.

Автор: Ozzя 2.12.2008 23:05

2.1

...
if (not odd(a)) {четное} and (frac(sqrt(a))=0) {квадрат числа} then
k:=k+1
...

Автор: org777 2.12.2008 23:05

Цитата
Зад. 2.2

это ты про задачу "..... имеющих четные порядковые номера и являющихся нечетными числами"?
Если да, то она мне не нужна))) Во 2 и 3 фотке мои задачи - только первые сверху))

Автор: Ozzя 2.12.2008 23:06

s:=0;  // !!!


Автор: org777 2.12.2008 23:09

s=0 к той, которую я просил подправить? Тогда он постоянно выводит 0!

Автор: Ozzя 2.12.2008 23:10

Зад. 3.1
Удаление столбца/строки решалось. Ищи по форуму.

Добавлено через 2 мин.

Цитата
s=0 к той, которую я просил подправить? Тогда он постоянно выводит 0!

Инициализировать матрицу кто будет?
for i:=1 to n do
a[i]:=random(какое_нибудь_число);

В random задай нужный интервал. Например: -100..100

Автор: org777 2.12.2008 23:34

блин, в задачу 2.1 я все-таки не врубаюсь нифига... mega_chok.gif

Автор: Ozzя 2.12.2008 23:38

(frac(sqrt(a))=0) {квадрат числа}

Эта часть не понятна?
Берется корень квадратный из числа, например из 4.
Получается - 2.0
Дробная часть числа равна 0. Ф-ция frac дает как раз дробную часть. числа.
Т.е. если дробная часть корня квадр. из числа равна 0, то число есть квадрат.

Автор: org777 3.12.2008 22:56

Люди, пожалуйста, напишите полный код к последним 2 задачам, а?.. Первую я полностью сделал с вашей помощью, а вот вторую и третью лабораторки вообще не врубаюсь... Пожалуйста... blush.gif

Автор: org777 4.12.2008 16:32

подправьте пожалуйста 2.1 blush.gif А то че-то не получается(((

Program org;
const nn=20; mm=20;
var a:array[1..nn,1..mm] of integer;
j,i,n,m,k:integer; s:real;
begin
writeln('input n,m:');
readln(n,m);
randomize;
for i:=1 to n do
begin
for j:=1 to m do
begin
s:=0;
k:=0;
readln(n);
for i:=1 to n do
begin
readln(a);
if (not odd(a)) and (frac(sqrt(a))=0) then
k:=k+1
end;
end;
writeln('s=',s:8:6);
end;
readln;
end.

Автор: volvo 4.12.2008 16:44

Зачем тебе здесь M и N? У тебя по условию только N. И не надо делать циклы в циклах... Все проще:

const
maxn = 20;
var
i, n: integer;
a: array[1 .. maxn] of integer;

begin
readln(n);
for i := 1 to n do begin
writeln('a[', i, '] = '); readln(a[i]);
end;

for i := 1 to n do begin

if (frac(sqrt(a[i])) = 0) and (not odd(trunc(sqrt(a[i]))))
then write(a[i]:5);

end;
end.

Только добавь проверку, что введенное число N не больше 20, иначе будут проблемы...

Автор: org777 4.12.2008 19:02

Спасибо volvo.. Я очень вам всем благодарен!

Автор: org777 8.12.2008 23:10

Короче, преподша говорит, что мое творение - неверно. Она сказала, что кажется он строки не инициализирует, что ли...
вот код:


Program org;
Var a:array[1..20,1..20] of real;
i,j,m,n:integer;
mins,maxs,mini,maxi,t:real;
begin
writeln('input m,n:');
readln(m,n);
begin
randomize;
for i:=1 to m do
for j:=1 to n do
a[i,j]:=random*100-50;
mins:=0;
for j:=1 to n do
mins:=mins+a[1,j];
maxs:=mins;
mini:=1;
maxi:=1;
for i:=2 to m do
begin
t:=0;
for j:=1 to n do
t:=t+a[i,j];
if (t>maxs) then
begin
maxs:=t;
maxi:=i;
end
else if (t<mins) then
begin
mins:=t;
mini:=i;
end;
end;
writeln ('Max summ= ',maxs:8:6,'; ','stroki: ',maxi:2:0);
writeln ('Min summ= ',mins:8:6,'; ','stroki: ',mini:2:0);
readln;
end;
end.


Это задача №3 из прикрепленной картинки. Я не врубаюсь, что там неверно, если даже с неделю назад мне здесь сказали, что я все верно сделал.

P.S. Посмотрите пожалуйста задачу, которая в середине из второй картинки, про матрицу. Помогите с ней, если не сложно blush.gif

М
Зачем начинать новую тему для той же задачи?.. Соединил.
Лопарь




Эскизы прикрепленных изображений
Прикрепленное изображение Прикрепленное изображение

Автор: Lapp 8.12.2008 23:28

Цитата(org777 @ 8.12.2008 19:10) *
с неделю назад мне здесь сказали, что я все верно сделал.

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

Автор: Lapp 9.12.2008 0:05

Цитата(org777 @ 8.12.2008 19:10) *
Посмотрите пожалуйста задачу, которая в середине из второй картинки, про матрицу. Помогите с ней, если не сложно

Вот:
for i:=1 to n do begin
b[i]:=1;
for j:=1 to n do if a[i,j]>0 then begin
b[i]:=a[i,j];
break
end
end;

Автор: org777 9.12.2008 1:30

А что означает break?

Автор: Айра 9.12.2008 1:43

Процедура, прерывающая выполнение цикла for\while\repeat..

Автор: amega 9.12.2008 1:45

break преривание выполнения цикла, не дожидаясь выполнения условий выхода из циклаж

Автор: org777 16.12.2008 23:28

Привет всем!
Люди, такая проблема: задачка не верно работает(((
Сама задача - в прикрепленной картинке, первая сверху.
Код ниже:

Program org;
uses crt;
const nn=4; mm=4;
var a:array[1..nn,1..mm] of integer;
n,i,j,k,l:integer;
begin
clrscr;
randomize;
writeln('Input n,i,j: '); readln(n,i,j);
for k:=1 to n do begin
for l:=1 to n do begin
a[k,l]:=random(100)-50;
write(a[k,l]:8); end; writeln; end;
for k:=1 to n-1 do
for l:=1 to n do
a[k,l]:=a[k+1,l];
for k:=1 to n do
for l:=j to n-1 do
a[k,l]:=a[k,l+1];
for k:=1 to n do a[k,n]:=0;
for k:=1 to n-1 do
begin
for l:=1 to n-1 do
write(a[k,l],' ');
writeln;
end;
readln;
end.


Добавлено через 6 мин.
И помогите пожалуйста, если не сложно с еще одной задачкой - на строки уже. Знаю, что не совсем по теме... но мне кажется, что лишний раз открывать новую тему не стоит.
Задача в прикрепленной картинке, первая сверху)
P.S. По ней у меня совершенно нет мыслей, я вообще не представляю как ее делать(((


Эскизы прикрепленных изображений
Прикрепленное изображение Прикрепленное изображение

Автор: volvo 16.12.2008 23:59

Замени свой фрагмент вот на этот:

for k:=I to n-1 do { <--- удаляем I-тую строку }
for L:=1 to n do
a[k,L]:=a[k+1,L];
for k:=1 to n do
for L:=J to n-1 do { <-- и J-тый столбец }
a[k,L]:=a[k,L+1];


Автор: org777 17.12.2008 1:38

А блин, я перепутал буквы))) Сессия просто, напряжение, вот и допускаются такие вот ошибки идиотские. Спасибо volvo, очень благодарен тебе! good.gif

P.S. А со строками кто-нибудь может мне помочь, а?... Напишите пожалуйста полненький код ,если не составит труда... blush.gif