Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2010, 01:03   #1
Willow
 
Регистрация: 26.05.2009
Сообщений: 4
Вопрос Найти в массиве число наиболее близокое к целому числу

Вообще задачку надо решить на паскале.
Дан вектор A(N). Найдите порядковый номер того из элементов, который наиболее близок к какому-нибудь целому числу (первому по порядку, если таких несколько).

Я её пыталась решить, но думаю мой код это полный бред

Uses Crt;
Type Mas = Array [1..20] of Real;
Var A,B : Mas;
i, y, N : Integer;
k : Integer;
Amin, Bmin : Real;
BEGIN
clrScr;
Write('Введите N = ');
ReadLn(N);

For i := 1 to N do {Ввод значений элементов массива А}
begin
Write('A [ ', i, ' ] = '); ReadLn(A[i])
end;

Amin:= A[1]; k:=1; {Поиск элемента}

y:=0;

For i:= 1 to N do
begin
y:=y+1;
B[y]:=abs(A[i]-round(A[i]))
end;
Bmin:=B[1];

For i := 2 to N do
Begin
y:=i;
If B[y]<Bmin then
begin
Amin:=A[i]; k:= i
end;
end;
WriteLn; WriteLn('nomer takoe' , k , '-й');
WriteLn('Его значение ', Amin : 5 : 1); ReadLn
END.

Хелп ми дорогие товарищи вумные
Willow вне форума Ответить с цитированием
Старый 16.01.2010, 03:53   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Ну почему же бред, почти всё правильно, кроме последней строки, где Вы наверное хотели сделать наоборот: Amin:1:5
Вот оптимальнее конечно можно сделать
Код:
Uses Crt;
Type Mas = Array [1..20] of real;
Var A: Mas;
i, N : Integer;
k : Integer;
B: real;
BEGIN

clrScr;
Write('Введите N = ');
ReadLn(N);

For i := 1 to N do {Ввод значений элементов массива А}
begin
Write('A [ ', i, ' ] = '); ReadLn(A[i])
end;

k := 1; B := abs(A[1] - round(A[1]));
for i := 2 to N do
  begin
  if abs(A[i] - round(A[i])) < B then
    begin
    k := i;
    B := abs(A[i] - round(A[i]));
    end;
  end;

WriteLn; WriteLn('nomer takoe' , k , '-й');
WriteLn('Его значение ', A[k] : 1 : 5); ReadLn
END.
Правда real не даёт необходимой точности, и эксперимент показал что он считает 3.2 ближе, чем 6.8. Вариантов решения может быть несколько
1. Считать, что если 2 числа отличаются на какое-то очень малое значение (10E-6), то они равны
2. Включить в настройках компилятора режим 8087 (Options->Compiler->8087/80287) и использовать вместо real double
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 16.01.2010, 13:33   #3
Willow
 
Регистрация: 26.05.2009
Сообщений: 4
По умолчанию

Вот есть же толковые люди))) Спасибо большое
Willow вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal: Наиболее часто встречающееся число в массиве. MaGWaY_minsk Помощь студентам 2 20.01.2010 00:22
Найти и вывести минимальный из четных элементов в массиве, кратный числу 4. Ассемблер. T0P6A Помощь студентам 0 09.05.2009 05:10
Найти в массиве квадратные корни наиболее удаленные друг от друга sher_man Помощь студентам 2 05.12.2007 10:15
В целочисленном массиве найти самое часто повторяющееся число Алена Помощь студентам 2 01.11.2007 19:46