Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα :)

Φτιάχνω ένα πρόγραμμα για μια εργασία και έχω κολλήσει σε κάτι λάθη που μου βγάζει ο compiler :\

 

Το πρόγραμμα είναι:

 

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

char pinakasx[3][3],choice ;
int pinakasa[3][3],i,j;
int calc_freq(char pinakas[3][3], char my_choice), apot, ak;
int my_conv(char ch);
int pinakasconv[3][3];
int metr=0;

int main()
{    /* arxikopoihsh pinaka*/
     srand ((int)time(NULL));
    
      for(i=0;i<3;i++)
        {for(j=0;j<3;j++)
          {pinakasa[i][j] = rand()/RAND_MAX ;}
     
  /*o xarakthras pou 8a brw*/
     printf("plhktrologise enan xarakthra");
     scanf("%c",& choice);
   
    /*ektupwsh tou pinaka twn xarakthrwn*/
     for(i=0;i<3;i++)
     {for(j=0;j<3;j++)
         {printf("%c", pinakasx[i][j]);}}
     
     /*ektupwsh tou xarakthra k poses fores bre8hke apo thn sunarthsh*/
     apot = calc_freq(pinakasx,choice);
     printf("%c","character",choice);
     printf("%d","located",apot,"times");
     for(i=0;i<3;i++)
     {for(j=0;j<3;j++)
         {printf("%d",pinakasa[i][j]); }}
         
          /*gurnane oi akeraioi gia na ftia3w ton pinaka*/
          for(i=0;i<3;i++)
           {for(j=0;j<3;j++)
             {pinakasconv[i][j] =  my_conv(pinakasx[i][j]); }}
  return 0;}
  
  
[b]/*prwth sunarthsh*/[/b]
int calc_freq (char pinakas[3][3], char my_choice)
{int i; j;  ([u][b]46)[/b][/u]
for(i=0;i<3;i++)
     {for(j=0;j<3;j++)
       {if (pinakasx[i][j]== my_choice)
         {metr=metr+1;}}}
return metr;}

[b]/*deuterh sunarthsh*/[/b]
int my_conv(char ch)
{int ak;
   ak= 'ch';
   return ak;} [b][u](57)[/u][/b]

 

Το πρόβλημα είναι στην πρώτη και στην δεύτερη συνάρτηση που μου βγάζει

46 a function-definition is not allowed here before '{' token

46 expected `,' or `;' before '{' token

57 expected declaration before '}' token

 

ευχαριστώ εκ τον προτέρων :)

Δημοσ.

Επίσης, θα σου πρότεινα στις εμφωλεύσεις να αφήνεις τις αγκύλες μόνες τους στη γραμμή και τον υπόλοιπο κώδικα από κάτω. Έτσι δεν θα ξεχνάς να τις κλείνεις, π.χ. :

 

>
      for(i=0;i<3;i++)
        {
        for(j=0;j<3;j++)
          {
          pinakasa[i][j] = rand()/RAND_MAX;
          }
        }

Δημοσ.

'Η και ακόμα καλύτερα, αν χρησιμοποιείς IDE της προκοπής όπως το Netbeans που έχουν λειτουργία για code formatting, πάτα ένα Alt-Shift-F και θα σου "σιδερώσει" το κώδικα αυτόματα.

Θα νοιώσεις άρχοντας μετά :).

Δημοσ.

^ Όντως, ακόμα καλύτερο αυτό, αλλά επειδή νομίζω ότι πρόκειται για άσκηση σε κάποια σχολή, όταν έρθει η ώρα να τα γράψει σε χαρτί τι γίνεται; :P

Δημοσ.

κοίτα τι σου κάνει μια αγκύλη..

διόρθωσα το τμήμα του κώδικα αλλά μου τρέχει μέχρι εκεί που πληκτρολογώ τα στοιχεία του πίνακα...

καμιά ιδέα?

 

 

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

char pinakasx[3][3],choice ;
int pinakasa[3][3],i,j;
int calc_freq(char pinakas[3][3], char my_choice), apot, ak;
int my_conv(char ch);
int pinakasconv[3][3];
int metr=0;

int main()
{    /* arxikopoihsh pinaka*/
     printf("plhktrologise ta stoixeiea tou pinaka");
      for(i=0;i<3;i++)
        {for(j=0;j<3;j++)
          {scanf("%c\n", &pinakasx[i][j]) ;}}
     
  /*o xarakthras pou 8a brw*/
     printf("plhktrologise enan xarakthra");
     scanf("%c",& choice);

     
     /*ektupwsh tou xarakthra k poses fores bre8hke apo thn sunarthsh*/
     apot = calc_freq(pinakasx,choice);
     printf("%c\n","character",choice);
     printf("%d\n","located",apot,"times");
     for(i=0;i<3;i++)
     {for(j=0;j<3;j++)
         {printf("%d",pinakasa[i][j]); }}
         
         /*ektupwsh tou pinaka twn xarakthrwn*/
     for(i=0;i<3;i++)
     {for(j=0;j<3;j++)
         {printf("%c\n", pinakasx[i][j]);}}
         
          /*gurnane oi akeraioi gia na ftia3w ton pinaka*/
          for(i=0;i<3;i++)
           {for(j=0;j<3;j++)
             {pinakasconv[i][j] =  my_conv(pinakasx[i][j]); }}
  return 0;}
  
  
/*prwth sunarthsh*/
int calc_freq (char pinakas[3][3], char my_choice)
{int i; j;
for(i=0;i<3;i++)
     {for(j=0;j<3;j++)
       {if (pinakasx[i][j]== my_choice)
         {metr=metr+1;}}}
return metr;}

/*deuterh sunarthsh*/
int my_conv(char ch)
{int ak;
   ak= 'ch';
   return ak;}





Δημοσ.

Ναι είναι εργασία για κάποια σχολή απλά μετράω πόσες ανοίγω και πόσες κλείνω..ο αριθμός πρέπει να είναι προφανώς ο ίδιος..

 

παρ'όλα αυτά μάλλον πάλι θα την παραδώσω χωρίς να τρέχει...δεν ξέρω τι έχει :\

διόρθωσα το λάθος με choice αλλά από κει και πέρα..

Δημοσ.

Τι εννοεις σου τρεχει μεχρι εκει που πληκτρολογεις τα στοιχεια?

 

παιζει να σου εμφανιζει το αποτελεσμα δηλαδη αλλα να κλεινει χωρις να προλαβαινεις

 

να το δεις ?

Δημοσ.

Αρχικά ο χρήστης πληκτρολογεί τα στοιχεία του πίνακα..μετά πρέπει να πληκτρολογήσει και την επιλογή ενός στοιχείου αλλά δεν φτάνει μέχρι εκεί κλείνει..

Δημοσ.

Αρχικά ο χρήστης πληκτρολογεί τα στοιχεία του πίνακα..μετά πρέπει να πληκτρολογήσει και την επιλογή ενός στοιχείου αλλά δεν φτάνει μέχρι εκεί κλείνει..

 

 

Το χεις τιγκάρει στις αγκύλες το πρόγραμμα :D

Όταν στο σώμα της for χρησιμοποιείς μονο μια εντολή δεν χρειάζεσαι

αγκύλες.

 

> 
 
 for(i=0; i<1; i++)
 printf("Hello");

 

 

> 

for(i=0; i<1; i++)
for(j=0; j<2; j++)
 printf("Hello");

 

οχι πως ειναι αυτο το προβλημα... αλλα τουλαχιστον θα τον "καθαρισεις " λιγο μπας και δεις

πιο ευκολα αν σε καποιο σημειο υπάρχει σκαλωμα.

Δημοσ.

Το 1ο πράγμα που πρέπει να μάθει κανείς σε οποιαδήποτε γλώσσα προγραμματισμού είναι να γράφει ευανάγνωστο κώδικα. Απορώ πως βγάζεις άκρη κι εσύ ο ίδιος εκεί μέσα! Αυτό δεν είναι C, αυτό είναι ορνιθοσκαλίσματα Κινέζικου νηπίου... χωρίς στοίχιση, χωρίς σχόλια, με ακαταλαβίστικα ονόματα μεταβλητών, με, με, με ...

 

Πέρα από αυτό, ο κώδικάς σου έχει πάρα πολλά λάθη μέσα, τόσο σε επίπεδο δομής όσο και σε επίπεδο διαχείρισης και χρήσης των στάνταρτ χαρακτηριστικών της γλώσσας. Δυο πρόχειρα παραδείγματα είναι όλη η συνάρτηση: my_conv() και το γεγονός πως στη συνάρτηση calc_freq() άλλον πίνακα περνάς σαν όρισμα κι άλλον διαχειρίζεσαι στο σώμα της συνάρτησης.

 

Επίσης, σε γενικές γραμμές οι καθολικές μεταβλητές σχεδόν "απαγορεύονται στη C, κλπ

 

Με τέτοιο στυλ γραφής θα σε πάρει ως και τον 10πλάσιο χρόνο να βρεις που είναι τα προβλήματα. Θα σου γλιτώσω λίγο χρόνο, αραιώνοντας & στοιχίζοντας σωστά τον κώδικά σου, και βάζοντας ονομασίες στους πίνακες που να βοηθούν στον γρήγορο εντοπισμό τους κατά την ανάγνωση του κώδικα.

 

Αλλά η υλοποίηση αυτή, είτε είναι σωστά στοιχισμένη είτε όχι δύσκολα βαθμολογείται πάνω από τη μονάδα!

 

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

/* katholikes metablites ΒΑΛΤΕΣ ΟΛΕΣ ΣΤΗΝ MAIN() & ΑΛΛΑΞΕ ΑΝΛΑΟΓΑ ΤΟΝ ΥΠΟΛΟΙΠΟ ΚΩΔΙΚΑ */
char	xpin[3][3], choice;		/* γραψε τι είναι ο πίνακας xpin[][]	*/
int	apin[3][3], i, j;		/* γραψε τι είναι ο πίνακας apin[][]	*/
int	convpin[3][3];			/* γραψε τι είναι ο πίνακας convpin[][] */
int	metr = 0, apot, ak;		/* γράψε τι είναι αυτες οι μεταβήτές	*/

/* protypa synarthsewn */
int	calc_freq( char pinakas[3][3], char my_choice );
int	my_conv( char ch );

/* ----------------------------------------------------------
*
* ----------------------------------------------------------
*/
int main( void )
{
/* arxikopoihsh pinaka*/
printf( "plhktrologise ta stoixeia tou pinaka\n" );
for (i=0; i < 3; i++)
	for (j=0; j<3; j++)
		scanf( "%c\n", &xpin[i][j] );

/*o xarakthras pou 8a brw */
printf( "plhktrologise enan xarakthra" );
scanf( "%c", &choice );

/*ektupwsh tou xarakthra k poses fores bre8hke apo thn sunarthsh*/

apot = calc_freq(xpin,choice);

printf( "%c\n","character", choice );

printf( "%d\n", "located", apot, "times");
for (i=0; i < 3; i++)
	for (j=0; j < 3; j++)
		printf("%d", apin[i][j] );
 	
 	/*ektupwsh tou pinaka twn xarakthrwn*/
for (i=0; i < 3; i++)
	for(j=0;j<3;j++)
		printf( "%c\n", xpin[i][j] );
 	
/*gurnane oi akeraioi gia na ftia3w ton pinaka*/
for (i=0; i < 3; i++)
	for (j=0; j < 3; j++)
		convpin[i][j] =  my_conv( xpin[i][j] );

return 0;
}
  
  
/* ----------------------------------------------------------
* prwth sunarthsh
* ΑΥΤΟ ΔΕΝ ΛΕΕΙ ΤΙΠΟΤΑ! ΓΡΑΨΕ ΜΕ 2 ΛΟΓΙΑ ΤΙ ΚΑΝΕΙ Η ΣΥΝΑΡΤΗΣΗ & ΤΙ ΕΠΙΣΤΡΕΦΕΙ
* ----------------------------------------------------------
*/
int calc_freq( char pinakas[3][3], char my_choice )
{
int i; j;
for (i=0; i < 3; i++)
	for (j=0; j < 3; j++)
		if (xpin[i][j] == my_choice)
			metr = metr + 1;
return metr;
}

/* ----------------------------------------------------------
* deuterh sunarthsh
* ΑΥΤΟ ΔΕΝ ΛΕΕΙ ΤΙΠΟΤΑ! ΓΡΑΨΕ ΜΕ 2 ΛΟΓΙΑ ΤΙ ΚΑΝΕΙ Η ΣΥΝΑΡΤΗΣΗ & ΤΙ ΕΠΙΣΤΡΕΦΕΙ
* ----------------------------------------------------------
*/
int my_conv( char ch )
{
int ak;
ak = 'ch';

return ak;
}

Δημοσ.

Βασικα ολα αυτα που ειπε ο migf1 :D

 

Για ονομασιες μεταβλητων εγω θα προτεινα επισης καποιος να σκεφτεται

και τα ονοματα στα αγγλικα. Πχ έχεις μια μεταβλητη την οποια εχεις ονομασει

 

apot ναι οκ εγω που ειμαι Ελληνας καταλαβαινω πως αυτο θα σημαινει αποτελεσμα

αλλα αμα χρειαστει να μιλησεις και με ξενους προγραμματιστες τι γινεται? Εξαρχης λοιπον

αντι για apot ονομασε την reslt με ενα /result διπλα ή και χωρις αυτο και εισαι οκ.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...