Проверка выходных данных
В конце, как я понял программа смотрит, делится ли Z на предыдущий элемент массива, если не делится то выводится 0. Не могу понять как сделать так чтобы вместо 0 выводился текст по типу: "Элементы не являются членами геометрической прогрессии". Если делится то выводится Z, если нет, то текст. Листинг:
#include <stdio.h>
#include <locale.h>
int main(void)
{
setlocale (LC_ALL, "Russian");
int a[10];
int n;
printf("N: ");
scanf("%d",&n);
int i;
for (i=0; i<n; ++i){
printf("a[%i] : ",i+1);
scanf("%d",&a[i]);
}
float z=(float)a[1]/(float)a[0];
for (i=1; i<n; ++i) {
if (z!=(float)a[i]/(float)a[i-1]) {
z=0;
}
}
printf("%f\n: ",z);
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Это
float z=(float)a[1]/(float)a[0];
for (i=1; i<n; ++i) {
if (z!=(float)a[i]/(float)a[i-1]) {
z=0;
}
}
очень плохая идея — сравнивать числа с плавающей точкой на равенство. Куда лучше сравнивать целочисленные значения, которые сравниваются точно:
for (i=1; i<n; ++i) {
if (a[1]*a[i-1] != a[0]*a[i])
{
printf("Это не геометрическая прогрессия\n");
return 0;
}
}