Дан вещественный массив x(n). Найти элементы массива, значение которого наиболее близко к какому-нибудь целому числу.
В данной программе надо чтобы при запуске выводился на экран начальный массив из вещественных чисел(отрицательных и положительных) и после от туда выбирались элементы наиболее близкие какому нибудь целому числу .
Помогите плиз
Тебе нужно найти элемент массива X, для которого значение abs(x[i] - value) будем минимальным, где value - число которое ты вводишь
Плизз помогите написать программу (если надо могу свои исходники выложить если помогут но они скорее всего не правильны...)
Тогда ты ошибся(-лась) разделом.
Покажи что пробовал делать, и скажи с чем конкретно проблема, программа на 3 строчки ...
const
n=10;
var
x: array [1..n] of real;
i,k : integer;
min,res : real;
begin
for i:=1 to n do
begin
write('x[',i,']=');
readln (x[i]);
end;
min:=1;
for i:=1 to n do
begin
if frac(x[i]) >=0.5 then res:=1-frac(x[i])
else res:=1-(1-frac(x[i]));
if res< min then
begin
min:=res;
k:=i;
end;
end;
write('Rezultat: ',x[k]:0:3);
readln;
end.
смысл в том что у меня на экран должен выводиться первоначальный массив из вещественых чисел в том числе и отрицательные ,а из них выбирались приблеженно целые
Машина случайным образом сама заполняет массив (причем заполняет массив вещественными числами как отрицательными так и положительными )
через Random
Добавлено через 11 мин.
Попробывал сделать так
Uses crt;
const
n=10;
var
x: array [1..n] of real;
i,k : integer;
min,res : real;
begin
clrscr;
randomize;
for i:=1 to n do
begin
x[i]:=random(999);
end;
min:=1;
for i:=1 to n do
begin
if frac(x[i]) >=0.5 then res:=frac(x[i])
else res:=1-(1-frac(x[i]));
if res> min then
begin
min:=res;
k:=i;
end;
end;
for i:=1 to n do
begin
write (x[i]:0:1 ,' ');
end;
write('Rezultat: ',x[k]:0:3);
readln;
end.
2 695 562 910 134 940 115 370 251 261 Rezultat: 2.000
Вот еще повазился с прогой и получилось так :
Uses crt;
const
n=10;
var
x: array [1..n] of real;
i,k : integer;
min,res : real;
begin
clrscr;
randomize;
writeln ('Ishodnii massiv');
for i:=1 to n do
begin
x[i]:=random(99)+random ;
if random > 0.5 then x[i]:=-x[i];
end;
min:=1;
for i:=1 to n do
begin
if frac(x[i]) >=0.5 then res:=1-frac(x[i])
else res:=1-(1- frac(x[i]));
if res< min then
begin
min:=res;
k:=i;
end;
end;
for i:=1 to n do
begin
write (x[i]:0:2 ,' ');
end;
writeln;
writeln ('Rezultat: ',x[k]:0:3);
readln;
end.
Ishodnii massiv
90.00 -23.67 66.71 98.17 -89.16 -12.07 48.47 -36.63 55.47 -14.76
Rezultat: -14.762
Неправильно...
Смотри сам - наиболее близким к целому является 90.00
А у тебя в ответе совсем другое число.
Ошибка в том, что ты берешь остаток не по модулю, а со знаком.
попробуй так:
Спасибо ,только вот в результате целого числа не получаеться ((((((((((( там выбираються разные числа почему и с + и с - ....
Вторая часть программы не рабочая...
В чем может быть проблема ?
Что-то я тебя не понимаю... Вроде мисс_граффити все так сделала. Если хочешь чтоб выводилось близкое целое число то поставь так:
У меня работает нормально - 5 раз проверял (правда, на 20 числах) - всё правильно выводит... Не понимаю, где у меня проблема...
если работает - какие проблемы?