2014-12-02 3 views
-19

Я работаю над своей домашней работой, и я не хочу, чтобы кто-то выполнял мою домашнюю работу. Я просто хочу знать, в чем проблема с моим кодом.C - типы, не соответствующие

Ошибка:

 
C:\Users\Cojik\Desktop\Codeblocks files\zadaca2_zadatak1\main.c||In function 'main':| 
C:\Users\Cojik\Desktop\Codeblocks files\zadaca2_zadatak1\main.c|28|error: invalid operands to binary > (have 'float *' and 'float')| 
C:\Users\Cojik\Desktop\Codeblocks files\zadaca2_zadatak1\main.c|29|error: incompatible types when assigning to type 'float' from type 'float *'| 
C:\Users\Cojik\Desktop\Codeblocks files\zadaca2_zadatak1\main.c|39|error: invalid operands to binary (have 'float *' and 'float')| 
C:\Users\Cojik\Desktop\Codeblocks files\zadaca2_zadatak1\main.c|63|error: incompatible types when assigning to type 'float' from type 'float *'| 
||=== Build failed: 8 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===| 

Код:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int n, i ,j; 
    float arr[1000], max1=-999999999999999.0, max4=-999999999999999.0, min2=999999999999999.0, min3=999999999999999.0; 
    printf("Enter the number n: "); 
    scanf("%d", &n); 
    if(n<3||n>30) 
     printf("Worng entry!"); 
    else 
    { 
     for(i=0;i<n;i++) 
     { 
      printf("Enter the elements of %d. row: ", i+1); 
      for(j=0;j<n;j++) 
      { 
       scanf("%f", &arr[i]); 
      } 
     } 
     for(i=0;i<n;i++) 
     { 
      for(j=0;j<n;j++) 
      { 
       if(i>j && i<n-1-j) 
       { 
        if(arr[i]>max1) 
         max1=arr[i]; 
       } 
       if(j>i && j<n-1-i) 
       { 
        if(arr[i]<min2) 
         min2=arr[i]; 
       } 
       if(i>j && j>n-1-i) 
       { 
        if(arr[i]<min3) 
         min3=arr[i]; 
       } 
       if(j>i && i>n-1-j) 
       { 
        if(arr[i]>max4) 
         max4=arr[i]; 
       } 
      } 
     } 
     if(max1==max4 && min2==min3) 
     { 
      printf("Array is simetrical!\n"); 
      printf("Elements: o1 = %.3f, o2 = %.3f, o3 = %.3f, o4 = %.3f", max1, min2, min3, max4); 
     } 
     else 
     { 
      printf("Array is not simetrical!\n"); 
      printf("Elements: o1 = %.3f, o2 = %.3f, o3 = %.3f, o4 = %.3f", max1, min2, min3, max4); 
     } 
    } 
    return 0; 
}  

ли мой массив должен быть двумерным? Мой код дает неправильные ответы, если он двумерный, и эта ошибка появляется, если она одномерна, что не предназначено.

+5

, пожалуйста, отправьте код. Кажется, вы используете указатели неправильно в своем коде. – Haris

+2

'float' и' float * '- это другой тип. – BLUEPIXY

+0

Из всех сообщений об ошибках я думаю, что довольно очевидно, что он пытается использовать указатель на float как float или нет ?. – OiciTrap

ответ

1

Кажется, ваш компилятор запутался. Во всяком случае, инициализаторы max1 .. max4 слишком велики для поплавка. Используйте двойной.

Я также отмечаю, что вы делаете if(max1==max4 && min2==min3), однако, это плохая практика, чтобы абсолютно сравнить два значения с плавающей запятой. Вы должны сравнить их в пределах epsilon, точность машины:

#define epsilon 0.0000000001; //(I don't say this value is correct; just an example) 
#define ABS(a) (a<0?-a:a) 

if(ABS(max1-max4)<epsilon && ABS(min2-min3)<epsilon) 
+0

@Aleksandar Misich, спасибо за ваше редактирование. Я заметил ошибку в моем примере и обновил свое решение. –

Смежные вопросы