Программа работает только с целыми числами, а нужно с вещественными - 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.
- При вводе чисел с плавающей точкой всегда есть риск округления, что может повлиять на точность результата.
- Вместо вывода номера элемента можно вывести сам элемент с максимальной суммой разностей.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д