HELP !!!!! HELP
Помогите пл3 написать лабу в делфи!в моё время этот язык назывался паскаль
Полученный массив напечатать в столбик.
X = {0.1, -4, 72, 23.1, 0.45, 3.8, -2.94, 3, 1.1, 12}.
Если можно то пл3 напишите в ответе готовую структуру, спасибо
Y={
1
12
}
{$APPTYPE Console}
uses
SysUtils;
var
x:array[1..10] of double;
y:array[1..10] of integer;
n,i:integer;
t:double;
begin
Writeln('Введите 10 чисел:');
for i := 1 to 10 do begin
Readln(t);
x[i] := t;
end;
n := 0;
for i := 1 to 10 do begin
if (x[i]-round(x[i]) = 0) then begin
inc(n);
y[n] := round(x[i]);
end;
end;
if n = 0 then begin
Writeln('Целочисленных элементов нет')
end else begin
for i := 1 to n do begin
Writeln(y[i]);
end;
end;
end.
x:array[1..10] of doubleFAIL
if (x[i]-round(x[i]) = 0)
FAILдля отрицательных что ли?
неа. попробуй еще раз
у меня конпелятора нету, я проверить не могу. скажи так в чем косяк.
не. не. она скомпилится. и даже будет работать правильно. почти всегда
на маш. эпсилон намекаешь?
BINGO!
вернее можно, но оно станет целым сразу после преобразования из строки в число и записи переменную t.
то есть такое число невозможно будет отличить от целого с помощью типа double
мне кажется, нельзя с клавиатуры ввести такое double x...не вынуждай меня ставить компилятор....
{$APPTYPE Console}
uses
SysUtils;
var
x:array[1..10] of double;
y:array[1..10] of integer;
n,i:integer;
t:double;
begin
Writeln('Введите 10 чисел:');
for i := 1 to 10 do begin
Readln(t);
x[i] := t;
end;
n := 0;
for i := 1 to 10 do begin
if (x[i]-round(x[i]) = 0) then begin
inc(n);
y[n] := round(x[i]);
end;
end;
if n = 0 then begin
Writeln('Целочисленных элементов нет')
end else begin
Writeln('Целые:');
for i := 1 to n do begin
Writeln(y[i]);
end;
Writeln('Исходный массив:');
for i := 1 to 10 do begin
Writeln(x[i]:0:40);
end;
end;
end.
yacht ~ $ ./proga
Введите 10 чисел:
1
2
3
4
5
6
7
8
9
9.000000000000001
Целые:
1
2
3
4
5
6
7
8
9
Исходный массив:
1.000000000000000
2.000000000000000
3.000000000000000
4.000000000000000
5.000000000000000
6.000000000000000
7.000000000000000
8.000000000000000
9.000000000000000
9.000000000000000
yacht ~ $ ./proga
Введите 10 чисел:
1
2
3
4
5
6
7
8
9
9.0000000000000001
Целые:
1
2
3
4
5
6
7
8
9
9
Исходный массив:
1.000000000000000
2.000000000000000
3.000000000000000
4.000000000000000
5.000000000000000
6.000000000000000
7.000000000000000
8.000000000000000
9.000000000000000
9.000000000000000
не вынуждай меня ставить компилятор....ты меня разозлил:
var
x:array[1..10] of double;
y:array[1..10] of integer;
n,i:integer;
t:double;
begin
Writeln('Введите 10 чисел:');
for i := 1 to 10 do begin
Readln(t);
if (t-round(t) = 0)
then
Writeln('ok')
else Writeln('ne ok!');
end;
Readln(t);
end.
1.9999999999999999
ok! - в смысле целое, а это не так
P.S. по хорошему надо прочитать, а потом под дебагером посмотреть содержимое ячейки, потому что при выводе при преобразовании в строку тоже добавляются округления, видно в моем примере выше для 9.000000000000001
2.000..... выводит.
а ты к чему это спросил?
P.S. по хорошему надо прочитать, а потом под дебагером посмотреть содержимое ячейкиага. причем не через вотчес, а в бинарном виде
P.S эх, паскаль. школьные олимпиады, асм-контесты... ностальгия
а ты к чему это спросил?к тому что глюк с машинным эпсилон возникает еще в функциях ввода и с этим ничего поделать нельзя.
и x-round(x) тут не причем
еще: число
9999999999999.999
распечатывается как целое, но fract(t) != 0
а я типа специально написал как "ненастоящий", чтобы прокатило как будто блондинко прогу сама писала
слишком разумная табуляция
твое 99...9.999 распечатывается как целое конечно, но для него x-round(x) != 0.
если найдешь такое число, что x-round(x) = 0 (читай <маш.эпс но frac(x) > 0, то ты победил.
ok! - в смысле целое, а это не такдокажи
А почему round? он вниз что ли округляет в делфи? Или там нету нормальной функции?
в моё время этот язык назывался паскальobject pascal называли делфи, нормально.
round - потому, что в момент написания я не вспомнил как называется функция взятия дробной части.
настоящие программисты не должны так писатьпрога написана на паскале, так что настоящим программистом тут и не пахнет
прога написана на паскале, так что настоящим программистом тут и не пахнетопределение настоящего программиста в студию, пожалуйста.
В прошлом, во времена золотой эры ЭВМ было легко отличать мальчика от мужа (иначе их называют "сосунки" и "настоящие мужчины", соответственно). Тогда настоящие мужчины были те, кто понимал в программировании, с сосунки - те, кто не понимал. Настоящий программист легко произносил такие фразы, как "DO 10 I = 1, 10" или "АВОСТ", а все остальные нечто вроде "ЭВМ слишком сложна для меня" и "Я не могу полагаться на ЭВМ - они слишком безличны".
вообще говоря настоящий программист не сильно от языка-то и зависит...
ShowMessage( inttostr( round(2.5) - round(1.5) ) )
?
к этой задаче и к этому решению различие между математическим раундом и банковским раундом не имеют никакого значения
Если можно то пл3 напишите в ответе готовую структуру, спасибо
-4 72 3 12
НАДЕЮСЬ, ПОМОГ!
Оставить комментарий
don-88888
Помогите пл3 написать лабу в делфи!Задана последовательность X = (x1, x2, …, x10).
Сформировать из неё одномерный массив Y, состоящий только из целочисленных элементов, т.е. дробная часть которых равна нулю, массива Х. Если таковых не окажется, вывести фразу «Целочисленных элементов нет». Полученный массив напечатать в столбик.
X = {0.1, -4, 72, 23.1, 0.45, 3.8, -2.94, 3, 1.1, 12}.
Если можно то пл3 напишите в ответе готовую структуру, спасибо