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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2010, 19:02   #1
Dalokoshka
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 27
По умолчанию ПРограмма компилируется, но не работает, в чем ошибка.

Здравствуйте, помогите , пожалуйста, разобраться. В данной программе пользователь вводит дату рождения и получает соответствующий дате знак зодиака. Кроме того, перед тем как вывести знак зодиака программа проверяет правильность введенной даты.
Проблема в том, что какую бы дату я не вводила, программа пишет "неправильно введенный день" - то что после 1го ВАЛ. Я не понимаю, в чем проблема. Может я оператора неправильно использую, тогда как правильно проверить данные введенные пользователем.
Кроме того, если я ввожу дату в формате дд.мм или в виде 10-15 цифр подряд программа выдает ошибку 106.
И еще объясните мне, пожалуйста, могу я попросит ввести пользователя дату в формате дд.мм или использовать . неправильно? А если можно - то как это сделать и проверить.HOROSKOP.rar
Спасибо огромное и низкий поклон всем тем, добрым людям, которые помогают мне - бедному студенту и моим коллегам.

Последний раз редактировалось Dalokoshka; 16.10.2010 в 20:00. Причина: Изменила программу.
Dalokoshka вне форума Ответить с цитированием
Старый 16.10.2010, 19:23   #2
Dalokoshka
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 27
По умолчанию

Программа заработала, ошибка была найдена. Но не решенными остались вопросы:
Кроме того, если я ввожу дату в формате дд.мм или в виде 10-15 цифр подряд программа выдает ошибку 106.
И еще объясните мне, пожалуйста, могу я попросит ввести пользователя дату в формате дд.мм или использовать . неправильно? А если можно - то как это сделать и проверить
Спасибо огромное и низкий поклон всем тем, добрым людям, которые помогают мне - бедному студенту и моим коллегам.

Последний раз редактировалось Dalokoshka; 16.10.2010 в 19:31.
Dalokoshka вне форума Ответить с цитированием
Старый 16.10.2010, 19:33   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
это с чем связано?
Полный проект в архиве в студию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.10.2010, 19:39   #4
Dalokoshka
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 27
По умолчанию

Конечный вариант программы перезагрузила в приложении.
Спасибо огромное и низкий поклон всем тем, добрым людям, которые помогают мне - бедному студенту и моим коллегам.
Dalokoshka вне форума Ответить с цитированием
Старый 16.10.2010, 19:47   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Код:
program horoskops;
uses crt;
var d,m,z,error:integer;
    s:string[3];
label paz;
begin
  ClrScr;
     paz:writeln ('ievadiet dzimshanas datumu');
     readln (s);
         val (s,d,error);
         if (d>32) or (error<>0) then begin
                            writeln ('nepareizi ievadita diena');
                            goto paz
                            end;
     readln (s);
         val (s,m,error);
         if (m>12) or  (error<>0) then begin
                            writeln ('nepareizi ievadits menesis');
                            goto paz
                            end;
     write ('jus esat- ');
         z:=m*100+d;
                case z of
                     321..331, 401..420: writeln ('auns');
                     421..430, 501..520: writeln ('versis');
                     521..531, 601..621: writeln ('dvini');
                     622..630, 701..722: writeln ('vezis');
                     723..731, 801..823: writeln ('lauva');
                     824..831, 901..923: writeln ('jaunava');
                     924..930, 1001..1023: writeln ('svari');
                     1024..1031, 1101..1122: writeln ('skorpions');
                     1123..1130, 1201..1221: writeln ('strelnieks');
                     1222..1231, 101..120: writeln ('mezaziz');
                     121..131, 201..220: writeln ('udensvirs');
                     221..229, 301..320: writeln ('zivis');
               else writeln ('nekorekti ievadits dzimsanas datums')
               end;
readln;
end.
Мне кажется, все проблемы из-за того, что вы неправильно используете лэйблы.
Вроде как вы подоразумеваете под лэйблом вот это
Код:
  paz:writeln ('ievadiet dzimshanas datumu');
     readln (s);
         val (s,d,error);
А сами делаете только вот это:
Код:
 paz:writeln ('ievadiet dzimshanas datumu');
Не забывайте, что лэйблы тоже надо ограничивать begin'ами и end'ами.
Кроме того, я вообще не понял в каком виде надо вводить дату рождения - как бы не вводил, всё равно пишет типа неправильно.Всё-таки как надо?
_-Re@l-_ вне форума Ответить с цитированием
Старый 16.10.2010, 20:12   #6
Dalokoshka
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 27
По умолчанию

Я не знала, что лэйблы надо begin'ами и end'ами ограничивать. Нам это не говорили и более того в примерах программ, которые нам показывали они не ограничены. ВЫ уверенны, что надо?

Дату надо вводить так день (2 цифры, напр 01) ентер месяц (2 цифры напр 01) тогда программа выдает знак зодиака.
Мой вопрос таков: можно ли сделать так , чтоб пользователь вводил дату в формате дд точка мм (напр. 12.12) если да - то как это сделать? и затем как проверять правильность введённых данных (напр. что там именно цифры а буквы и т.д.)

Вопрос №2
Пишу 2-ю программу: пользователь вводит цифры и программа переводит их в арабские , если введены римские и в римские , если - арабские. Это реально?
У меня есть варианты: 1 программа переводит в римские и другая в арабские, вот хочу ее объединить. В блоксхеме получается так:
вводим СТРИНГ
проверяем тип ЧАР или ИНТЕГЕР
если ЧАР переводим в арабские
если ИНТЕГЕР - римские
но это только на бумаге =))) а как сделать программу? или это невозможно?
Спасибо огромное и низкий поклон всем тем, добрым людям, которые помогают мне - бедному студенту и моим коллегам.

Последний раз редактировалось Dalokoshka; 16.10.2010 в 20:20.
Dalokoshka вне форума Ответить с цитированием
Старый 16.10.2010, 20:12   #7
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Мне кажется, все проблемы из-за того, что вы неправильно используете лэйблы.
Вроде как вы подоразумеваете под лэйблом вот это
Код:
  paz:writeln ('ievadiet dzimshanas datumu');
     readln (s);
         val (s,d,error);
А сами делаете только вот это:
Код:
 paz:writeln ('ievadiet dzimshanas datumu');
Не забывайте, что лэйблы тоже надо ограничивать begin'ами и end'ами.
Проблем нет - программа рабочая, лэйблы ограничивать не надо, их вообще никак не получится заключить в операторные скобки begin/end ибо это метка перехода.
Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Кроме того, я вообще не понял в каком виде надо вводить дату рождения - как бы не вводил, всё равно пишет типа неправильно.Всё-таки как надо?
Сначала вводим день рождения, затем ENTER, затем месяц рождения.
Мне интереснее другое - какой это язык?
eoln вне форума Ответить с цитированием
Старый 16.10.2010, 20:18   #8
Dalokoshka
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 27
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Мне интереснее другое - какой это язык?

Зеленым выделен? латышский


я все еще так и не поняла, вводить с точкой можно? или нет?
Спасибо огромное и низкий поклон всем тем, добрым людям, которые помогают мне - бедному студенту и моим коллегам.
Dalokoshka вне форума Ответить с цитированием
Старый 16.10.2010, 20:26   #9
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Проблем нет - программа рабочая, лэйблы ограничивать не надо, их вообще никак не получится заключить в операторные скобки begin/end ибо это метка перехода.
Враньё-лэйблы надо ограничивать.
Например, такой код:
Код:
program gh;
label one, two;
begin
      one:
      begin
            writeln('one');
            writeln('one');
            readln;
            goto two;
      end;
      two:
      begin
            writeln('three');
            write('tw');
            readln;
            halt;
      end;
      goto one;
      readln;
end.
Сначала выведется
one
one
Затем ожидание ентера
three
tw
Выход.
А теперь так:
Код:
program gh;
label one, two;
begin
      one:writeln('one');
      readln;
      writeln('one');
      readln;
      goto two;
      two:
      begin
            writeln('three');
            write('tw');
            readln;
            halt;
      end;
      goto one;
      readln;
end.
Сначала
one
Затем ожидание ентера
Затем вывод
one
Затем
three
tw
Выход.
eoln, вы поняли, почему были неправы?Если лэйбл не ограничивать, то ...получится, что в него входит только одна строчка кода.А чтобы добавить туда много инструкций, нужно юзать составной оператор.Так то.

Цитата:
я все еще так и не поняла, вводить с точкой можно? или нет?
Можно, тогда суть такая:
Код:
Val(Concat(S[1],S[2]),X,Err);
Val(Concat(S[3],S[4]),Y,Err);

Последний раз редактировалось _-Re@l-_; 16.10.2010 в 20:28.
_-Re@l-_ вне форума Ответить с цитированием
Старый 16.10.2010, 20:36   #10
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

_-Re@l-_, путаешь, наверное, с инструкцией case of... - там похожий синтаксис, а вот метки используют для скачка в программе (например, из многих вложенных циклов удобно выскакивать куда-нить подальше).
Dalokoshka, К вопросу о ДД.ММ - заменяем участок кода
Код:
var d,m,z,error:integer;
    s,s2:string[5];
label paz;
begin
  ClrScr;
     paz:writeln ('ievadiet dzimshanas datumu');
     readln (s);
     s2 := copy(s, 1, pos('.', s) - 1);
     delete(s, 1, pos('.', s));
         val (s2,d,error);
         if (d>32) or (error<>0) then begin
                            writeln ('nepareizi ievadita diena');
                            goto paz
                            end;
     {readln (s)};
         val (s,m,error);
         if (m>12) or  (error<>0) then begin
                            writeln ('nepareizi ievadits menesis');
                            goto paz
                            end;
     write ('jus esat- ');
Теперь вводим данные в формате ДД.ММ
http://programmersforum.ru/showthread.php?t=93027 - это по арабским и римским числам. В поиске по форуму ещё есть
eoln вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа работает дольше, чем нужно(( Ильнар70 Паскаль, Turbo Pascal, PascalABC.NET 10 26.09.2010 16:57
Проект компилируется, но не работает kta87 Общие вопросы Delphi 4 01.03.2010 21:53
Программа компилируется, но не работает maziLa Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 17.07.2009 11:24
Ф-ции и процедуры. В чём ошибка??? Программа не работает!:( katya36 Помощь студентам 3 05.03.2009 12:55