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

Порядковый номер числа массива, который ближе всего к заданному числу

17.05.2017, 22:42. Просмотров 480. Ответов 4
Метки нет (Все метки)

Написать программу, обрабатывающую одномерный массив.Задана последовательность из N вещественных чисел. Определить порядковый номер того из них, которое ближе всего к заданному числу.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2017, 22:42
Ответы с готовыми решениями:

Определить номер элемента массива, который находится ближе всего к данному целому числу
Привет всем. Дано числа х1, х2, х3, ... , х25. Опредилить номер того, который находится само...

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

Найти элемент массива и его индекс, который ближе всего к заданному числу M
Дан одномерный массив А из N элементов и целое число M. Найти элемент и его индекс, который ближе...

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

4
andreyka93
128 / 128 / 157
Регистрация: 11.04.2015
Сообщений: 343
19.05.2017, 15:32 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
#include <stdio.h>
#include <Windows.h>
#include <time.h>
#include <math.h>
 
#define USE_RANDOM
 
int main() {
 
    int size, enteredNumber, i;
    int currentDifference, index = 0;
 
    printf("Enter the size of array: ");
    scanf("%d", &size);
 
 
    printf("Enter the number to be compared: ");
    scanf("%d", &enteredNumber);
 
    int *arr = malloc(size * sizeof(int));
    if (arr == NULL) {
        fprintf(stderr, "failed to allocate memory.\n");
        exit(-1);
    }
    srand(time(NULL));
 
#if defined(USE_RANDOM)
    for (i = 0; i < size; i++) {
        arr[i] = rand() % size;
        printf("arr[%d]: %d\n", i, arr[i]);
    }
#else
    for (i = 0; i < size; i++) {
        scanf("%d", &arr[i]);
    }
#endif
 
 
    int closestDifference = arr[0] - enteredNumber;
 
 
 
    for (i = 1; i < size; i++) {
        currentDifference = arr[i] - enteredNumber;
        if (abs(currentDifference) < abs(closestDifference)) {
            index = i;
            closestDifference = currentDifference;
        }
    }
 
    printf("Answer arr[%d]: %d\n", index, arr[index]);
    system("pause");
    return 0;
}
1
KatrinLuxury
14 / 14 / 11
Регистрация: 14.11.2016
Сообщений: 264
19.05.2017, 17:37  [ТС] 3
andreyka93, не компилируется даже
0
LFC
732 / 537 / 416
Регистрация: 17.09.2015
Сообщений: 1,599
19.05.2017, 18:17 4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
#define N 6
int main() {
    double A[N]={14.25, 76.1, 113.8, 790.45, 45.19, 27.9};
    double min, x;
    scanf("%lf", &x);
    int i, j = 0;
    min = abs(A[0] - x);
    for(i = 1; i < N; i++){
        if(abs(A[i] - x) < min){
            min = abs(A[i] - x);
            j = i;
        }
    }
    printf("%d\n", j);
}
0
KatrinLuxury
14 / 14 / 11
Регистрация: 14.11.2016
Сообщений: 264
20.05.2017, 21:11  [ТС] 5
LFC, Можете посмотреть, что неправильно? При вводе z вещественного строка с запрос на ввод элемента дублируется, точнее и 1элемент просит и 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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include<locale.h>
#include<math.h>
#include<stdlib.h>
 
const int size = 1000;
int inputn();
double inputz();
void input_mass(int _n, int *_mass);
void number_element(int _n, int *_mass, char _z);
/*--------------------------------------------------------------------*/
/*Основная часть программы*/
int main(void)
    {
        setlocale(LC_ALL, "Russian");
        int n = 0;  /*n - количество чисел*/
        char z = 0;
        int mass[size];/*массив*/
        printf("Данная программа позволяет..\n");
        n = inputn();
        z = inputz();
        input_mass(n, mass);
        number_element(n, mass, z);
        return 0;
    }
/*--------------------------------------------------------------------*/
/*Подпрограмма для ввода количества элементов массива*/
int inputn()
    {
        int ver, _n;/*ver - переменная для проверки данных данных, введённых с клавиатуры, _n - количество чисел*/
        printf("Введите количество элементов n: ");
        printf("n = ");
        do
        {
            fflush(stdin);
            ver = scanf("%d", &_n);
            if ((ver != 1) || (_n < 1))
            {
                printf("Введено не корректное значение, повторите ввод, n-целое число больше 0 \n");
                printf("n = ");
            }
        } while ((ver != 1)& ((getchar()) != '\n') || (_n < 1));
        return _n;
    }
/*--------------------------------------------------------------------*/
/*Подпрограмма для ввода заданного числа*/
double inputz()
{
    char ver;/*ver - переменная для проверки данных данных, введённых с клавиатуры, _z - число*/
    double _z;
    printf("Введите элемент z: ");
    printf("z = ");
    do
    {
        fflush(stdin);
        ver = scanf("%if", &_z);
        if (ver != 1) 
        {
            printf("Введено не корректное значение, повторите ввод\n");
            printf("число = ");
        }
    } while ((ver != 1)& ((getchar()) != '\n'));
    
    return _z;
}
/*--------------------------------------------------------------------*/
/*Подпрограмма для заполнения массива*/
    void input_mass(int _n, int *_mass)
    {
        int ver, i; /*i - счетчик цикла*/
        printf("Введите элементы массива: \n");
        for (i = 1; i <= _n; i++)
        {
            printf("%d-й элемент = ", i);
            do
            {
                fflush(stdin);
                ver = scanf("%d", &_mass[i]);
                if (ver != 1)
                {
                    printf("Введено не корректное значение \n");
                    printf("%d-й элемент = ", i);
                }
            } while ((ver != 1)& ((getchar()) != '\n'));
        }
    }
void number_element(int _n, int *_mass, char _z)
{
    int i; /*i - счетчик цикла*/
    double buf = 0, buf2 = 0,k=0;
    buf = abs(_mass[0]-_z);
    for (i = 1; i <= _n ; i++)
    {
        if (abs(_mass[i] - _z) < buf) {
            buf = abs(_mass[i] - _z);
            k = i;
        }       
    }
    printf("%d\n", k);  
}
Добавлено через 22 часа 11 минут
Программа работает, если в массиве элементы целого типа. Как сделать, чтобы была последовательность вещественных чисел? [меняла тип mass и z на double, но компилятор ругается, что нельзя совмещать int и double]

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include<locale.h>
#include<math.h>
#include<stdlib.h>
 
const int size = 1000;
int inputn();
int inputz();
void input_mass(int *_n, int *_mass);
void number_element(int *_n, int *_mass, int _z);
 
/*--------------------------------------------------------------------*/
/*Основная часть программы*/
int main(void)
{
    setlocale(LC_ALL, "Russian");
    int n = 0;  /*n - количество чисел*/
    int z;
    int mass[size];/*массив*/
    printf("Данная программа позволяет..\n");
    n = inputn();
    z = inputz();
    input_mass(&n, mass);
    number_element(&n, mass, z);
    return 0;
}
/*--------------------------------------------------------------------*/
/*Подпрограмма для ввода количества элементов массива*/
int inputn()
{
    int ver, _n;/*ver - переменная для проверки данных данных, введённых с клавиатуры, _n - количество чисел*/
    printf("Введите количество элементов n: ");
    printf("n = ");
    do
    {
        fflush(stdin);
        ver = scanf("%d", &_n);
        if ((ver != 1) || (_n < 1) || (_n>size))
        {
            printf("Введено не корректное значение, повторите ввод, n-целое число больше 0 \n");
            printf("n = ");
        }
    } while ((ver != 1)& ((getchar()) != '\n') || (_n < 1));
    return _n;
}
/*--------------------------------------------------------------------*/
/*Подпрограмма для ввода заданного числа*/
int inputz()
{
    char ver;/*ver - переменная для проверки данных данных, введённых с клавиатуры, _z - число*/
    int _z;
    printf("Введите элемент z: ");
    printf("z = ");
    do
    {
        fflush(stdin);
        ver = scanf("%if", &_z);
        if (ver != 1)
        {
            printf("Введено не корректное значение, повторите ввод\n");
            printf("число = ");
        }
    } while ((ver != 1)& ((getchar()) != '\n'));
 
    return _z;
}
/*--------------------------------------------------------------------*/
/*Подпрограмма для заполнения массива*/
void input_mass(int *_n, int *_mass)
{
    int ver, i; /*i - счетчик цикла*/
    printf("Введите элементы массива: \n");
    for (i = 0; i <*_n; i++) {
        printf("%d-й элемент = ", i);
        do
        {
            fflush(stdin);
            ver = scanf("%d", &_mass[i]);
            if (ver != 1) {
                printf("Введено не корректное значение \n");
                printf("%d-й элемент = ", i);
            }
        } while ((ver != 1)& ((getchar()) != '\n'));
    }
}
void number_element(int *_n, int *_mass, int _z)
{
    int i; /*i - счетчик цикла*/
 
    int buf;
    int d;
    buf = abs(_mass[0] - _z);
    for (i = 0; i < *_n; i++)
    {
        if (abs(_mass[i] - _z) < buf)
        {
            buf = abs(_mass[i] - _z);
            d = i;
        }
    }
    printf("Ближе всего к заданному числу будет элемент с номером ");
    printf("%d\n", d);
}
0
20.05.2017, 21:11
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2017, 21:11

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

Одномерные массивы. Найти порядковый номер того элемента, который ближе всего к какому-нибудь целому
Помогите, пожалуйста, написать программу в Паскале &quot;Дано 20 вещественных чисел. Найти порядковый...

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

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

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


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

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

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