Программа работает только с целыми числами, а нужно с вещественными - C (СИ)

Узнай цену своей работы

Формулировка задачи:

вот код:
/* Ввести массив вещественных чисел. Найти и вывести номер элемента, для которого
    сумма разностей с соседними элементами максимальна. Для крайних элементов
    использовать циклическое замыкание. */ 
 
#include <conio.h>
#include <stdio.h>
 
#define SIZE 5 // размер массива
 
void main (void)
{
    int a[SIZE]; // массив
    int first, y=1; // у - счетчик элементов массива; first - макс сумма разностей с соседними элементами
    int difference1, difference2; // разности элементов
    int sum, max;
    
    printf ("Enter 5 numbers:\n");
    printf ("-> ");
    
    for (int k=NULL; k<SIZE; k++)
    scanf ("%i", &a[k]);
    
    for (int i=NULL; i<SIZE; i++)
    {
        
        if (i!=NULL && i!=(SIZE-1))
        {
            difference1 = a[i-1] - a[i];
            difference2 = a[i] - a[i+1];
            sum = difference1 + difference2;
            if (sum>max)
            {
                max=sum;
                first=y;
            }
        }
 
        if (i==0)
        {
            difference1 = a[SIZE-1] - a[i];
            difference2 = a[i] - a[i+1];
            sum = difference1 + difference2;
            if (sum>max)
            {
                max=sum;
                first=y;
            }
        }
 
        if (i==(SIZE-1))
        {
            difference1 = a[i-1] - a[i];
            difference2 = a[i] - a[NULL];
            sum = difference1 + difference2;
            if (sum>max)
            {
                max=sum;
                first=y;
            }
        }
    
     y++;
    }
 
    printf ("\nNumer max sum difference's = %i", first);
    getch();
}
программа работает правильно (гонял ее как только мог), но в задаче нужны вещественные числа я поменял тип int на float, но если вводить 1.0 1.0 1.0 5.0 1.0, то результат выдает неправильно (в этом случае first=2, а должен быть равен 5!!!) в чем моя ошибка ?

Решение задачи: «Программа работает только с целыми числами, а нужно с вещественными»

textual
Листинг программы
/* Ввести массив вещественных чисел. Найти и вывести номер элемента, для которого
    сумма разностей с соседними элементами максимальна. Для крайних элементов
    использовать циклическое замыкание. */ 
 
#include <conio.h>
#include <stdio.h>
 
#define SIZE 5 // размер массива
 
void main (void)
{
    float a[SIZE]; // массив
    int first, y=1; // у - счетчик элементов массива; first - макс сумма разностей с соседними элементами
    float difference1, difference2; // разности элементов
    float sum, max;
    
    printf ("Enter 5 numbers:\n");
    printf ("-> ");
    
    for (int k=NULL; k<SIZE; k++)
    scanf ("%i", &a[k]);
    
    for (int i=NULL; i<SIZE; i++)
    {
        
        if (i!=NULL && i!=(SIZE-1))
        {
            difference1 = a[i-1] - a[i];
            difference2 = a[i] - a[i+1];
            sum = difference1 + difference2;
            if (sum>max)
            {
                max=sum;
                first=y;
            }
        }
 
        if (i==0)
        {
            difference1 = a[SIZE-1] - a[i];
            difference2 = a[i] - a[i+1];
            sum = difference1 + difference2;
            if (sum>max)
            {
                max=sum;
                first=y;
            }
        }
 
        if (i==(SIZE-1))
        {
            difference1 = a[i-1] - a[i];
            difference2 = a[i] - a[NULL];
            sum = difference1 + difference2;
            if (sum>max)
            {
                max=sum;
                first=y;
            }
        }
    
     y++;
    }
 
    printf ("\nNumer max sum difference's = %i", first);
    getch();
}

Объяснение кода листинга программы

  1. Вводится массив вещественных чисел.
  2. Находится и выводится номер элемента, для которого сумма разностей с соседними элементами максимальна.
  3. Для крайних элементов используется циклическое замыкание.
  4. Размер массива определяется константой SIZE равной 5.
  5. С помощью цикла scanf вводится 5 чисел.
  6. Внутри вложенного цикла проверяются разности элементов.
  7. Если текущий элемент не является первым и последним, то проверяются разности с предыдущим и следующим элементами.
  8. Если текущий элемент равен нулю, то проверяются разности с последним элементом и первым элементом.
  9. Если текущий элемент равен размеру массива минус один, то проверяются разности с предпоследним элементом и последним элементом.
  10. Находится максимальная сумма разностей.
  11. Номер элемента с максимальной суммой разностей сохраняется в переменной first.
  12. Выводится номер элемента с максимальной суммой разностей.
  13. Программа ожидает нажатия клавиши для выхода.
  14. Используется библиотека conio.h для работы с консолью.
  15. Используется библиотека stdio.h для ввода-вывода данных.
  16. Вместо типа данных float можно использовать double или long double для более точных вычислений.
  17. Вместо размера массива 5 можно использовать любое другое натуральное число, большее или равное 3.
  18. Вместо использования scanf для ввода чисел можно использовать другие функции ввода, такие как gets или fgets.
  19. При вводе чисел с плавающей точкой всегда есть риск округления, что может повлиять на точность результата.
  20. Вместо вывода номера элемента можно вывести сам элемент с максимальной суммой разностей.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5
Похожие ответы