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

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

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

 
 Ответить  Открыть новую тему 
> сумма и кол-во отрицательных элементов
snopy
сообщение 21.01.2008 19:27
Сообщение #1


Пионер
**

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

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


Помогите пожайлуста доделать программу.В одномерном массиве, из N вещественных элементов,(n<=50) вычислить сумму и количество отрицательных элементов массива, расположенных между максимальным и минимальным элементами.
Program one;
type
m=array[1..50] of integer;
var
a:m;
i,n:integer;
min,max,mini,maxi:integer;
procedure printArray(var a:m);
var
i:integer;
begin
write('n=');
readln(n);
for i:=1 to n do
a[i]:=random(100)-50
end;
procedure outarray(var a:m);
var
i:integer;
begin
for i:=1 to n do
write('',a[i]:4);
end;
procedure minandmax(var a:m);
var
i:integer;
begin
max:=a[1];
min:=a[1];
for i:= 1 to n do
if a[i]>max then
begin max:=a[i]; maxi:=i;
for i:=1 to n do
if a[i]<min then
begin min:=a[i]; mini:=i;
writeln;
writeln('maxi=',maxi);
writeln('mini=',mini);
end;
end;
end;
procedure sumandkol(var a:m);
var
i,n,s:integer;
begin
writeln('maxi=',maxi);
writeln('mini=',mini);
s:=0;
n:=0;
while a[i]<0 do
begin
if ((a[i]>mini) and (a[i]<maxi)) then
s:=s+a[i];
end;
writeln('summs=',s);
n:=abs(max-min);
writeln('kol-vo',n);
end;
BEGIN
randomize;
printarray(a);
outarray(a);
minandmax(a);
sumandkol(a);
readln;
end.


Сообщение отредактировано: volvo - 27.11.2009 17:00
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Yevgeny
сообщение 21.01.2008 19:55
Сообщение #2


The matrix has me!!!
**

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

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


Сразу бросается в глаза, что массив твой не из вещественных чисел, а из целых!!!
m=array[1..50] of integer;

замени integer на real!!!


--------------------
"Брать производную можно научить даже обезьяну" - мой препод по матану! :-)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
snopy
сообщение 21.01.2008 19:59
Сообщение #3


Пионер
**

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

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


а что ещё исправить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Yevgeny
сообщение 21.01.2008 20:01
Сообщение #4


The matrix has me!!!
**

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

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


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

Сообщение отредактировано: Yevgeny - 21.01.2008 20:03


--------------------
"Брать производную можно научить даже обезьяну" - мой препод по матану! :-)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
snopy
сообщение 21.01.2008 20:03
Сообщение #5


Пионер
**

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

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


почему ведь должно проходится с первого
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 21.01.2008 20:10
Сообщение #6


Профи
****

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

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


Тебе не нужны значения мах и min, а нужны их номера.
uses crt;
const
n=10;
type
m=array[1..n] of integer;
var
a:m;
imin,imax:integer;

procedure printArray(var a:m);
var
i:integer;
begin
for i:=1 to n do
read(a[i])
end;

procedure outarray(var a:m);
var
i:integer;
begin
for i:=1 to n do
write(a[i]:5);
end;

procedure minandmax(var a:m);
var
i:integer;
begin
imax:=1;
imin:=1;
for i:= 1 to n do begin
if a[imax]<a[i] then imax:=i;
if a[imin]>a[i] then imin:=i
end;
writeln(' IMAX= ',imax,' IMIN= ',imin);
end;

procedure sumandkol(var a:m);
var
i,n,s:integer;
begin
s:=0;
n:=0;
for i:= imax+1 to imin-1 do begin //раз МЕЖДУ ними
if a[i]<0 then s:=s+a[i];
inc(n)
end;

writeln('summs=',s);
writeln('kol-vo',n);
end;
BEGIN
clrscr;
printarray(a);
outarray(a);
minandmax(a);
sumandkol(a);
readkey;
end.
Вот мой вариант, исправь тока типы и ввод матрицы
Проверил не на все варианты, но не вижу причин чтоб не работало
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
snopy
сообщение 21.01.2008 20:18
Сообщение #7


Пионер
**

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

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


всё равно где то ошибка
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Yevgeny
сообщение 21.01.2008 20:22
Сообщение #8


The matrix has me!!!
**

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

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


видимо не все, если я не оибаюсь... smile.gif Прикрепленное изображение


--------------------
"Брать производную можно научить даже обезьяну" - мой препод по матану! :-)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 21.01.2008 20:23
Сообщение #9


Профи
****

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

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


Цитата
расположенных между максимальным и минимальным элементами.
blum.gif И сколько между ними отрицательных элементов?

Сообщение отредактировано: Client - 21.01.2008 20:27
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
snopy
сообщение 21.01.2008 20:28
Сообщение #10


Пионер
**

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

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


а если другой набор встречается то неправильно считается.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Yevgeny
сообщение 21.01.2008 20:29
Сообщение #11


The matrix has me!!!
**

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

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


сорри smile.gif


--------------------
"Брать производную можно научить даже обезьяну" - мой препод по матану! :-)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 21.01.2008 20:32
Сообщение #12


Профи
****

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

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


Цитата
а если другой набор встречается то неправильно считается.
Не работает то, не работает сё... Ты покажи на каких примерах дало неправильный результат
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Yevgeny
сообщение 21.01.2008 20:32
Сообщение #13


The matrix has me!!!
**

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

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


введи например, -10,-5...,20,1,2,3
и их ноль всё равно ведь будет... blum.gif smile.gif

Добавлено через 4 мин.
ну правильно, потому что s, и n должны быть параметрами процедуры, а не локальными переменными smile.gif вот и ошибка...


--------------------
"Брать производную можно научить даже обезьяну" - мой препод по матану! :-)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 21.01.2008 20:37
Сообщение #14


Гость






Сорри, что вмешиваюсь, а если imax будет БОЛЬШЕ imin - то цикл For не будет просто пропущен? Надо еще ко всему написанному поменять imin и imax местами так, чтобы imin было гарантированно НЕ МЕНЬШЕ чем imax...
 К началу страницы 
+ Ответить 
Yevgeny
сообщение 21.01.2008 20:40
Сообщение #15


The matrix has me!!!
**

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

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


а вот и нет blink.gif
это я на счёт своего сообщения...

Сообщение отредактировано: Yevgeny - 21.01.2008 20:40


--------------------
"Брать производную можно научить даже обезьяну" - мой препод по матану! :-)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 21.01.2008 20:41
Сообщение #16


Профи
****

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

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


Цитата
Сорри, что вмешиваюсь, а если imax будет БОЛЬШЕ imin - то цикл For не будет просто пропущен? Надо еще ко всему написанному поменять imin и imax местами так, чтобы imin было гарантированно НЕ МЕНЬШЕ чем imax...
Я только рад smile.gif
А всего-то надо чуть изменить
procedure sumandkol(var a:m);
var
i,n,s,k:integer;
begin
s:=0;
n:=0;
if imin<imax then begin
k:=imax;
imax:=imin;
imin:=k
end;
for i:= imax+1 to imin-1 do begin
s:=s+a[i];
inc(n)
end;

writeln('summs=',s);
writeln('kol-vo',n);
end;
Про что, собственно, забыл уточнить

Сообщение отредактировано: Client - 21.01.2008 20:42
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
snopy
сообщение 21.01.2008 20:44
Сообщение #17


Пионер
**

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

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


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

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

 



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