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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2019, 16:39   #1
tara-ta-ta
Пользователь
 
Регистрация: 25.10.2019
Сообщений: 36
По умолчанию проверить является ли введенная с клавиатуры строка правильной записью вещественного отрицательного числа

проверить является ли введенная с клавиатуры строка правильной записью вещественного отрицательного числа
tara-ta-ta вне форума Ответить с цитированием
Старый 25.10.2019, 16:45   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

ПРоблема в чем?
p51x вне форума Ответить с цитированием
Старый 25.10.2019, 16:47   #3
tara-ta-ta
Пользователь
 
Регистрация: 25.10.2019
Сообщений: 36
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
ПРоблема в чем?
в общем сегодня там делал что-то, сказали надо проверить точку и что бы после запятой было все норм, какое условие сделать хз
tara-ta-ta вне форума Ответить с цитированием
Старый 25.10.2019, 16:49   #4
tara-ta-ta
Пользователь
 
Регистрация: 25.10.2019
Сообщений: 36
По умолчанию

Задание 10 тут
Изображения
Тип файла: jpg mnQytCl7EEM.jpg (64.2 Кб, 52 просмотров)
tara-ta-ta вне форума Ответить с цитированием
Старый 25.10.2019, 16:54   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну так правильно сказали. Вон и примеры есть. Проверяйте, что точка максимум 1.
p51x вне форума Ответить с цитированием
Старый 25.10.2019, 17:13   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

всё же просто. в начале должен быть строго один знак "-".
после него обязательно цифры. (количество цифр, кстати, не важно - хоть 100),
потом МОЖЕТ быть знак десятичного разделителя. в вашем задании это точка.
после этой точки могут быть ТОЛЬКО цифры.

всё. единственно, спорный момент - после точки должна быть хоть одна цифра или нет. в примерах ваших после точки цифры присутствуют. на самом деле Паскаль допускает такую запись.
Код:
program ideone;
var s : string;
  k:integer;
  d:double;
begin
  d := -12.;
  WriteLn(d);
  s:='23.';
  Val(s,d,k);
  if k<>0 then WriteLn('Ошибка') else 
  WriteLn(d);
end.
Но не факт, что для вашего задания это является "правильной записью вещественного отрицательного числа"

я бы в вашем случае не позволял отклонений.
т.е.
первым строго знак "-"
потом цифра(цифры)
потом одна ТОЧКА
потом цифра(цифры)

если на любом шаге не соответствует - прерываем проверку - это неверная запись.
если дошли до конца проверяемой строки и не разу не прерывали, значит, все условия выполнены - это правильная запись.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.10.2019, 15:27   #7
tara-ta-ta
Пользователь
 
Регистрация: 25.10.2019
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
всё же просто. в начале должен быть строго один знак "-".
после него обязательно цифры. (количество цифр, кстати, не важно - хоть 100),
потом МОЖЕТ быть знак десятичного разделителя. в вашем задании это точка.
после этой точки могут быть ТОЛЬКО цифры.

всё. единственно, спорный момент - после точки должна быть хоть одна цифра или нет. в примерах ваших после точки цифры присутствуют. на самом деле Паскаль допускает такую запись.
Код:
program ideone;
var s : string;
  k:integer;
  d:double;
begin
  d := -12.;
  WriteLn(d);
  s:='23.';
  Val(s,d,k);
  if k<>0 then WriteLn('Ошибка') else 
  WriteLn(d);
end.
Но не факт, что для вашего задания это является "правильной записью вещественного отрицательного числа"

я бы в вашем случае не позволял отклонений.
т.е.
первым строго знак "-"
потом цифра(цифры)
потом одна ТОЧКА
потом цифра(цифры)

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


Вот я составил программу, но она немного не правильно работает, выводит всегда нет

Код:
var 
i,k:integer;
flag:boolean;
s:string;
begin
writeln('Введите отрицательное вещественное число'); readln(s);
flag:=true;
k:=0;
if s[1]='-' then
                begin
                   for i:=2 to length(s) do 
                                         begin
                                            if s[i]='.' then inc(k) else
                                                                      begin
                                                                         if not((s[i]='0') and (s[i]='9'))then
                                                                                                             begin
                                                                                                                flag:=false;
                                                                                                                break;
                                                                                                               end;
                                                                       end;
                                           end;
                    end;
If (k=0) or (k>1) then flag:=false;
If flag then writeln('да') else writeln('нет');
end.
tara-ta-ta вне форума Ответить с цитированием
Старый 26.10.2019, 15:31   #8
tara-ta-ta
Пользователь
 
Регистрация: 25.10.2019
Сообщений: 36
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Ну так правильно сказали. Вон и примеры есть. Проверяйте, что точка максимум 1.
Программа сверху, почему она всегда выводит нет?
tara-ta-ta вне форума Ответить с цитированием
Старый 26.10.2019, 15:45   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Код:
 if not((s[i]='0') and (s[i]='9'))
У вас цифр, кроме 0 и 9 нет? Одна цифра моджет быть сразу 0 и 9?
p51x вне форума Ответить с цитированием
Старый 26.10.2019, 15:48   #10
tara-ta-ta
Пользователь
 
Регистрация: 25.10.2019
Сообщений: 36
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
 if not((s[i]='0') and (s[i]='9'))
У вас цифр, кроме 0 и 9 нет? Одна цифра моджет быть сразу 0 и 9?
Блиин, точно, моя ошибка) спасибо))
tara-ta-ta вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стек: Проверить, является ли содержимое текстового файла Т правильной записью формулы заданного вида. JoYeRsOl Помощь студентам 1 15.10.2019 16:46
Паскаль: является ли введенная с клавиатуры последовательность символов записью двоичного или шестнадцатеричного числа Студент ММИ Помощь студентам 12 14.11.2014 14:22
Написать программу, которая проверяет, является ли введенная с клавиатуры строка дробным числом. (язык C) Степан Симаков Помощь студентам 3 01.04.2014 23:10
Является ли заданная строка правильной записью вещественного числа с возможным знаком и десятичной точкой Banny Паскаль, Turbo Pascal, PascalABC.NET 7 18.12.2008 22:28
Определить, является ли заданная строка правильной записью вещественного числа Sergik1977 Паскаль, Turbo Pascal, PascalABC.NET 2 18.10.2007 16:53