Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2008, 20:50   #1
gred
Пока ещё
Форумчанин
 
Аватар для gred
 
Регистрация: 26.02.2008
Сообщений: 116
По умолчанию Средне гармоническое

Плиз исправте ошибки
Мне надо что когда вводишь 0 или отрицательное число вылезала ошибка
Цитата:
uses crt;
var mas:array[1..50] of integer;
k,n,i:integer;
gs:real;

begin
gs:=0;
n:=0;
for i:=1 to 5 do

begin
write('mas[',i,']=');
readln(mas[i]);
end;

if(mas[i]>0) or (mas[i]<>0) then
begin
for i:=1 to 5 do
begin
gs:=gs+(1/mas[i]);
n:=n+1;
end;
writeln('gs=',n/gs);
readln;
end
else
writeln ('owibka');
readln;
end.
Я мегапрограммер потерявший память.
Если кому помог, поставте '+' я буду благодарен
gred вне форума Ответить с цитированием
Старый 26.02.2008, 21:05   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Вот здесь:
Код:
if(mas[i]>0) or (mas[i]<>0)
достаточно проверять mas[i]<>0, а вот здесь:
Код:
writeln('gs=',n/gs);
было бы очень здорово проверять, что gs не равно нулю.
B_N вне форума Ответить с цитированием
Старый 26.02.2008, 21:17   #3
gred
Пока ещё
Форумчанин
 
Аватар для gred
 
Регистрация: 26.02.2008
Сообщений: 116
По умолчанию

если так то будет считать отрицательные
Напиши циликом прогу плиз а то я запутался
Я мегапрограммер потерявший память.
Если кому помог, поставте '+' я буду благодарен
gred вне форума Ответить с цитированием
Старый 26.02.2008, 21:19   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от gred Посмотреть сообщение
если так то будет считать отрицательные
Напиши циликом прогу плиз а то я запутался
Опечатка. Только (mas[i]>0). Зачем два раза с нулем сравнивать?
------------------------------------
Вас код структурировать учили?
Код:
uses crt;

var mas:array[1..50] of integer;
k,n,i:integer;
gs:real;

begin
	gs:=0;
	n:=0;
	for i:=1 to 5 do begin
		write('mas[',i,']=');
		readln(mas[i]);
	end;

	if mas[i] > 0 then begin
		for i:=1 to 5 do begin
			gs:=gs+(1/mas[i]);
			n:=n+1;
		end;
		writeln('gs=',n/gs);
		readln;
	end
	else
		writeln ('owibka');
	readln;
end.
Теперь видно, где ошибка?

Последний раз редактировалось B_N; 26.02.2008 в 21:25.
B_N вне форума Ответить с цитированием
Старый 26.02.2008, 21:25   #5
gred
Пока ещё
Форумчанин
 
Аватар для gred
 
Регистрация: 26.02.2008
Сообщений: 116
По умолчанию

» Ошибка: вещественное деление на 0 (1.PAS, строка 17)
Вот ошибка вылезает когда вводишь первый 0
Я мегапрограммер потерявший память.
Если кому помог, поставте '+' я буду благодарен
gred вне форума Ответить с цитированием
Старый 26.02.2008, 21:49   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Понятно. Где ошибка не видим.
Код:
const numbers = 5;
var
    mas : array[1..numbers] of integer;
    i : integer;
    gs : real;
begin
    gs := 0;
    i := 1;
    while i <= numbers do begin
        write('mas[',i,']=');
        readln(mas[i]);
        if mas[i] <= 0 then begin
            writeln('owibka');
            readln;
        end
        else i := i + 1;
    end;


    for i:=1 to numbers do begin
        gs := gs + (1/mas[i]);
    end;

    if gs <> 0 then writeln('gs=',numbers / gs)
    else writeln('owibka');
    readln;
end.
B_N вне форума Ответить с цитированием
Старый 26.02.2008, 23:08   #7
gred
Пока ещё
Форумчанин
 
Аватар для gred
 
Регистрация: 26.02.2008
Сообщений: 116
Печаль

Слека не так слово ошибка должно писаться после того как вёл весь массив
например
mas[1]=0
mas[2]=2
mas[3]=3
mas[4]=4
mas[5]=-5
owibka

В этом вся загвоздка
Я мегапрограммер потерявший память.
Если кому помог, поставте '+' я буду благодарен
gred вне форума Ответить с цитированием
Старый 27.02.2008, 06:19   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если тебе нужно проконтролировать правильность ввода всех значений массива, сделай так, чисто по Паскалевски.
Код:
uses crt;
const numbers=5;
var mas:array[1..numbers]of integer;
    i:integer;
    gs:real;
    label 1;
begin
gs:=0;
i:=1;
1:
clrscr;
writeln('Vvedite elem massiva >=0:');
while i<=numbers do
    begin
      write('mas[',i,']=');
      readln(mas[i]);
      i:=i+1;
    end;
for i:=1 to numbers do
if mas[i]<=0 then
    begin
     writeln('Nevernye znachenia!:');
     readln;
     goto 1;
    end;
Дальше не смотрел, видимо все работает, раз вопрос только по проверке.
puporev вне форума Ответить с цитированием
Старый 27.02.2008, 06:56   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Кстати, ребята, я Вас всех поздравляю. Вы все просмотрели конкретный косячок, который допустил новичок (в последнем посте его уже нет.... )

for i:=1 to 5 do
begin
write('mas[',i,']=');
readln(mas[i]);
end;

if(mas[i]>0) or (mas[i]<>0) then ...
вопрос какой элемент массива проверяется? Последний? по i, которое осталось от предыдущего цикла???
:-))
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.02.2008, 08:33   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Серж, если посмотриш внимательно последние посты Бьена и Пупорева, то заметиш что этот баг у них отсутствует - значит не провтыкали.
А вот автор конечно начудил.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определение функции, которая находит кол-во столбцов, сумма в которых больше средне арифметич Sandwich Помощь студентам 11 29.10.2007 12:24