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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2015, 12:56   #1
Полина19
 
Регистрация: 13.02.2015
Сообщений: 6
По умолчанию Задача

Дано число а. Проверить, является ли оно натуральным числом.
Знаю, что натуральные числа, это те числа, которые положительные и целые, предела не имеют. Как в Паскале написать, что данное число не может быть дробным? Никак не доходит...
Полина19 вне форума Ответить с цитированием
Старый 13.02.2015, 13:41   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Код:
var
  code,n:integer;
  s:string;
begin
  readln(s);
  val(s,n,code);
  if (code=0) then
    if n>0 then
      writeln('Натуральное')
    else
      writeln('Не натуральное, целое')
  else
    writeln('Число дробное или ошибка в записи числа.'); 
  readln;
end.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 13.02.2015, 13:48   #3
Полина19
 
Регистрация: 13.02.2015
Сообщений: 6
По умолчанию

А как будет выглядить программа с mod или div?
Полина19 вне форума Ответить с цитированием
Старый 13.02.2015, 13:56   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Полина19 Посмотреть сообщение
А как будет выглядить программа с mod или div?
Гы, полагаю, что задача стоит так - является ли натуральное число простым. Не? Вот там mod и div. А здесь оно не нужно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.02.2015, 13:56   #5
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Никак. Тип числа вы указываете в разделе var. И в дальнейшем вы не можете изменить его тип.
То если дробное, то real, если целое, то integer.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 13.02.2015, 14:03   #6
Полина19
 
Регистрация: 13.02.2015
Сообщений: 6
По умолчанию

Нет, является ли данное число натуральным. Просто ход решения сложноват...Или мне так кажется.

В любом случае, спасибо всем за помощь)

Последний раз редактировалось Stilet; 14.02.2015 в 11:59.
Полина19 вне форума Ответить с цитированием
Старый 14.02.2015, 11:51   #7
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Ничего сложного в программе нет. Сначала вы вводите "число" как строку, затем процедура val пытается преобразовать введенный вами набор символов в целое число. Если все в порядке, то в переменную code будет записан 0, и можно проверять число на "натуральность".
Если же "число" было дробным (либо вовсе не число), то в переменную code будет записан номер символа, в котором встретилась ошибка.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 14.02.2015, 14:39   #8
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

А что, если такой вариант.
если число положительно и функция frac от этого числа отличается от нуля не более чем на некоторый порог (грубо говоря, дробная часть равна нулю), то число натуральное.

Кстати, насколько я помню, нуль - не натуральное число.
Вадим Мошев вне форума Ответить с цитированием
Старый 14.02.2015, 17:50   #9
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Да, такой вариант тоже рассматривался. И успешно сдавался.
Единственное, что препод подправил вариант с frac на вариант c round, заявив, что сравнение с машинным нулем - небезопасная операция.

Код:
var
  r:real;
begin
  readln(r);
//  if (frac(r)=0) and (r>0) then
  if (round(r)=r) and (r>0) then
    writeln('Натуральное')
  else
    writeln('Не натуральное');
  readln;
end.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 14.02.2015, 17:59   #10
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Я предлагал проверять не на равенство машинному нулю, а определить соотношение (больше/меньше).
Вадим Мошев вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на зачёт. проблема Задача на нобелевскую премию! Sabotage5 Паскаль, Turbo Pascal, PascalABC.NET 2 18.03.2013 15:18
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC kimberly Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 17:03
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51