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

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

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

 
 Ответить  Открыть новую тему 
> Задача: Программирование циклических процессов., Вычичисления в массиве.
сообщение
Сообщение #1


Новичок
*

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

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


Здравствуйте!
Очень нужна ваша помощь, ни как не доходит решение задачки одной...
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1. Номер минимального по модулю элемента массива; {именно номер, а не значение}
2. Сумму модулей элементов массива, расположенных после первого отрицательного элемента.

Я тут заготовочку сделал. Помогите, плз...

Program MASSIV;
Var
A : array [1..10] of Real; {объявление массива}
i, j : Integer; {счётчики цикла}
min : Integer; {номер минимального по модулю элемента}
minus : Integer; {первй отрицательный элемент}
sum : Integer; {сумма элементов массива}
Begin

writeln ('vvedite 10 el. massiva');
for i:=1 to 10 do begin
readln (a[i]);
end;

min:=abs(min);

End.

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


Perl. Just code it!
******

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

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


1)
imin := 1;
for i := 2 to n do
if abs(x[i]) < abs(x[imin]) then
imin := i;


2)
i := 1;
while (i <= n) and (x[i] >= 0) do
inc(i);
s := 0;
inc(i);
while (i <= n) do begin
s := s + abs(x[i]);
inc(i);
end;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


klem4 Большое спасибо!
Только непонятно, нужно ли оставлять min:=abs(min); (то, что я писал раньше) и откуда взялся х...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
откуда взялся х...
Вопроса "Куда делся А" не возникло при этом?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

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

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


x[i] налогично твоему a[i]. X - это массив.

по поводу первого вопроса - вообще не очень ясно что ты хотел сделать. Хранить нужно только номер минимального (в данном случае по модулю) элемента. Изначально мы берем за минимальный элемент - элемент под номером 1. Затем в цикле смотрим, если очередной элемент с номером i по модулю менньше чем последний найденный минимум (abs(x[imin])), то принимаем его номер за новый минимум imin := i;

volvo smile.gif)

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


Вот, что в итоге получилось:

Program MASSIV;
Var
A : array [1..10] of Real; {ob'yavlenie massiva}
i, j : Integer; {schetchiki tcikla}
min : Integer; {nomer min. el}
minus : Integer; {perviy otric. el}
sum : Integer; {summa el. massiva}
Begin

writeln ('vvedite 10 el. massiva');
for i:=1 to 10 do begin
readln (a[i]);
end;

min:= 1;
for i:= 2 to 10 do
if abs(A[i]) < abs(A[min]) then
min:= i;

writeln ('nomer min. el', min);

i:= 1;
while (i<=10) and (A[i]>= 0) do
inc(i);
sum:= 0;
inc(i);
while (i<= 10) do begin
sum:= sum + abs(A[i]);
inc(i);
end;

writeln ('summa el.', sum);

End.



Ставит указатель после "sum:= sum + abs(A[i]);" и пишет "Error 26: Type mismatch"
И ещё, что за функция такая - inc??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Perl. Just code it!
******

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

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


Правильно ругается, потомучто sum - переменная целого типа(Integer), а элементы массива - вещественного (real)


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


Ок, исправил.
Ошибок, не пишет, всё работает!
Ещё раз, большое спасибо! smile.gif

Только вопрос остался открытым: Что такое inc?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

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

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


inc(i,5);

здесь значение i увеличится на 5
inc(i)

а здесь на 1
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


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

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

 





- Текстовая версия 28.09.2020 19:22
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name