Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 64

Найти в дробном числе наибольшую цифру

09.11.2014, 18:27. Показов 1862. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
program Project17;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
m,z,max2,x,i,max1:integer;
n,p:real;
a,l,y:Double;
begin
writeln('Enter number - ');
readln(n);
x := Trunc(n);
x:=Abs(x);
max1:=x mod 10;
repeat
i:=x mod 10;
x:=x div 10;
if(max1<i) then max1:=i;
until x<1;
y:=frac(n);
for a:=y to 8 do
begin
p:=Trunc(y*10); //7
y:=frac(y*10);///0.25
//5d:=Trunc(l*10); //2
end;
 
if max1>max2 then writeln('max=',max1) else writeln('max=',max2);
Readln;
 
end.


Помогите пожалуйста, дальше не знаю, что писать.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.11.2014, 18:27
Ответы с готовыми решениями:

Программа должна находить наибольшую цифру во вводимом числе
Дан код, нужно найти и исправить ошибку. Program Prog1; var m, x, ost: integer; begin writeln('введите целое число'); ...

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

Найти наибольшую цифру с учетом знака числа в дробной части
найти наибольшую цифру с учетом знака числа в дробной части. программа нужна в паскаль

21
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
09.11.2014, 19:28
Такой вариант:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  x:real;
  s:string;
  max,i:integer;
begin
  write('Введите число: '); readln(x);
  str(x,s);
  max:=Ord(s[1]);
  for i:=2 to length(s) do
    if s[i] in ['0'..'9'] then
      if ord(s[i])>max then
        max:=ord(s[i]);
  writeln(chr(max));
end.
1
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 64
09.11.2014, 23:46  [ТС]
Спасибо большое. Вы меня очень помогли. Можете кое-что объяснить, пожалуйста код программы? И не знаете, как решить эту задачу с помощью функций trunc и frac?
0
Модератор
10411 / 5698 / 3401
Регистрация: 17.08.2012
Сообщений: 17,350
10.11.2014, 13:57
ZX Spectrum-128, ошибочная программа. Для числа 999.123 ответ будет 9, а должно быть 3. И ещё незачем здесь использовать операторы ord и chr: символы '0'..'9' и без того идут по порядку, и, к примеру, при сравнении символов будет '0'<'1' ну и тому подобное.

Frehauf, Вы, на самом деле, не вполне понимаете, что просите.Попробуйте выполнить такую программу:
Pascal
1
2
3
4
5
6
var a: real;
begin
  a := 0.1;
  writeln(a - 0.1);
  readln
end.
И во многих диалектах паскаля в результате получится 5.54975987041018∙10-18, а не 0, как ожидалось. Это происходит потому, что при переводе в двоичную систему счисления многие десятичные числа не могут быть представлены точно ввиду ограниченности разрядной сетки компьютера (при переводе образуется бесконечная двоичная дробь, или слишком большое количество двоичных разрядов в числе, число усекается до допустимого для данного процессора количества двоичных разрядов). Так Вы точно желаете, чтобы, к примеру, для числа 0.1 выводилась цифра 9, а не 1, как Вы ожидаете?
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
10.11.2014, 14:04
Cyborg Drone, почему? Написано же в дробном числе, а не в дробной части числа. И тогда для числа 999.123 ответ будет 9.
Или я что-то не понимаю?
0
Модератор
10411 / 5698 / 3401
Регистрация: 17.08.2012
Сообщений: 17,350
10.11.2014, 14:33
ZX Spectrum-128, дробное число имеет право быть представлено в виде неправильной дроби, когда числитель больше знаменателя, и ещё, кстати, может быть и отрицательным. У Вас же программа воспринимает корректно только дробные положительные числа в десятичной нотации, не содержащие информации о порядке, целая часть которых не превосходит 9.

Добавлено через 2 минуты
Хотя, нет, Вы правы насчёт дробного числа. Что-то я тормознул.

Добавлено через 1 минуту
Программа верная, я извиняюсь. Разве что предусмотреть ещё break для отбрасывания информации о порядке числа.
1
охотник
 Аватар для vint-81
1011 / 535 / 650
Регистрация: 29.09.2014
Сообщений: 1,083
10.11.2014, 14:49
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Разве что предусмотреть ещё break для отбрасывания информации о порядке числа.
+1
ZX Spectrum-128, попробуйте прогнать Вашу программу для 10000.11 у меня получилось 4(fpc, turbo)
1
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
10.11.2014, 15:07
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var
  x:real;
  s:string;
  p,max,i:integer;
begin
  write('Введите число: '); readln(x);
  str(x,s);
  for i:=length(s) downto 1 do
    if (s[i]='E') or (s[i]='e') then
      begin
        p:=i;
        break;
      end;
  delete(s,p,Length(s)-p+1);
  max:=Ord(s[1]);
  for i:=2 to length(s) do
    if s[i] in ['0'..'9'] then
      if ord(s[i])>max then
        max:=ord(s[i]);
  writeln(chr(max));
  readln;
end.
0
Модератор
10411 / 5698 / 3401
Регистрация: 17.08.2012
Сообщений: 17,350
10.11.2014, 15:33
Цитата Сообщение от vint-81 Посмотреть сообщение
у меня получилось 4
Естественно. Имеет место str(x,s); в программе. И поэтому s='1.00001100000000E+0004'. Вот Вам и 4. Ну да, о чём я и говорил. Проще и не вводить именно число, а ввести сразу строку, если используется строка. Ну разве что проверить на корректность... Так, к примеру.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var s:string;
    x: real;
    max: char;
    i, err: integer;
begin
  repeat {цикл для проверки корректности ввода}
    write('Введите число: '); readln(s);
    val(s, x, err);
    if err > 0 then writeln('Неверная запись числа, повторите')
  until err = 0;
  if s[1] = '-' then delete(s, 1, 1);
  max := s[1];
  for i := 2 to length(s) do
    if s[i] in ['e', 'E']
      then break
      else if s[i] in ['0'..'9']
        then if s[i] > max
          then max := s[i];
  write('Максимальная цифра: ', max);
  readln
end.
Добавлено через 14 минут
Ох, нет... Про отрицательные числа забыл... Код подправил, добавил перед циклом удаление первого минуса из записи числа.
1
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 64
10.11.2014, 15:43  [ТС]
Спасибо за объяснение.
0
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 64
10.11.2014, 16:35  [ТС]
Помогите пожалуйста, когда вводят в программу не целое число, с кодом возникают трудности.
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
10.11.2014, 16:48
Frehauf, конкретное число напишите, с которым возникают трудности.
0
 Аватар для APALoff
1648 / 1077 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
10.11.2014, 16:56
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Function MaxDigit(s : String) : Char;
Var c : Char;
Begin
  If Length(s)>0 then
  Begin
    c:=MaxDigit(Copy(s,2,Length(s)-1));
    If s[1] in ['0'..'9'] then
      If s[1]>c then c:=s[1];
  end else c:='0';
  MaxDigit:=c;
end;
 
Begin
  Writeln(MaxDigit('3.1415926535'));
end.
0
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 64
10.11.2014, 17:03  [ТС]
13.25 число.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
program Project17;
{$APPTYPE CONSOLE}
uses
  SysUtils;
var
    m,z,max2,x,i,max1:integer;
     n,p:real;
    a,l,y:Double;
  begin
    writeln('Enter number - ');
    readln(n);
    x := Trunc(n);
    x:=Abs(x);
    max1:=x mod 10;
      repeat
      i:=x mod 10;
      x:=x div 10;
      if(max1<i) then max1:=i;
      until x<1;
        y:=frac(n);
              repeat
      z:=Trunc(y*10);
      if(max2<z) then max2:=z;
      until y<1;
    if max1>max2 then  writeln('max=',max1) else writeln('max=',max2);
    Readln;
  end.
Знаю, что неправильно.
Мне дали задание решить эту проблему с помощью цикла фор с использованием функций trunc и frac с ограничением 8 цифр после запятой, я не понимаю, как это.
0
10.11.2014, 21:03

Не по теме:

Frehauf, дублирование и кросспостинг запрещены. Ваша тема-дубль объединена с этой. Если будете плодить дубли, я с Вами нехорошо поступлю. Рекомендую Вам освежить в памяти правила форума.

0
охотник
 Аватар для vint-81
1011 / 535 / 650
Регистрация: 29.09.2014
Сообщений: 1,083
11.11.2014, 09:56
Лучший ответ Сообщение было отмечено Frehauf как решение

Решение

Цитата Сообщение от Frehauf Посмотреть сообщение
Мне дали задание решить эту проблему с помощью цикла фор с использованием функций trunc и frac с ограничением 8 цифр после запятой, я не понимаю, как это.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var r,dr:real;
    max,i:byte;
    ts,drts:longint;
begin
    writeln('vvedite chislo');{без проверки правильности ввода и не более 8 цифр перед запятой}
    readln(r);
    r:=abs(r);
    ts:=trunc(r);
    dr:=frac(r)+0.1e-9;{+0.000000001}
    for i:=1 to 8 do dr:=dr*10;
    drts:=trunc(dr);
    max:=0;
    for i:=1 to 8 do
     begin
      if ts mod 10 > max then max:=ts mod 10;
      if drts mod 10 > max then max:=drts mod 10;
      ts:=ts div 10;
      drts:=drts div 10
     end;
    writeln('max=',max);
end.
1
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
11.11.2014, 10:19
Цитата Сообщение от vint-81 Посмотреть сообщение
без проверки правильности ввода и не более 8 цифр перед запятой
А нужно
Цитата Сообщение от Frehauf Посмотреть сообщение
с ограничением 8 цифр после запятой,
Добавлено через 3 минуты
8 раз умножаем дробную часть на 10, берем последнюю цифру новой целой части и выбираем максимальную.
0
охотник
 Аватар для vint-81
1011 / 535 / 650
Регистрация: 29.09.2014
Сообщений: 1,083
11.11.2014, 10:25
Цитата Сообщение от Puporev Посмотреть сообщение
8 раз умножаем дробную часть на 10, берем последнюю цифру новой целой части и выбираем максимальную.
я про то, что перед запятой может быть больше 8 цифр, я это не учел
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
11.11.2014, 10:27
Цитата Сообщение от vint-81 Посмотреть сообщение
перед запятой может быть больше 8 цифр,
Про это в условии не говорится, да и не нужно, поскольку мы работаем только с дробной частью.
0
охотник
 Аватар для vint-81
1011 / 535 / 650
Регистрация: 29.09.2014
Сообщений: 1,083
11.11.2014, 10:32
Цитата Сообщение от Puporev Посмотреть сообщение
Про это в условии не говорится, да и не нужно, поскольку мы работаем только с дробной частью.
Цитата Сообщение от ZX Spectrum-128 Посмотреть сообщение
Написано же в дробном числе, а не в дробной части числа. И тогда для числа 999.123 ответ будет 9.
...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.11.2014, 10:32
Помогаю со студенческими работами здесь

Найти старшую цифру в числе
1. Задано два натуральні числа. Знайти найстаршу цифру в першому числі і підрахувати кількість таких цифр у другому числі. 2. Заданий...

Определить наибольшую цифру.
Определить наибольшую цифру заданного произвольного целого положительного числа.

Поменять местами наибольшую и наименьшую цифры в числе
В заданном целом положительном числе N поменять местами наибольшую и наименьшую цифры. Предусмотреть случай, когда таких цифр нет.

В трехзначном числе зачеркнули первую цифру слева, когда полученное двузначное число умножили на 7, то получили данное число. Найти это числ
В трехзначном числе зачеркнули первую цифру слева, когда полученное двузначное число умножили на 7, то получили данное число. Найти это...

Переставить цифру в числе.
Трицифровое число заканчивается цифрой 3. Если эту цифру переместить через два знака влево, то новое число будет на 1 больше утроенного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru