[Çözüldü] Hatayı bulamadım bir türlü

Başlatan Pozitron, 02 Nisan 2015 - 15:03:24

« önceki - sonraki »

0 Üyeler ve 3 Ziyaretçi konuyu incelemekte.

Pozitron

Son zamanlarda C ile ilgili sorularım oluyor öğrenme sürecinde olduğum için ve bir kod yazdım.Hata veriyor.Acaba bir bakabilir misiniz ben bulamadım hatayı da?

#include <stdio.h>
#define sat
#define sut
#define i
#define j
#define k

float maximum(float dizi[][],int satir,int sutun);
float minimum(float dizi[][],int satir,int sutun);
float dizi_goster(float dizi[][]);

int main(){
printf("Satır sayısı>\t");
scanf("%d",&sat);
printf("Sütun sayısı>\t");
scanf("%d",&sut);
float matris[sat][sut];
for(i=0;i<=sat;i++){
  for(j=0;j<=sut;j++){
   printf("Öğrencinin %d.sınav notunu giriniz>\t",j+1);
   scanf("%f",&matris[i][j]);
   }
}
printf("Öğrencilerin notlarını görmek istiyor musunuz?(Evet için 1,hayır için 2)");
scanf("%d",k);
switch(k){
  case 1:
   dizi_goster(matris);
   printf("Maksimum not:%f",maximum(matris,sat,sut));
   printf("Minimum not:%f",minimum(matris,sat,sut));
   break;
  case 2:
   printf("Pekala.");
   break;
  default:
   printf("Yanlış komut");
  }
return 0;
}
/*Ubuntu.tr forumunda üye olan blackwidow'a ve Reverser'a teşekkürler.*/
int dizi_goster(float dizi[][]){
for(i=0;i<sat;++i){
  for(j=0;j<sut;++j)
   {
    printf("%d",dizi[i][j]);
   }
  printf("\n");
  }
return 0;
}

float maximum(float dizi[][],int satir,int sutun){
float max=dizi[0][0];
for(i=0;i<=satir;i++){
  for(j=0;j<=sutun;j++){
   if(max<dizi[i][j]){
    max=dizi[i][j];
    }
   }
  }
return max;
}

float minimum(float dizi[][],int satir,int sutun){
float min=dizi[0][0];
for(i=0;i<=satir;i++){
  for(j=0;j<=sutun;j++){
   if(min>dizi[i][j]){
    min=dizi[i][j];
    }
   }
  }
return min;
}
 
To follow the path,look to the master,follow the master,walk with the master,see through the master,become the master.

ercan_elo_bil


Pozitron

#2
O zaman tanımlanamıyor.define int yazınca da aynı şekilde.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 02 Nisan 2015 - 15:50:37

Normal define ile devam edersek,hata şu:

float maximum(float dizi[][],int satir,int sutun);
                     ^
div.c:9:21: error: array type has incomplete element type
float minimum(float dizi[][],int satir,int sutun);
                     ^
div.c:10:25: error: array type has incomplete element type
float dizi_goster(float dizi[][]);
                         ^
div.c: In function 'main':
div.c:14:17: error: expected expression before ')' token
  scanf("%d",&sat);
                 ^
div.c:16:17: error: expected expression before ')' token
  scanf("%d",&sut);
                 ^
div.c:17:8: error: array type has incomplete element type
  float matris[sat][sut];
        ^
div.c:18:7: error: expected expression before '=' token
  for(i=0;i<=sat;i++){
       ^
div.c:18:20: error: expected expression before ')' token
  for(i=0;i<=sat;i++){
                    ^
div.c:19:21: error: expected expression before ')' token
   for(j=0;j<=sut;j++){
                     ^
div.c:21:24: error: expected expression before ']' token
    scanf("%f",&matris[i][j]);
                        ^
div.c:25:14: error: expected expression before ')' token
  scanf("%d",k);
              ^
div.c:26:10: error: expected expression before ')' token
  switch(k){
          ^
div.c:28:4: error: type of formal parameter 1 is incomplete
    dizi_goster(matris);
    ^
div.c:29:47: error: expected expression before ',' token
    printf("Maksimum not:%f",maximum(matris,sat,sut));
                                               ^
div.c:29:47: error: type of formal parameter 1 is incomplete
div.c:30:46: error: expected expression before ',' token
    printf("Minimum not:%f",minimum(matris,sat,sut));
                                              ^
div.c:30:46: error: type of formal parameter 1 is incomplete
div.c: At top level:
div.c:41:23: error: array type has incomplete element type
int dizi_goster(float dizi[][]){//Ubuntu.tr forumunda üye olan blackwidow'a teşekkürler.
                       ^
div.c:41:5: error: conflicting types for 'dizi_goster'
int dizi_goster(float dizi[][]){//Ubuntu.tr forumunda üye olan blackwidow'a teşekkürler.
     ^
div.c:10:7: note: previous declaration of 'dizi_goster' was here
float dizi_goster(float dizi[][]);
       ^
div.c: In function 'dizi_goster':
div.c:42:7: error: expected expression before '=' token
  for(i=0;i<sat;++i){
       ^
div.c:42:19: error: expected expression before ')' token
  for(i=0;i<sat;++i){
                   ^
div.c:43:20: error: expected expression before ')' token
   for(j=0;j<sut;++j)
                    ^
div.c: At top level:
div.c:52:21: error: array type has incomplete element type
float maximum(float dizi[][],int satir,int sutun){
                     ^
div.c: In function 'maximum':
div.c:54:7: error: expected expression before '=' token
  for(i=0;i<=satir;i++){
       ^
div.c:54:22: error: expected expression before ')' token
  for(i=0;i<=satir;i++){
                      ^
div.c:55:23: error: expected expression before ')' token
   for(j=0;j<=sutun;j++){
                       ^
div.c:57:15: error: expected expression before ']' token
     max=dizi[i][j];
               ^
div.c: At top level:
div.c:64:21: error: array type has incomplete element type
float minimum(float dizi[][],int satir,int sutun){
                     ^
div.c: In function 'minimum':
div.c:66:7: error: expected expression before '=' token
  for(i=0;i<=satir;i++){
       ^
div.c:66:22: error: expected expression before ')' token
  for(i=0;i<=satir;i++){
                      ^
div.c:67:23: error: expected expression before ')' token
   for(j=0;j<=sutun;j++){
                       ^
div.c:69:15: error: expected expression before ']' token
     min=dizi[i][j];
To follow the path,look to the master,follow the master,walk with the master,see through the master,become the master.

Amenofis

Çalıştığın kaynakta sorun var sanırım. define ile sembolik sabit tanımlanır değişken değil. (C' de sabitlerin büyük harflerle yazılması gelenektir)

#define SAT 5
scanf("%d", &SAT); // hatalı

Bu ifade şu şekilde açılır önişlemci tarafından;
scanf("%d", &5);

Ne kadar saçma oldu değil mi? Çözüm int ile tanımlamak (main içinde yap). Olmuyor demişsin ama önceki açtığın konuda oluyordu şimdi ne değişti?

blackwidow

#4

#include <stdio.h>
#define MAX 100

double maximum(double dizi[][MAX],int satir,int sutun);
double minimum(double dizi[][MAX],int satir,int sutun);
void dizi_goster(double dizi[][MAX] , int satir , int sutun);


int main(){
int i , j , k , sat , sut;
double matris[MAX][MAX];
printf("Satır sayısı>\t");
scanf("%d",&sat);
printf("Sütun sayısı>\t");
scanf("%d",&sut);

for(i=0;i<sat;++i){
    for(j=0;j<sut;++j){
      printf("Öğrencinin %d.sınav notunu giriniz>\t",j+1);
      scanf("%lf",&matris[i][j]);
    }
}

printf("Öğrencilerin notlarını görmek istiyor musunuz?(Evet için 1,hayır için 2)");
scanf("%d",&k);
switch(k){
  case 1:
   dizi_goster(matris,sat,sut);
   printf("Maksimum not:%.1f\n",maximum(matris,sat,sut));
   printf("Minimum not:%.1f\n",minimum(matris,sat,sut));
   break;
  case 2:
   printf("Pekala.");
   break;
  default:
   printf("Yanlış komut");
  }
return 0;
}
/*Ubuntu.tr forumunda üye olan blackwidow'a ve Reverser'a teşekkürler.*/
void dizi_goster(double dizi[][MAX] , int satir , int sutun){
int i , j;
for(i=0;i<satir;++i){
  for(j=0;j<sutun;++j)
    printf("%.1f ",dizi[i][j]);
   
    printf("\n");
  }
}

double maximum(double dizi[][MAX],int satir,int sutun){
int i , j;
double max=dizi[0][0];
for(i=0;i<satir;i++){
  for(j=0;j<sutun;j++)
   if(max<dizi[i][j])
    max=dizi[i][j];
   
   
  }
return max;
}

double minimum(double dizi[][MAX],int satir,int sutun){
  int i , j;
  double min = dizi[0][0];
 
  for(i = 0 ; i < satir ; ++i)
  {
    for(j = 0; j < sutun ; ++j)
    {
      if(min > dizi[i][j])
      {
        min = dizi[i][j];
      }

    }

  }

  return min;

}






Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 02 Nisan 2015 - 21:38:46

kodu değiştirdim

float'ı kullanmıyorum onun yerine double kullandım ama işinize yarayacaktır.

Pozitron

Alıntı yapılan: Amenofis - 02 Nisan 2015 - 16:15:18
Çalıştığın kaynakta sorun var sanırım. define ile sembolik sabit tanımlanır değişken değil. (C' de sabitlerin büyük harflerle yazılması gelenektir)

#define SAT 5
scanf("%d", &SAT); // hatalı

Bu ifade şu şekilde açılır önişlemci tarafından;
scanf("%d", &5);

Ne kadar saçma oldu değil mi? Çözüm int ile tanımlamak (main içinde yap). Olmuyor demişsin ama önceki açtığın konuda oluyordu şimdi ne değişti?
main içerisinde tanımlamamıştım yanlış anlamışım sanırım define'ı
Alıntı yapılan: blackwidow - 02 Nisan 2015 - 21:34:01

#include <stdio.h>
#define MAX 100

double maximum(double dizi[][MAX],int satir,int sutun);
double minimum(double dizi[][MAX],int satir,int sutun);
void dizi_goster(double dizi[][MAX] , int satir , int sutun);


int main(){
int i , j , k , sat , sut;
double matris[MAX][MAX];
printf("Satır sayısı>\t");
scanf("%d",&sat);
printf("Sütun sayısı>\t");
scanf("%d",&sut);

for(i=0;i<sat;++i){
    for(j=0;j<sut;++j){
      printf("Öğrencinin %d.sınav notunu giriniz>\t",j+1);
      scanf("%lf",&matris[i][j]);
    }
}

printf("Öğrencilerin notlarını görmek istiyor musunuz?(Evet için 1,hayır için 2)");
scanf("%d",&k);
switch(k){
  case 1:
   dizi_goster(matris,sat,sut);
   printf("Maksimum not:%.1f\n",maximum(matris,sat,sut));
   printf("Minimum not:%.1f\n",minimum(matris,sat,sut));
   break;
  case 2:
   printf("Pekala.");
   break;
  default:
   printf("Yanlış komut");
  }
return 0;
}
/*Ubuntu.tr forumunda üye olan blackwidow'a ve Reverser'a teşekkürler.*/
void dizi_goster(double dizi[][MAX] , int satir , int sutun){
int i , j;
for(i=0;i<satir;++i){
  for(j=0;j<sutun;++j)
    printf("%.1f ",dizi[i][j]);
   
    printf("\n");
  }
}

double maximum(double dizi[][MAX],int satir,int sutun){
int i , j;
double max=dizi[0][0];
for(i=0;i<satir;i++){
  for(j=0;j<sutun;j++)
   if(max<dizi[i][j])
    max=dizi[i][j];
   
   
  }
return max;
}

double minimum(double dizi[][MAX],int satir,int sutun){
  int i , j;
  double min = dizi[0][0];
 
  for(i = 0 ; i < satir ; ++i)
  {
    for(j = 0; j < sutun ; ++j)
    {
      if(min > dizi[i][j])
      {
        min = dizi[i][j];
      }

    }

  }

  return min;

}






Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 02 Nisan 2015 - 21:38:46

kodu değiştirdim

float'ı kullanmıyorum onun yerine double kullandım ama işinize yarayacaktır.
Sanırım asıl sorunum define kısmında olmuş değil mi?Kodunuzda ek olarak MAX var gayet mantıklı bir şekilde onun dışında değerler dışında bir değişiklik yok.Zaten önceki konumda sizin gayet iyi anlatmış olduğunuz kodları kullanmıştım(kullanmıştım dediğim takılırsam açıp baktım) :)
To follow the path,look to the master,follow the master,walk with the master,see through the master,become the master.

blackwidow

minimum'u bularken gönderdiğin array[][] tanımsız , en azından sütun'u belirtince o kısım düzeldi

scanf de küçük bir hata vardı . & unutmuşsun o gözden kaçabilir.

Bir de minimum bulan fonksiyon sürekli 0 döndürüyordu onda biraz oynadım .

Float yerine double kullanmanı tavsiye ederim kolay gelsin :)

Pozitron

Alıntı yapılan: blackwidow - 02 Nisan 2015 - 23:41:20
minimum'u bularken gönderdiğin array[][] tanımsız , en azından sütun'u belirtince o kısım düzeldi

scanf de küçük bir hata vardı . & unutmuşsun o gözden kaçabilir.

Bir de minimum bulan fonksiyon sürekli 0 döndürüyordu onda biraz oynadım .

Float yerine double kullanmanı tavsiye ederim kolay gelsin :)
Yani dizide satır veya sütunu mutlaka tanımlamaı mıyız?
O küçücük,görünmeyen hatalar sinir bozucu :)
Teşekkür ederim yardımın için :)
To follow the path,look to the master,follow the master,walk with the master,see through the master,become the master.

blackwidow

evet , dediğin gibi bir sıkıntı var ve satır sütunu doldurmalısın.

kolay gelsin :)

Pozitron

To follow the path,look to the master,follow the master,walk with the master,see through the master,become the master.