Программа работает только с целыми числами, а нужно с вещественными - C (СИ)
Формулировка задачи:
вот код:
программа работает правильно (гонял ее как только мог), но в задаче нужны вещественные числа
я поменял тип int на float, но если вводить 1.0 1.0 1.0 5.0 1.0, то результат выдает неправильно (в этом случае first=2, а должен быть равен 5!!!)
в чем моя ошибка ?
Листинг программы
- /* Ввести массив вещественных чисел. Найти и вывести номер элемента, для которого
- сумма разностей с соседними элементами максимальна. Для крайних элементов
- использовать циклическое замыкание. */
- #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();
- }
Решение задачи: «Программа работает только с целыми числами, а нужно с вещественными»
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();
- }
Объяснение кода листинга программы
- Вводится массив вещественных чисел.
- Находится и выводится номер элемента, для которого сумма разностей с соседними элементами максимальна.
- Для крайних элементов используется циклическое замыкание.
- Размер массива определяется константой SIZE равной 5.
- С помощью цикла scanf вводится 5 чисел.
- Внутри вложенного цикла проверяются разности элементов.
- Если текущий элемент не является первым и последним, то проверяются разности с предыдущим и следующим элементами.
- Если текущий элемент равен нулю, то проверяются разности с последним элементом и первым элементом.
- Если текущий элемент равен размеру массива минус один, то проверяются разности с предпоследним элементом и последним элементом.
- Находится максимальная сумма разностей.
- Номер элемента с максимальной суммой разностей сохраняется в переменной first.
- Выводится номер элемента с максимальной суммой разностей.
- Программа ожидает нажатия клавиши для выхода.
- Используется библиотека conio.h для работы с консолью.
- Используется библиотека stdio.h для ввода-вывода данных.
- Вместо типа данных float можно использовать double или long double для более точных вычислений.
- Вместо размера массива 5 можно использовать любое другое натуральное число, большее или равное 3.
- Вместо использования scanf для ввода чисел можно использовать другие функции ввода, такие как gets или fgets.
- При вводе чисел с плавающей точкой всегда есть риск округления, что может повлиять на точность результата.
- Вместо вывода номера элемента можно вывести сам элемент с максимальной суммой разностей.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д