IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Помогите с Массивом в Паскале
Ganz
сообщение 15.06.2008 15:02
Сообщение #1





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


Дан вещественный массив x(n). Найти элементы массива, значение которого наиболее близко к какому-нибудь целому числу.

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

Помогите плиз wink.gif

Сообщение отредактировано: Ganz - 15.06.2008 15:55
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 15)
klem4
сообщение 15.06.2008 17:56
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ganz
сообщение 15.06.2008 18:04
Сообщение #3





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


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

честное слово я в этом нуб и разбираться щас нет времени ,может кто программку напишет ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ganz
сообщение 15.06.2008 19:13
Сообщение #4





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


Плизз помогите написать программу (если надо могу свои исходники выложить если помогут но они скорее всего не правильны...)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 15.06.2008 19:21
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Тогда ты ошибся(-лась) разделом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ganz
сообщение 15.06.2008 19:32
Сообщение #6





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


Цитата
Тогда ты ошибся(-лась) разделом.

Всмысле ?
Он!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 15.06.2008 20:10
Сообщение #7


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Покажи что пробовал делать, и скажи с чем конкретно проблема, программа на 3 строчки ...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ganz
сообщение 15.06.2008 22:59
Сообщение #8





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 16.06.2008 0:22
Сообщение #9


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


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

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

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

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

?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ganz
сообщение 16.06.2008 16:54
Сообщение #10





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


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

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

через 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 - 16.06.2008 16:55
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ganz
сообщение 16.06.2008 18:08
Сообщение #11





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


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




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


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 17.06.2008 2:20
Сообщение #12


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Неправильно...
Смотри сам - наиболее близким к целому является 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.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ganz
сообщение 17.06.2008 18:15
Сообщение #13





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


Спасибо ,только вот в результате целого числа не получаеться ((((((((((( там выбираються разные числа почему и с + и с - ....
Вторая часть программы не рабочая...
В чем может быть проблема ?

Сообщение отредактировано: Ganz - 17.06.2008 18:22
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kosyak
сообщение 17.06.2008 23:56
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 100
Пол: Мужской

Репутация: -  0  +


Что-то я тебя не понимаю... Вроде мисс_граффити все так сделала. Если хочешь чтоб выводилось близкое целое число то поставь так:

Код

writeln ('Rezultat: ',round(x[k]));
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ganz
сообщение 18.06.2008 11:08
Сообщение #15





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


У меня работает нормально - 5 раз проверял (правда, на 20 числах) - всё правильно выводит... Не понимаю, где у меня проблема...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 18.06.2008 12:52
Сообщение #16


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


если работает - какие проблемы?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 3:04
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"