Задача на массивы, Помогите пожалста |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Задача на массивы, Помогите пожалста |
Zoom |
Сообщение
#1
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Виталий Репутация: 0 |
Дан массив из 5 вещественных чисел в нём надо найти элемент в котором наибольшее кол-во подряд идущих нулей нулей.
|
Ozzя |
Сообщение
#2
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
Не вижу проблемы.
Как вариант: Взять дробную часть (Frac). Перевести ее в строку (str). А уж нахождение "наибольшее кол-во подряд" решалось много-много раз. Поиск Вам поможет. |
Zoom |
Сообщение
#3
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Виталий Репутация: 0 |
Пользоваться строками запрещено. Пытаюсь перевести число в целое путём умножения его на 10 в цикле а потом с помощью div и mod находить каждый символ в числе. Но проблема почему то после выполнения числа получаются аж в 12 степени
Код Program asd; uses crt; var i,k,y:longint; s,s1:string; a:array[1..4] of real; begin clrscr; writeln('Vvedite 4 chisla'); For i:=1 to 4 do begin readln(a[i]); while frac(a[i])<>0 do a[i]:=a[i]*10; end; For I:=1 to 4 do {y:=round(a[i]);} writeln(a[i]); end. Сообщение отредактировано: Zoom - |
Ozzя |
Сообщение
#4
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
Целую часть - отдельно. Дробную - отдельно.
Дробную - умножением на 10 и переводом в целое. Далее выделяешь остатки от деления нацело (mod) и проверка. |
Zoom |
Сообщение
#5
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Виталий Репутация: 0 |
А не подскажите ли условие при котором проверяется достигла ли дробная часть целого числа, а то я понял что frac не подходит в цикле с предусловием?
|
andriano |
Сообщение
#6
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Опять условие предполагает уточнение, которое какжется очевидным всем кроме меня?
Если речь идет о числе, а не о его текстовой записи, то нули могут быть только одного вида - двоичные. Т.е. число следует проверять поразрядно на количество подряд идущих разрядов, установленных в 0. |
Client |
Сообщение
#7
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
Цитата А не подскажите ли условие при котором проверяется достигла ли дробная часть целого числа, а то я понял что frac не подходит в цикле с предусловием? Т.е. если было 0,123 то тебе надо чтоб стало 123? тогда
while frac(x)>0 do x:=x*10Так, на этом же примере цикл выполнился больше раз чем нужно, поэтому можно записать while frac(x)>0.00000001 do x:=x*10 Сообщение отредактировано: Client - |
Zoom |
Сообщение
#8
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Виталий Репутация: 0 |
Можь кто скажет почему у меня после умножения дробной части на 10 , в ответе выводится число со степенью 12(мне стока ноликов не надо)
Код Program asd; uses crt; var i,k:longint; x,y,z:real; s:string; a:array[1..4] of real; begin clrscr; writeln('Vvedite 4 chisla'); For i:=1 to 4 do begin readln(a[i]); y:=frac(a[i]); x:=int(a[i]); While frac(y)>0 do begin y:=y*10; end; writeln(x,' ',y); end; end. Сообщение отредактировано: Zoom - |
Текстовая версия | 23.04.2024 19:57 |