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

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

Δημοσ.

Καλησπέρα και καλή χρονιά! ´Εχω μια εργασία για τη σχολή και πρέπει να την παραδόσω μέχρι το βράδυ..Είναι μια άσκηση στη C η οποία θέλει να γράψουμε ένα πρόγραμμα το οποίο:

α) θα διαβάζει από το πληκτρολόγιο μια συμβολοσειρά (μαξ 80) και ένα χαρακτήρα.

β) θα υπολογίζει τη συχνότητα εμφάνισης του χαρακτήρα στη συμβολοσειρά και θα το εκτυπώνει.

γ) θα υπολογίζει και θα εκτυπώνει τη συμβολοσειρά ανάστροφα (π.χ. αν η συμβ. είναι τραπέζι θα την εκτυπώνει: ιζέπαρτ). Η αναστροφή της συμβολοσειράς θα γίνει με μια συνάρτηση που θα δέχεται την αρχική συμβολοσειρά και θα επιστρέφει την ανάστροφη με τη βοήθεια των δεικτών. Μέσα στη συνάρτηση η διαδικασία αναστροφής της συμβολοσειράς μπορείνα γίνει με οποιαδήποτε μέθοδο. Πριν από την εκτύπωση της ανάστροφης συμβολοσειράς θα εκτυπώνεται κ η αρχική. Οι εκτυπώσεις θα γίνουν στο κυρίως πρόγραμμα.

 

Το πρόβλημά μου είναι ότι α)δεν ξέρω αν όντως έχω κανει σωστά το πρόγραμμα (για το ερώτημα γ) και β) ότι όταν το τρέχω στο τέλος, όταν είναι να εκτυπώσει την ανεστραμμένη συμβολοσειρά μου βγάζει σφάλμα κατάτμησης. Παρακάτω σας παραθέτω τον κώδικα. Ευχαριστώ εκ των προτέρων!

 

#include <stdio.h>
#include <string.h>
char reverse (char b )
{
  char *ptr, *first;
  ptr=b;
  first=ptr;
  while (*ptr!='\0')
  {
    ptr++;
  }
  ptr--;
  while (ptr>=first)
  {
    b=*ptr;
    ptr--;
  }
   return (b ) ;
 
}

int main ()
{
char s[80], a, k;
int times=0, i;
printf (" Δώσε συμβολοσειρά. \n");
gets (s);
printf (" Δώσε γράμμα. \n");
scanf ("%c", &a);
for (i=0;i<=80;i++)
{
  if (s==a)
   
    times++;
}  
if (times==1)
 
  printf ("Το γράμμα %c εμφανίζεται %d φορά. \n",a,times);
else
  printf ("Το γράμμα %c εμφανίζεται %d φορές. \n",a,times);
printf ("Η αρχική συμβολοσειρά είναι %s. \n",s);
k=reverse(s);
printf ("Η ανεστραμμένη συμβολοσειρά είναι %s. \n",k);
}

 

 

P.S. (άνοιξα θέμα και στην κατηγορία Linux. Δεν ξέρω που είναι το κατάλληλο μέρος. Αν πρέπει σβήστε κάποιο. Ευχαριστώ!)

  • Απαντ. 40
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

  • Moderators
Δημοσ.

Κατ' αρχάς αυτό

for (i = 0; i <= 80; i++)
{
    if (s[i] == a)
        times++;
}

είναι λάθος. Διατρέχεις 80 θέσεις στον πίνακα χωρίς να ξέρεις πόσο μεγάλη είναι η λέξη σου. Αυτό που θα έπρεπε να κάνεις είναι να δεις πόσο μεγάλο είναι το s και να διατρέξεις τόσες ακριβώς φορές το s:

 

int length = strlen(s);
for (i = 0; i < length; i++)
    if (s[i] == a)
        times++

 

Δεύτερον, στη συνάρτησή σου θες να αντιστρέφεις έναν πίνακα από chars αλλά επιστρέφεις char. Αν δε θες να αλλάξεις το αρχικό string, μπορείς να ξεκινήσεις από την τελευταία θέση του αρχικού string και πηγαίνοντας προς τα πίσω να φτιάξεις ένα καινούριο string, το οποίο και θα επιστρέψεις. Εδώ χρειάζεται να σκεφτείς λίγο πώς ακριβώς θα προσπελάσεις το αρχικό string και τι θα επιστρέψεις.

 

Δημοσ.

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

Όσο για το άλλο που λες..μπορείς να το εξηγήσεις λίγο? γιατί κ εγώ τώρα τα μαθαίνω και δεν τα ξέρω πολύ καλά! Βάζω στη συνάρτηση όλο τον πίνακα της συμβολοσειράς και θέλω να μου γυρίσει πίσω ο ίδιος αλλά ανεστραμμένος. Με δυσκολεύουν οι pointers αρα παιδεύομαι να κάνω όλα αυτά που λες..:P ο κώδικας που έχω γράψει (τον οποίο τον βρήκα από μια παρόμοια άσκηση στο βιβλίο) είναι λάθος? Αυτό που καταλαβαίνω εγώ ότι κάνει είναι ότι βάζει τον pointer στο τελευταίο γράμμα της συμβολοσειράς και μετά πάει ανάποδα και γράφει κάθε χαρακτήρα που συναντάει στη συμβολοσειρά b που έχω βάλει.

Δημοσ.

Κατ' αρχάς αυτό

for (i = 0; i <= 80; i++)
{
    if (s[i] == a)
        times++;
}

είναι λάθος. Διατρέχεις 80 θέσεις στον πίνακα χωρίς να ξέρεις πόσο μεγάλη είναι η λέξη σου. Αυτό που θα έπρεπε να κάνεις είναι να δεις πόσο μεγάλο είναι το s και να διατρέξεις τόσες ακριβώς φορές το s:

int length = strlen(s);
for (i = 0; i < length; i++)
    if (s[i] == a)
        times++

Ακόμη καλύτερα (γιατί τα strings στη C είναι nul terminated), χωρίς κλήση strlen():

for (i = 0; s[i] != '\0'; i++) {
    if (s[i] == a) {
        times++;
    }
}

 

 

Και ιδανικά:

for (i = 0; s[i]; i++) {
    times += (s[i] == a);
}

 

 

 

BTW, υπήρξε κι άλλος με την ίδια άσκηση με σένα. Απλά προσπάθησε να μην τον κάψεις.

Θα βρεις απαντήσεις σε αυτά που ζητάς σε αυτό το thread.

 

EDIT: Επίσης παρατήρησα κάποιες κακές πρακτικές που εφάρμοζε και το άλλο μέλος.

          Λογικά οι διδάσκοντες σας τις μεταλαμπαδεύουν, διαφορετικά δεν εξηγείται.

          Προσπάθησε να δώσεις σημασία σε αυτά που γράφω, ώστε να μην μετανιώνεις

          αργότερα.

Δημοσ.

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

 

Βαθύς αναστεναγμός.

 

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

 

Σοβαρά τώρα, πες ότι κάποιος σε βοήθησε και σου μίλησε για τη strlen και συ την έμαθες και ξέρεις πλέον πώς να τη χρησιμοποιείς (όχι ας πούμε σου το έγραψε και το έκανες paste). Αν κάποιος καθηγητής έχει πρόβλημα μ' αυτό, να αλλάξει επάγγελμα για το καλό των φοιτητών του.

  • Like 3
Δημοσ.

Βαθύς αναστεναγμός.

 

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

 

Σοβαρά τώρα, πες ότι κάποιος σε βοήθησε και σου μίλησε για τη strlen και συ την έμαθες και ξέρεις πλέον πώς να τη χρησιμοποιείς (όχι ας πούμε σου το έγραψε και το έκανες paste). Αν κάποιος καθηγητής έχει πρόβλημα μ' αυτό, να αλλάξει επάγγελμα για το καλό των φοιτητών του.

Και το χειρότερο είναι ότι τους έμαθαν το gets.

Δημοσ.

Και το χειρότερο είναι ότι τους έμαθαν το gets.

Η gets είναι απλή στη χρήση και δεν μπερδεύει τον μαθητή οπότε είναι η καταλληλότερη σε εκπαιδευτικό επίπεδο.

 

Για να μην παρεξηγηθώ τα λόγια είναι καθηγητή πανεπιστημίου και όχι δικά μου :P

 

Μου τη δίνουν τέτοια επιχειρήματα γιατί 80% σημαίνουν "έλα τώρα, σιγά μη κάτσω να φάω το χρόνο μου να δείξω την σωστή μέθοδο" και 20% "δεν ξέρω κάποιο άλλο τρόπο να τους διδάξω πέρα από την gets". Από την άλλη όμως, όταν ο εναλλακτικός τρόπος για την gets είναι ο παρακάτω (πήρα την υλοποίηση του migf1 εδώ στο forum αλλά σκέψου όποια άλλη παρόμοια θέλεις), πώς να διδάξεις αυτό το πράγμα ?

/* διάβασμα γραμμής εισόδου & διαχείριση υπερχείλισης */
	fgets( input, BUFSIZ, stdin );
	if ( NULL == strchr(input, '\n') ) {
		input[ strlen(input) - 1 ] = '\n';
		while ( '\n' != getchar() ) {
			;/* void */
		}
		fprintf(
			stderr,
			"*** sfalma: yperxeilish eisodoy (megisto orio: %d xarakthres)\n\n",
			BUFSIZ-2
			);
		continue;
	}
Δημοσ.

Θυμάμαι στο πρώτο έτος, όπου μαθαίναμε Προγραμματισμό 1 με C,

ο διδάσκων μας τόνισε από την αρχή για τα buffer overflows. Δε μας

έδειξε την fgets, αλλά για input μας έδειξε την scanf με επιπτώσεις

στη βαθμολογία για όποιον δεν έθετε περιορισμό εισαγωγής χαρακ-

τήρων όταν διαβάζουμε string (scanf("%10s", str)). Βέβαια έπρεπε

να διαβάζουμε ολόκληρες γραμμές από strings με while και scanf,

αλλά τί να κάνουμε. Τέτοιες γλώσσες έχουν τους περιορισμούς τους

και πρέπει κανείς να βρει την κατάλληλη ισορροπία. Τα best practices

πιστεύω είναι προτιμώτερα.

Δημοσ.

πώς να διδάξεις αυτό το πράγμα ?

 

 

 

Να μη το διδάξεις με C, αλλά ας μη ξανακάνουμε αυτή την κουβέντα.  :P

 

 

Δημοσ.

Η gets είναι απλή στη χρήση και δεν μπερδεύει τον μαθητή οπότε είναι η καταλληλότερη σε εκπαιδευτικό επίπεδο.

 

Για να μην παρεξηγηθώ τα λόγια είναι καθηγητή πανεπιστημίου και όχι δικά μου :P

 

Μου τη δίνουν τέτοια επιχειρήματα γιατί 80% σημαίνουν "έλα τώρα, σιγά μη κάτσω να φάω το χρόνο μου να δείξω την σωστή μέθοδο" και 20% "δεν ξέρω κάποιο άλλο τρόπο να τους διδάξω πέρα από την gets". Από την άλλη όμως, όταν ο εναλλακτικός τρόπος για την gets είναι ο παρακάτω (πήρα την υλοποίηση του migf1 εδώ στο forum αλλά σκέψου όποια άλλη παρόμοια θέλεις), πώς να διδάξεις αυτό το πράγμα ?

/* διάβασμα γραμμής εισόδου & διαχείριση υπερχείλισης */
	fgets( input, BUFSIZ, stdin );
	if ( NULL == strchr(input, '\n') ) {
		input[ strlen(input) - 1 ] = '\n';
		while ( '\n' != getchar() ) {
			;/* void */
		}
		fprintf(
			stderr,
			"*** sfalma: yperxeilish eisodoy (megisto orio: %d xarakthres)\n\n",
			BUFSIZ-2
			);
		continue;
	}

 

Για να μιμηθείς την λειτουργικότητα της gets() με χρήση της fgets() για μεγαλύτερη ασφάλεια, δεν χρειάζεται η fprintf() και δεν χρειάζεται να διατηρήσεις το '\n' (το κόβεις πάντα), όπως δεν χρειάζεται να μετατρέψεις σε '\n' τον τελευταίο χαρακτήρα σε περίπτωση υπερχείλισης:

fgets( input, MAX_INPUT, stdin );
char *cp = strchr(input, '\n');
if ( cp ) {
  *cp = '\0';
}
else { /* flush extra input (if present) */
  while ( '\n' != getchar() ) {
    ; /* void */
  }
}
Προσωπικά δεν το βρίσκω καθόλου τραγικό να εξηγείς και να δείχνεις σε έναν επίδοξο προγραμματιστή το πώς και γιατί λειτουργούν τα πράγματα (στην προκειμένη το διάβασμα εισόδου), αντί να τον βομβαρδίζεις με black-boxes και να του λες (υποθέτω) μην ασχολείσαι με πως & γιατί λειτουργεί αυτό από κάτω... τα από κάτω θα τα βρεις έτοιμα. Έτοιμα άραγε από ποιους; Από οικοδόμους ας πούμε; Προφανώς όχι, από προγραμματιστές είναι φτιαγμένα και τα "από κάτω".

 

Εν πάσει περιπτώσει, από τη στιγμή που διδάσκεις/μαθαίνεις προγραμματισμό οφείλεις να μπεις ΚΑΙ σε λεπτομέρειες, είτε σου αρέσει είτε όχι (και εννοώ είτε ως δάσκαλος, είτε ως μαθητής). Ειδικά όταν είσαι μαθητής που ξεκινάει, το υγιές & φρόνιμο για μένα είναι να αναπτύξεις από νωρίς μενταλιτέ έρευνας και λεπτομέρειας, αντί για copy & paste. Το ποιο από τα 2 θα χρησιμοποιήσεις, το πότε θα το χρησιμοποιήσεις, και γιατί θα το προτιμήσεις έναντι του άλλου, προϋποθέτει να είσαι εξοικειωμένος ΚΑΙ με τα δυο.

 

Παρεμπιπτόντως, το να διαβάσεις ένα string σε C με ασφάλεια, προσπαθώντας να μιμηθείς την gets() ΚΑΙ να κάνεις και flush τυχόν περιττούς χαρακτήρες στην είσοδο (υπερχείλιση) δεν χρειάζεσαι καν τις fgets(), strlen(), strchr(). Μια getchar() χρειάζεσαι και το βγάζεις και σε λιγότερες γραμμές κώδικα:

 

int c;
char input[BUFSIZ] = {'\0'};
for (int i=0; '\n' != (c=getchar() && i < BUFSIZ-1; i++) {
  input[i] = c;
}
if ( '\n' != c ) { /* flush extra input (if present) */
  while ( '\n' != getchar() ) {
    ; /* void */
  }
}
Μόλις μάθεις συναρτήσεις, το μετατρέπεις σε συνάρτηση my_gets() και τελειώνει το "παραμύθι".

 

Από την άλλη, όποιος επιμένει στα black-boxes ως μόνη σωστή εκπαιδευτική μέθοδο, υπάρχει και η getline() σε όλα τα ports του gcc (και υπάρχουν κι αντίστοιχες συναρτήσεις σε άλλους compilers).

 

Τέλος, αν ο σκοπός του καθηγητή είναι να τους δείξει με αυτή την άσκηση μια απλούστατη μορφή των "από κάτω", τότε κατά τη γνώμη μου πολύ καλά κάνει που τους βάζει την άσκηση πριν τους μιλήσει για την strlen() (θεωρώ δεδομένο πως τους έχει ήδη μάθει τι εστί c-string).

Δημοσ.

Προσωπικά δεν το βρίσκω καθόλου τραγικό να εξηγείς και να δείχνεις σε έναν επίδοξο προγραμματιστή το πώς και γιατί λειτουργούν τα πράγματα (στην προκειμένη το διάβασμα εισόδου), αντί να τον βομβαρδίζεις με black-boxes και να του λες (υποθέτω) μην ασχολείσαι με πως & γιατί λειτουργεί αυτό από κάτω... τα από κάτω θα τα βρεις έτοιμα. Έτοιμα άραγε από ποιους; Από οικοδόμους ας πούμε; Προφανώς όχι, από προγραμματιστές είναι φτιαγμένα και τα "από κάτω".

Ναι όμως πρέπει να ξεκινήσεις από πρόσθεση για να πας στα ολοκληρώματα. Δεν γίνεται να πας κατευθείαν στα ολοκληρώματα. Εδώ με τα "black-boxes" και πολύς κόσμος έχει 1000 προβλήματα στην κατανόηση της C. Στην εκμάθηση χρειάζονται και κάποια black-boxes. Στην python η "std lib" (αν μπορώ να την πω έτσι) σου επιτρέπει να κατεβάσεις ένα html αρχείο με μία εντολή χωρίς να ξέρεις sockets και θεωρούμε black box το να δέχεσαι ένα string ?

 

Εν πάσει περιπτώσει, από τη στιγμή που διδάσκεις/μαθαίνεις προγραμματισμό οφείλεις να μπεις ΚΑΙ σε λεπτομέρειες, είτε σου αρέσει είτε όχι (και εννοώ είτε ως δάσκαλος, είτε ως μαθητής). Ειδικά όταν είσαι μαθητής που ξεκινάει, το υγιές & φρόνιμο για μένα είναι να αναπτύξεις από νωρίς μενταλιτέ έρευνας και λεπτομέρειας, αντί για copy & paste. Το ποιο από τα 2 θα χρησιμοποιήσεις, το πότε θα το χρησιμοποιήσεις, και γιατί θα το προτιμήσεις έναντι του άλλου, προϋποθέτει να είσαι εξοικειωμένος ΚΑΙ με τα δυο.

Ναι όμως οι λεπτομέρειες πρέπει να έρθουν αφού κατανοήσει ο μαθητής τα βασικά. Αν τον ξεκινήσεις κατευθείαν από τα λεπτομερή, τότε ναι μεν θα "αναπτύξει από νωρίς μενταλιτέ" σωστή αλλά θα χαθεί και θα παρατήσει εντελώς το αντικείμενο. Αν πάλι τον ξεκινήσεις με gets ώστε μετά από κάποιο επίπεδο να του μάθεις τον σωστό τρόπο, τότε θα συνηθίσει και θα χρησιμοποιεί την gets. Οπότε ερχόμαστε σε αυτό που λέει ο defacer (αν κατάλαβα σωστά τι εννοεί και δεν του βάζω λόγια στο στόμα) ότι δεν πρέπει να διδαχθεί C, τουλάχιστον όχι σαν πρώτη γλώσσα.

 

Παρεμπιπτόντως, το να διαβάσεις ένα string σε C με ασφάλεια, προσπαθώντας να μιμηθείς την gets() ΚΑΙ να κάνεις και flush τυχόν περιττούς χαρακτήρες στην είσοδο (υπερχείλιση) δεν χρειάζεσαι καν τις fgets(), strlen(), strchr(). Μια getchar() χρειάζεσαι και το βγάζεις και σε λιγότερες γραμμές κώδικα:

 

int c;
char input[BUFSIZ] = {'\0'};
for (int i=0; '\n' != (c=getchar() && i < BUFSIZ-1; i++) {
  input[i] = c;
}
if ( '\n' != c ) { /* flush extra input (if present) */
  while ( '\n' != getchar() ) {
    ; /* void */
  }
}
Μόλις μάθεις συναρτήσεις, το μετατρέπεις σε συνάρτηση my_gets() και τελειώνει το "παραμύθι".

 

Ναι ρε συ συμφωνώ αλλά σκέψου ότι είσαι αρχάριος και δεν έχεις ξανά γράψει ποτέ κώδικα και σύγκρινε το παραπάνω με το "gets(input)" και πες μου αν είναι το ίδιο κατανοητά.

 

Τέλος πάντων, κακώς μπήκαμε σε αυτό το θέμα γιατί είναι άσχετο με το νήμα και σηκώνει πολύ συζήτηση.

Δημοσ.

...

Στην python η "std lib" (αν μπορώ να την πω έτσι) σου επιτρέπει να κατεβάσεις ένα html αρχείο με μία εντολή χωρίς να ξέρεις sockets και θεωρούμε black box το να δέχεσαι ένα string ?

 

Ναι όμως οι λεπτομέρειες πρέπει να έρθουν αφού κατανοήσει ο μαθητής τα βασικά. Αν τον ξεκινήσεις κατευθείαν από τα λεπτομερή, τότε ναι μεν θα "αναπτύξει από νωρίς μενταλιτέ" σωστή αλλά θα χαθεί και θα παρατήσει εντελώς το αντικείμενο. Αν πάλι τον ξεκινήσεις με gets ώστε μετά από κάποιο επίπεδο να του μάθεις τον σωστό τρόπο, τότε θα συνηθίσει και θα χρησιμοποιεί την gets. Οπότε ερχόμαστε σε αυτό που λέει ο defacer (αν κατάλαβα σωστά τι εννοεί και δεν του βάζω λόγια στο στόμα) ότι δεν πρέπει να διδαχθεί C, τουλάχιστον όχι σαν πρώτη γλώσσα.

Θα σου κάνω μια (ρητορική ελπίζω) ερώτηση. Αν στόχος του είναι να ασχοληθεί ας πούμε με systems programming, θεωρείς πως θα βοηθηθεί καλύτερα αν ξεκινήσει να μαθαίνει προγραμματισμό με python ή με C ως 1η γλώσσα;

 

Όπως έχω γράψει πολλές φορές, ο προγραμματισμός έχει τεράστιο εύρος και δεν χωράνε δογματισμοί.

 

Χοντρικά λοιπόν, ένα εκπαιδευτικό ίδρυμα "οφείλει" να καλύψει τα βασικά σε όσο το δυνατόν περισσότερους αντιπροσωπευτικούς τομείς μπορεί μέσα σε αυτό το τεράστιο εύρος. Και ιδανικά να ανοίξει το μυαλό των μαθητών του και για τους υπόλοιπους (το "μενταλιτέ" δηλαδή).

 

Σε άλλους τομείς είναι προτιμότερο να ξεκινήσουν με black-boxes, σε άλλους με λεπτομέρειες, στο τέλος όμως (είτε εντός είτε εκτός εκπαιδευτικού ιδρύματος) θα τους χρειαστούν αργά ή γρήγορα ΚΑΙ τα δυο (ενδεχομένως και πολλά περισσότερα).

 

Προσωπικά θεωρώ παντελώς ασήμαντο το αν η 1η γλώσσα που θα μάθει κάποιος που ξεκινάει είναι η C ή η python (ή οποιαδήποτε άλλη από τις εκάστοτε δημοφιλείς). Αυτό που θεωρώ πολύ σημαντικό είναι να μάθει από πολύ νωρίς τι εστί programming-paradigm και να διδαχθεί τουλάχιστον μια αντιπροσωπευτική γλώσσα από τα δημοφιλή paradigms (για μένα procedural, oop & functional... τα έχω γράψει και στο άλλο νήμα, οπότε σταματάω εδώ).

 

Κοντολογίς, είτε C διδαχθεί πρώτα και μετά java, είτε java πρώτα και μετά C, ελάχιστη σημασία έχει αρκεί να διδαχθεί ΚΑΙ τις 2 (και πάει λέγοντας).

 

Ναι ρε συ συμφωνώ αλλά σκέψου ότι είσαι αρχάριος και δεν έχεις ξανά γράψει ποτέ κώδικα και σύγκρινε το παραπάνω με το "gets(input)" και πες μου αν είναι το ίδιο κατανοητά.

 

Τέλος πάντων, κακώς μπήκαμε σε αυτό το θέμα γιατί είναι άσχετο με το νήμα και σηκώνει πολύ συζήτηση.

Με σωστή σειρά καθοδήγησης/εκμάθησης (και σοβαρή προσέγγιση) ΟΛΑ γίνονται κατανοητά.

 

Για μένα και αυτό το θέμα έχει τη δυναμική να φανεί χρήσιμο σε όσους ξεκινάνε, οπότε δεν συμμερίζομαι την άποψή σου πως κακώς το ανοίξαμε ;)

  • Moderators
Δημοσ.

Αν και δε διαφωνώ γενικά με όσα λες, συνήθως η C δε διδάσκεται με τον τρόπο τον οποίο εννοείς. Εμείς, πχ, την έχουμε ως πρώτη γλώσσα προγραμματισμού και μαθαίνουμε γενικές αρχές προγραμματισμού (αρχεία, πίνακες, συναρτήσεις, πράξεις κλπ). Τη χρησιμοποιούμε και σε μεγαλύτερα εξάμηνα για pipes/sockets/forks/threads/MPI κλπ αλλά αυτό που θέλω να πω είναι ότι συνήθως η C χρησιμοποιείται για τη διδασκαλία πραγμάτων που δε θα έπρεπε να διδάσκονται με C. Αυτό που σε νοιάζει στο πρώτο εξάμηνο είναι να διαβάσεις ένα string ή ένα integer για να κάνεις μερικά απλά πράγματα. Όχι να κάθεσαι να ψάχνεις γιατί η scanf δε σου δουλεύει. Δεν είναι λογικό να περιμένεις από κάποιον (ή έστω την πλειοψηφία) να καταλάβει τις ιδιοτροπίες της C στο 1ο εξάμηνο, όταν το πρώτο μάθημα αρχιτεκτονικής είναι στο 3ο. Αν μου πεις ότι σε μια σχολή κάνουν από το πρώτο εξάμηνο αρχιτεκτονικές και λοιπά hardware-ίστικα μαθήματα τότε ναι, δώσε C και δώσε πόνο. Αλλά διαφωνώ κάθετα με τη χρήση της C ως γλώσσα εκμάθησης αλγοριθμικής σκέψης.

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα

  • Δημιουργία νέου...