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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Массивы одномерныые и двумерные..., Помогите пожалуйста
zara44
сообщение 9.02.2007 1:05
Сообщение #1


Новичок
*

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

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


У меня есть задание сделать одномерный и двумерный массив помогите плиз.....
1)Дан массив L1,..,L20. Заменить элементы, стоящие после Lmin, на среднее арифметическое всего ряда.
begin
closegraph;
textbackground(cyan);
clrscr;
textcolor(Magenta);
gotoxy(2,3);
writeln('DaH MACCuB L[1..20], 3ameHuTb eJIEMEHTbI IIosJIe min, Ha sredHee zna4enee ');
for i:=1 to 20 do begin
gotoxy(10,5);
textcolor(yellow);
writeln('BbeDite elementi massiva ',i);
gotoxy(10,6);
textcolor(white);
gotoxy(2+i*3,7);
readln(L[i]);
end;
s:=0;
L[min]:=L[i];
min:=i;
for i:=1 to 20 do
begin
if L[i]<L[min] then begin
L[min]:=L[i];
s:=s+L[i];
end;
end;
s:=s/20;
for i:=1 to 20 do begin
if L[i]>L[min] then L[i]:=s;
gotoxy(10,2);
writeln('Massiv gotov dlya proverki');
textcolor(black);
gotoxy(i,3+i);
writeln('i= ',L[i] :4 :0);
end;
readkey;
end.

это что я смог сделать, но программа все равно не пашет!!! И это только кусочек)))

2)В матрице найти минимальный элемент. Разделить элементы строки, в которой он находится, на найденный минимальный элемент.

P.S. Заранее спасибо за помощь good.gif


--------------------
Хочу стать программером, но еще много чего учить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 9.02.2007 9:49
Сообщение #2


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

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


Если приводишь программу, приводи всю.
Ты не написал секцию объявления переменных.

И никогда не занимайся бредом - добавление дизайна в программу, в которой не реализован основной функционал.

Вот твоя программа без дизайно-бреда:
begin

writeln('Дан массив L[1..20], заменить элементыпосле min, на среднее ');

{вводим элементы масива}
for i:=1 to 20 do begin
writeln('BbeDite elementi massiva ',i);
readln(L[i]);
end;

s:=0;


{ВНИМАНИЕ! Откуда взялось значение min ? ОТСЮДА И ДАЛЕЕ КОД ОШИБОЧЕН}


L[min]:=L[i];
min:=i;
for i:=1 to 20 do begin
if L[i]<L[min] then begin
L[min]:=L[i];
s:=s+L[i];
end;
end;
s:=s/20;
for i:=1 to 20 do begin
if L[i]>L[min] then L[i]:=s;
writeln('Massiv gotov dlya proverki');
writeln('i= ',L[i] :4 :0);
end;
end.


Теперь смотрим на код - я отметил с какого момента начинается бред.

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

Код
{Вводим массив}
... код ...

{Подсчитываем среднее арифметическое}
... код ...

{Ищем минимальное значение}
... код ...

{Заменяем элементы после минимума на значение среднего арифметического}
... код ...

{Выводим результат}
... код ...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
/7popok
сообщение 9.02.2007 10:48
Сообщение #3


Новичок
*

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

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


Скажи мне, пожалуйста, для чего тебе нужны по всей программе комманды:
textbackground, textcolor, gotoxy? это же не рисование, чтобы раскрашивать все надписи, а программирование.


for i:=1 to 20 do
begin
if L[i]<L[min] then begin
L[min]:=L[i];
s:=s+L[i];{с какой радости ты сумму считаешь здесь? а если у тебя L[i]>L[min]? ведь, сумма не будет считаться тогда!}
end;
s:=s+L[i];{этот оператор должен быть тут}
end;



а должно быть вот как:

var i,min:integer;
s:real;
L:array [1..20] of real;
begin
writeln('DaH MACCuB L[1..20], 3ameHuTb eJIEMEHTbI IIosJIe min, Ha sredHee zna4enee ');
for i:=1 to 20 do begin
writeln('BbeDite elementi massiva ',i);
readln(L[i]);
end;
s:=0;
L[min]:=L[i];
min:=i;
for i:=1 to 20 do
begin
if L[i]<L[min] then begin
L[min]:=L[i];
end;
s:=s+L[i];
end;
s:=s/20;
for i:=1 to 20 do begin
if L[i]>L[min] then L[i]:=s;
writeln('i= ',L[i] :4 :0);
end;
readln;
end.



программка-то... на 5 минут...

Сообщение отредактировано: /7popok - 9.02.2007 10:49
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zara44
сообщение 9.02.2007 10:51
Сообщение #4


Новичок
*

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

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



program lab7;
var
L:array[1..20] of real;
min,s:real;
i:integer;
begin
clrscr;
writeln('DaH MACCuB L[1..20], 3ameHuTb eJIEMEHTbI IIosJIe min, Ha sredHee zna4enee ');
for i:=1 to 20 do begin
writeln('Введите элементы массива');
readln(L[i]);{вводим элементы массива}
end;
s:=0;
min:=L[i];
for i:=1 to 20 do
begin
if L[i]<min then begin
min:=L[i];{тут узнаем минимум}
s:=s+L[i];
end;
end;
s:=s/20;{тут узнаем среднее значение}
for i:=1 to 20 do begin
if L[i]>L[min] then L[i]:=s;
writeln('i= ',L[i] :4 :0);{А тут уже должен выводиться на экран готовый массив}
end;
readkey;
end.


Вот я и написал все что я понял. Помогите разобраться. Очень надо!!!! В понедельник уже Отчет сдавать!!!

Добавлено через 1 мин.
Спасибо /7popok. Щас опробую прогу. А можешь посмотреть по двухмерным массивам????


Добавлено через 1 мин.
А gotoxy,textbackground и т.д.. Мне нужны, у нас преподаватель очень требовательна к интерфейсу.


--------------------
Хочу стать программером, но еще много чего учить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.02.2007 10:56
Сообщение #5


Гость






zara44, допущена грубая ошибка: когда ты ищешь минимум, ты запоминаешь само значение,

Цитата
if L[i]<min then begin
min:=L[i];{тут узнаем минимум}


а когда заменяешь на минимальный элемент - пытаешься заменить по индексу...
Цитата
if L[i]>L[min] then L[i]:=s;

Так нельзя... И там и там должно быть что-то одно: или индексы, или сами значения...
 К началу страницы 
+ Ответить 
/7popok
сообщение 9.02.2007 10:59
Сообщение #6


Новичок
*

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

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


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

Сообщение отредактировано: /7popok - 9.02.2007 11:00
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zara44
сообщение 9.02.2007 11:06
Сообщение #7


Новичок
*

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

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


/7popok . Программу которую ты мне написал. Она тоже не правильно считает у меня



--------------------
Хочу стать программером, но еще много чего учить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
/7popok
сообщение 9.02.2007 11:10
Сообщение #8


Новичок
*

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

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


она считает всё и пишет правильно, но, признаюсь, есть один глюк. он последний элемент не изменяет.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.02.2007 11:12
Сообщение #9


Гость






Цитата(Пророк)
min:=i;
после окончания цикла делать нельзя - i не определено... Еще раз запостишь программу НЕ проверяя (и даже не думая) - буду принимать меры...
 К началу страницы 
+ Ответить 
zara44
сообщение 9.02.2007 11:15
Сообщение #10


Новичок
*

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

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


У меня выходит примерно так.
Привожу пример
Введите элементы массива:
9 8 9 8 9 8 9 8 9 8 9 8 1(минимум) 4 6 8 7 9 7 9 7 89 7 67 6

А выводит на экран примерно это

7 7 7 7 7 7 7 7 7 7 7 7 1(минимум) 7 7 7 7 7 7 7 7 7 7 7 7 1





Добавлено через 2 мин.
volvo я конечно все понимаю, но я просто уже запутался во всем что можно!!!!! Мне дали задание сделать световое меню и в нем 2 программы на массивы дали. Световое меню я сделал, а вот программы я не могу делать, очень много ошибок у меня. ((((

Добавлено через 1 мин.
volvo а как мне тогда сделать???


--------------------
Хочу стать программером, но еще много чего учить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.02.2007 11:24
Сообщение #11


Гость






const n = 20;
var
i, min:integer;
s: real;
L: array [1 .. n] of real;

begin
writeln('DaH MACCuB L[1..20], 3ameHuTb eJIEMEHTbI IIosJIe min, Ha sredHee zna4enee ');

min := 1; s := 0;

for i:=1 to n do begin
writeln('BbeDite elementi massiva ',i);
readln(L[i]);

{ Сразу здесь же считаем И сумму И минимум }
if L[i] < L[min] then min := i;
s := s + L[i];
end;

s := s / n;
for i := 1 to n do begin
if i > min then L[i] := s; { <--- Сказано же, для всех ИНДЕКСОВ больше ИНДЕКСА минимума !!! }
writeln('i= ',L[i] :4 :0);
end;
readln;

end.

 К началу страницы 
+ Ответить 
/7popok
сообщение 9.02.2007 11:26
Сообщение #12


Новичок
*

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

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


volvo
после цикла оно же равно 20, так как цикл закончился на цифре 20
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zara44
сообщение 9.02.2007 11:32
Сообщение #13


Новичок
*

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

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


Спасиба теперь программа работает. Теперь остается только 2)В матрице найти минимальный элемент. Разделить элементы строки, в которой он находится, на найденный минимальный элемент.


--------------------
Хочу стать программером, но еще много чего учить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 9.02.2007 11:35
Сообщение #14


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Попробуй сам по аналогии... Напиши хоть что-нибудь...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zara44
сообщение 9.02.2007 11:38
Сообщение #15


Новичок
*

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

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


Ок. Постараюсь что нибудь сделать. А щас я в колледж поехал... good.gif good.gif good.gif


--------------------
Хочу стать программером, но еще много чего учить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.02.2007 11:38
Сообщение #16


Гость






Цитата
после цикла оно же равно 20, так как цикл закончился на цифре 20
Да? Уверен? Я - нет... И доки на Паскаль тоже со мной согласны. Во-первых, оно должно быть равно не 20, а 21, потому как в конце тела цикла происходит изменение управляющей переменной. Ну, а во-вторых:

Цитата
Если оператор, содержащийся в теле оператора for, изменяет значение управляющей переменной, то это является ошибкой. После выполнения оператора for значение управляющей переменной становится неопределенным, если только выполнение оператора for не было прервано с помощью оператора перехода.
(цитата - отсюда: Руководство по языку B.Pascal 7 & Objects/LR -> Операторы цикла с параметром (for))
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 9.02.2007 12:24
Сообщение #17


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Да в любом случае вот это - бред.

L[min]:=L[i];
min:=i;

ну, ты считаешь, что i=20
а чему равен min ДО выполнения второй строчки?
if L[i]<L[min] then begin
L[min]:=L[i];

тебя кто-то просил присваивать "бывшему" минимуму значение нового? это же перековеркает весь массив... а если он был отстортирован в обратном порядке - представляешь, что получится?
if L[i]>L[min] then L[i]:=s;

естественно, больше (ну, для нескольких эл-тов равно) - мы же так минимум и искали, правда?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zara44
сообщение 10.02.2007 14:49
Сообщение #18


Новичок
*

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

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


Вторую задачу смог сделать только так, плиз покажите где ошибки!!!!!!

program lab;
uses crt;
const n = 20;
var
j,i, min1,min2:integer;
s: real;
A:array[1..5,1..5] of real;
begin
clrscr;
min1:= 1; min2:= 1;
for i:=1 to 5 do begin
for j:=1 to 5 do begin
gotoxy(2,2);
writeln('BbeDite element massiva ',i,'x',j);
gotoxy(4+j*2,4+i);
readln(A[i,j]);
{ TyT MbI BBODuM MACCuB }
if A[i,j] < A[min1,min2] then begin
min1 := i;
A[min1,min2]:= A[i,j]; {HAshli minimal'nuu stro4ku i min element}
end;
end;
end;
for i := min1 to min1 do begin
for j:= 1 to 5 do begin
A[min1,j] := A[min1,j]/A[min1,min2]; {Stroku podelili na min !!! }
end;
end;
for i := 1 to 5 do begin
for j:= 1 to 5 do begin
gotoxy(35,2);
writeln('poluchen massiv ');
gotoxy(35+i*2,4+j);
writeln('',A[i,j] :4 :0);
end;
end;
readln;

end.

Заранее спасибо!!!!


--------------------
Хочу стать программером, но еще много чего учить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 10.02.2007 15:34
Сообщение #19


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


1. Общие правила форума действуют для всех:
 ! 
8. Запрещена любая реклама и спам.
Форум и сайт "Все о Паскале" - НЕ коммерческий проект, и никакая реклама на нем неприемлема!


Если хочешь, чтобы тебе помогали - уважай требования.
2. Нормальное форматирование делает половину ошибок заметными.
Думаешь, у кого-то есть желание тратить свое время на расставление отступов в твоем коде?
3. Поясни, пожалуйста, вот эти фрагменты (моих знаний не хватает на проникновение в их сокровенный смысл):
if A[i,j] < A[min1,min2] then begin
{
если текущий элемент меньше элемента в строке, где был минимум,
и в первом столбце - min2 нигде не изменяется и остается равным 1, то
}
min1 := i; {запомнили новую строку с минимальным}
A[min1,min2]:= A[i,j]; {первый элемент в этой строке заменили минимальным по строке}
end;


 for i := min1 to min1 do begin {этот цикл выполнится ровно 1 раз}


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 10.02.2007 15:43
Сообщение #20


Злостный любитель
*****

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

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


Zara, сделайте пожалуйста так, чтобы я мог это читать. Все строки между бегин и енд сдвигаются на 2 символа. Все строки между подразумевающимися бегин и енд (это когда if p then {begin} ... {end} - здесь бегин и енд не стоят, потому что между ними 1 строчка) тоже. Посмотрите, например, на программу Вольво.
А то готоиксигрик с одним пробелом, после него врайтлээн с 2 пробелами... Не могу это читать.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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