Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Mace
0 / 0 / 0
Регистрация: 10.12.2014
Сообщений: 16
1

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

03.10.2015, 23:40. Просмотров 346. Ответов 2
Метки нет (Все метки)

Здравствуйте, мне в моей программе нужно из последовательности вещественных чисел найти то число которое ближе всего к заданному. Код прилагается
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <math.h> 
#define MAX  100
 
int arrsize(void)
{ 
  int code, n;
  printf("Введите количество элементов последовательности(Не должно превышать 100): ");
  do
   {
    fflush(stdin);
    code = scanf("%d",&n);
    if (code != 1)
    printf("Введены неверные данные. Повторите ввод\n");
   }while(code!=1);
   return n;
}
 
float indata(int n)
{
 int code,i;
 float num[n],ynum;
  for (i = 0;i < n; i++)
  { 
    do
      {
        printf("Введите %d число: ",i+1);
        fflush(stdin);
        code = scanf("%f",&num[i]);
        if (code != 1) 
          printf("Введены неверные данные. Повторите ввод\n");
      }while (code != 1);
  }
  for (i=0;i<n;i++)
  {
    printf("\n%f",&num[n]);
  }
  do
  {
    printf("\nВведите любое число: ");
    fflush(stdin);
    code = scanf("%f",&ynum);
    if (code != 1) printf("Введены неверные данные. Повторите ввод\n");
  }while (code != 1);
return num[n],ynum;
}
 
float calculate(int n,float num[n], float ynum)
{
  float min;
  int imin,i;
  min = num[0];
  imin = 0;
  for (i=0;i<n;i++)
  {
    if ((abs(num[i]-ynum)) < min) 
     {
       min = num[i];
       imin = i+1;        
     }    
  }
  return imin,min;
}
 
void result(int imin, float min)
{
    printf("\nНаиближайшое число к заданному %d число, со значением %f\n",imin,min);
}
 
int main()
{ 
  float num[MAX],ynum,min; //num[MAX] - последовательность чисел, ynum - заданное число,min - ближайшее число к заданному
  int n,imin;               //n - количество элементов, k - порядковый номер ближайшего к заданному числа  
    setlocale(LC_ALL,"Russian");
    n = arrsize();
    indata(n);
    calculate(n, &num[n], ynum);
    result(imin,min);
}
Однако в функции indata у меня почему-то массив num никак не записывает введенные данные и выводит постоянно 0. Можете объяснить в чем ошибка?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2015, 23:40
Ответы с готовыми решениями:

Дан массив вещественных чисел. Определитьпорядковый номер того из них, который ближе всего к заданному числу Х
Спасибо за помощь!

Найти число, которое ближе всего к целому
Добрый день! Помогите, пожалуйста, решить задачу Только каким-нибудь примитивным способом Дан...

Найти в последовательности число, которое ближе всех к целому числу
Дано натуральное число n и последовательность действительных чисел a1, a2, ..., an. Найти в...

Вывести то число, которое ближе всего к 10.
Помогите пожалуйста, пытался решить задачу через сравнение модулей разностей чисел, но что-то не...

2
Fonduee
Музыка нас Связала
231 / 231 / 52
Регистрация: 26.03.2008
Сообщений: 616
04.10.2015, 00:23 2
Цитата Сообщение от Mace Посмотреть сообщение
printf("\n%f",&num[n]);
Абракадабра! Печатает адрес n+1 элемента, т.е. уже за границами массива.

Цитата Сообщение от Mace Посмотреть сообщение
return num[n],ynum;
Очень, очень плохо, возвращать локальные переменные. В зависимости от компайлера, они могут быть просто перезаписаны другими данными.
1
Vtulhu
425 / 379 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
04.10.2015, 19:04 3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double diff(const double a, const double b) {
    return fabs(a - b);
}
 
int find_min_diff_idx(const double* const arr, const size_t siz, const double sample) {
    int min_diff_idx = 0;
    double min_diff = diff(arr[0], sample);
    for (int i = 1; i < siz; i++) {
        double cur_diff = diff(arr[i], sample);
        if (cur_diff < min_diff) {
            cur_diff = min_diff;
            min_diff_idx = i;
        }
    }
    return min_diff_idx;
}
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2015, 19:04

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Найти среднее арифметическое в массиве, которое ближе всего к X
Прошу помощи! Задача звучит так: Дано действительное число X и массив A, содержащий N значений. В...

Найти элемент последовательности вещественных чисел, ближайший к заданному n
Даны последовательность вещественных чисел a1,a2,…,a15 упорядоченная по возрастанию, и число n не...

В одномерном массиве найти индекс и значение элемента, которое ближе всего к значению -5
Всем доброго дня, нужна помощь, я в паскале только на азах, а девушке задали задание что я, что она...

Как найти номер вещественного числа, которое ближе всего к целому числу?
Дано 20 вещественных чисел. Найти порядковый номер того из них, которое ближе всего к какому-нибудь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.