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