Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите с Массивом в Паскале
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Ganz
Дан вещественный массив x(n). Найти элементы массива, значение которого наиболее близко к какому-нибудь целому числу.

В данной программе надо чтобы при запуске выводился на экран начальный массив из вещественных чисел(отрицательных и положительных) и после от туда выбирались элементы наиболее близкие какому нибудь целому числу .

Помогите плиз wink.gif
klem4
Тебе нужно найти элемент массива X, для которого значение abs(x[i] - value) будем минимальным, где value - число которое ты вводишь
Ganz
Цитата
Тебе нужно найти элемент массива X, для которого значение abs(x[i] - value) будем минимальным, где value - число которое ты вводишь

честное слово я в этом нуб и разбираться щас нет времени ,может кто программку напишет ?
Ganz
Плизз помогите написать программу (если надо могу свои исходники выложить если помогут но они скорее всего не правильны...)
andriano
Тогда ты ошибся(-лась) разделом.
Ganz
Цитата
Тогда ты ошибся(-лась) разделом.

Всмысле ?
Он!
klem4
Покажи что пробовал делать, и скажи с чем конкретно проблема, программа на 3 строчки ...
Ganz
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.


Проблема в то что не выводиться массив с вещественными числами ,а я сам его вважу (а вот как сделать чтоб сам выводился незнаю )

Добавлено через 17 мин.
Есть еще какой-то способ без использование "frac" ,там как то вычитанием из вещественного масива целого ,для получения целой части ,вроде как-то так )))) Вот незнаю как mega_chok.gif
мисс_граффити
Цитата
Проблема в то что не выводиться массив с вещественными числами ,а я сам его вважу (а вот как сделать чтоб сам выводился незнаю )

вводился или выводился?

Цитата
res:=1-(1-frac(x[i]));

а нельзя просто
Код
res:=frac(x[i]);

?
Ganz
смысл в том что у меня на экран должен выводиться первоначальный массив из вещественых чисел в том числе и отрицательные ,а из них выбирались приблеженно целые

Машина случайным образом сама заполняет массив (причем заполняет массив вещественными числами как отрицательными так и положительными )

через 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



Ganz
Вот еще повазился с прогой и получилось так :




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



Вот теперь незнаю правильно ли это или нет ,подскажите? smile.gif


мисс_граффити
Неправильно...
Смотри сам - наиболее близким к целому является 90.00
А у тебя в ответе совсем другое число.

Ошибка в том, что ты берешь остаток не по модулю, а со знаком.
попробуй так:
Код
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 abs(frac(x[i]))>=0.5 then
    res:=1-abs(frac(x[i]))
  else
    res:=abs(frac(x[i]));
  if res<min then
    begin
    min:=res;
    k:=i;
    end;
  end;

for i:=1 to n do
  write (x[i]:0:3 ,' ');

writeln;
writeln ('Rezultat: ',x[k]:0:3);
readln;
end.
Ganz
Спасибо ,только вот в результате целого числа не получаеться ((((((((((( там выбираються разные числа почему и с + и с - ....
Вторая часть программы не рабочая...
В чем может быть проблема ?
kosyak
Что-то я тебя не понимаю... Вроде мисс_граффити все так сделала. Если хочешь чтоб выводилось близкое целое число то поставь так:

Код

writeln ('Rezultat: ',round(x[k]));
Ganz
У меня работает нормально - 5 раз проверял (правда, на 20 числах) - всё правильно выводит... Не понимаю, где у меня проблема...
мисс_граффити
если работает - какие проблемы?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.