Ошибка в программе

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Ошибка в программе

Сообщение DeADMaN96 » 27.11.2015 09:45:21

Компилятор не выдает ошибок, но когда запускаю программу появляется ошибка exited with exitcode 1
Код: Выделить всё
var d,m,y,k,c,p,a:real;
    z,n,g:longint;
begin
repeat
writeln('введите день события  ');
readln(d);
until (d>0) and (d<32);
repeat
writeln('введите месяц события  ');
readln(m);
until (m>0) and (m<13);
if (m=1) or (m=3) or (m=5) or (m=7) or (m=8)
or (m=10) or (m=12) then
if (d>31) or (d<1) then  writeln('некорректные данные')
else
begin
  if (m=2) then if  (d>29) or (d<1) then writeln('некорректные данные')
  else
   begin
    if (m=4) or (m=6) or (m=9) or (m=11) then if  (d>30) or (d<1) then writeln('некорректные данные')
    else  if (m>=3) and (m<=12) then k:=m-2 else if (m>=1) and (m<=2) then k:=m+10;
   end;
end;
repeat
writeln('введите год события   ');
readln(z);
until (z>1582) and (z<4903);
c:=z div 100;
y:=z mod 100;
a:=abs(int(2.6*k-0.2)+d+y+round(y/4)+round(c/ 4)-2*c);
n:=trunc(a);
p:=n mod 7;
g:=trunc(p);
case g of
0: writeln('понедельник');
1: writeln('вторник');
2: writeln('среда');
3: writeln('четверг*');
4: writeln('пятница');
5: writeln('суббота*');
else writeln(g, 'воскресенье*');
end;
readln
end.

Вот программа, помогите, пожалуйста.
DeADMaN96
незнакомец
 
Сообщения: 2
Зарегистрирован: 27.11.2015 09:40:59

Re: Ошибка в программе

Сообщение Лекс Айрин » 27.11.2015 10:59:45

DeADMaN96 invalid function number

Попробуйте все переменные сделать одного типа. И, кстати, а вам реально нужны такие большие числа? Может быть хватит word, а кое-где и Byte?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Ошибка в программе

Сообщение sign » 27.11.2015 16:21:28

Какого..., ээээ, фига, у вас целые по смыслу данные - real?
Немедленно исправить.

Какая злая нужда заставила вас писать в одной строке несколько if?
Боитесь, что закончатся строки в компе? :D
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Ошибка в программе

Сообщение Лекс Айрин » 27.11.2015 17:09:55

sign,упс... а действительно, вот она и ошибка.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Ошибка в программе

Сообщение McLion » 27.11.2015 17:12:22

Переменным надо дать толковые имена! Это правило номер 1 в программирование!
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: Ошибка в программе

Сообщение DeADMaN96 » 27.11.2015 21:39:24

Лекс Айрин писал(а):DeADMaN96 invalid function number

Попробуйте все переменные сделать одного типа. И, кстати, а вам реально нужны такие большие числа? Может быть хватит word, а кое-где и Byte?

Ничего меньше, чем real компилятор не пускает пускает
sign писал(а):Какого..., ээээ, фига, у вас целые по смыслу данные - real?
Немедленно исправить.

Какая злая нужда заставила вас писать в одной строке несколько if?
Боитесь, что закончатся строки в компе? :D

integer не пускает, компилятор выдает ошибку в строке с формулой, a:=abs(int(2.6*k-0.2)+d+y+round(y/4)+round(c/ 4)-2*c), got extended expected smallint.
На щет if понятия не имею, препод сказал писать так.

И еще я совсем чайник, так что если можно, то "ткните носом" в ошибки.
DeADMaN96
незнакомец
 
Сообщения: 2
Зарегистрирован: 27.11.2015 09:40:59

Re: Ошибка в программе

Сообщение sign » 28.11.2015 07:32:02

Без вникания, чисто зачистка

Код: Выделить всё
program Project1;

var DayWeek, Day, Month, Year: Word;
    c, y, n, k: Word;
begin
  repeat
    write('День события:  ');
    readln(Day);
  until (Day>0) and (Day<32);

  repeat
    write('Месяц события: ');
    readln(Month);
  until (Month>0) and (Month<13);

  if Month = 2 then
    if Day > 29 then begin
      writeln('Некорректные данные');
      exit;
    end
    else
      if Month in [4,6,9,11] then
        if Day > 30 then begin
          writeln('Некорректные данные');
          exit;
        end
        else
          if (Month>=3) and (Month<=12)then k:=Month-2
          else
            if (Month>=1) and (Month<=2) then k:=Month+10;

  repeat
    write('Год события:');
    readln(Year);
  until (Year>1582) and (Year<4903);

  c := Year div 100;
  y := Year mod 100;
  n := trunc(abs(int(2.6 * k - 0.2) + Day + y + round(y/4) + round(c/4) - 2 * c));
  DayWeek := n mod 7;
  case DayWeek of
    0: writeln('понедельник');
    1: writeln('вторник');
    2: writeln('среда');
    3: writeln('четверг*');
    4: writeln('пятница');
    5: writeln('суббота*');
  else writeln(DayWeek, 'воскресенье*');
  end;
  readln;
end.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Ошибка в программе

Сообщение Лекс Айрин » 28.11.2015 10:47:05

DeADMaN96 писал(а):И еще я совсем чайник, так что если можно, то "ткните носом" в ошибки.

Ну так уже ткнули... не может же у Вас дата быть дробным числом!
sign писал(а):Какого..., ээээ, фига, у вас целые по смыслу данные - real?


DeADMaN96 писал(а):На щет if понятия не имею, препод сказал писать так.


отладите и можете отформатировать как препод сказал (но в уме имейте ввиду, что препод иногда может и косячить)
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru