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

Help!!!gia askhsh...Turbo C


PaniC_GR

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

Δημοσ.

Να φτιάξετε πρόγραμμα που να κάνει τα παρακάτω:

A. Εισάγει σε έναν πίνακα 20 ακεραίους αριθμούς.

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

C. Υπολογίζει το ελάχιστο στοιχείο και σε ποια/ες θέσεις του πίνακα βρίσκεται.

D. Ελέγχει και εμφανίζει κατάλληλο μήνυμα σχετικά με το αν ο πίνακας είναι συμμετρικός ή όχι. Ένας πίνακας είναι συμμετρικός αν το πρώτο στοιχείο του είναι ίσο με τελευταίο, το 2ο ίσο με το προτελευταίο κ.ο.κ.

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

F. Ελέγχει αν ο πίνακας είναι ταξινομημένος ή όχι και εμφανίζει κατάλληλο μήνυμα. (ΠΡΟΣΟΧΗ: Θα πρέπει να ελέγχετε αν είναι ταξινομημένος και κατά φθίνουσα και κατά αύξουσα σειρά προκειμένου να είστε σίγουροι για το συμπέρασμά σας)

G. Ταξινομεί τον πίνακα κατ’ αύξουσα σειρά με τη μέθοδο της επιλογής (selection sort). Η παραπάνω μέθοδος ταξινόμησης δουλεύει ως εξής:

Βρίσκει τη θέση στον πίνακα του ελαχίστου στοιχείου και το αντιμεταθέτει με το στοιχείο που βρίσκεται στην πρώτη θέση του πίνακα. Μετά από αυτό το μικρότερο στοιχείο του πίνακα θα βρίσκεται στην πρώτη θέση του. Η διαδικασία επαναλαμβάνεται για τα υπόλοιπα στοιχεία του πίνακα από το 2ο μέχρι το τελευταίο. Κατόπιν για το 3ο μέχρι το τελευταίο κ.οκ.

Σχηματικά για ένα πίνακα με 5 στοιχεία θα έχω τα παρακάτω βήματα:

 

1ο 2ο 3ο 4ο 5ο

 

 

Αρχικά 10 8 9 5 6 Ενέργεια: Αντιμετάθεση 1ου, 4ου στοιχείου

 

 

Μετά το βήμα 1 5 8 9 10 6 Ενέργεια: Αντιμετάθεση 2ου, 5ου στοιχείου

 

 

Μετά το βήμα 2 5 6 9 10 8 Ενέργεια: Αντιμετάθεση 3ου, 5ου στοιχείου

 

 

Μετά το βήμα 3 5 6 8 10 9 Ενέργεια: Αντιμετάθεση 4ου, 5ου στοιχείου

 

 

Μετά το βήμα 4 5 6 8 9 10

 

Το πλήθος των βημάτων εξαρτάται από το πλήθος των στοιχείων του πίνακα. Αν ο πίνακας έχει Ν στοιχεία τότε απαιτούνται Ν-1 βήματα.

 

 

p.s. ayth einai :( tin proxoraw alla thelei pollu psaximo paides mia help apo kapion pou na xerei kalutera...thx pallh paides :) ;)

Δημοσ.

Τι ακριβώς δεν κατανοείς από την εκφώνηση?Που έχεις κολλήσει?Γιατι δεν νομίζω να περιμένεις μια έτοιμη λύση από κάποιον...

Φιλικά πάντα.

Δημοσ.

ella my man daidalus vasika opws eipa tin exw proxorisei aplos to mperdema einai ligo me tis adimetathesis pou thelei opws mas edwsan mia voitheia o kwdikas mazi me ton array den einai panw apo 7 seires ekei zhtaw kapia help den eipa gia etimh lush...:) pados thx man den trexei tpt...to post to kanw gia kalhterh katanoisi k epipleon help gia emana nomizw pos kalhtera tha katalavw ena atomo tou forum apo ton kathigith mou... ;)

p.s. oi arithmoi einai mesa se pinaka alla den vghke sto post...

Δημοσ.

ok paides loipon opws eipa stis adimetatheseis k tis adistrofes exw to problhma loipon arxizw...

 

#include <stdio.h>

#include <conio.h>

int main (void)

{

int i;

int array[20];

clrscr();

for (i=1;i<=20;i++)

{

printf("dwse arithmo:");

scanf("%d",array[i-1]);

}

for (i=1;i<=20;i++)

{

printf("%d",array[i-1]);

}

return 0;

}

 

loipon k allh mia for gia ti min timh tou pinaka

min=array[20];

.

.

.

for (i=1;i>=20;i--)

{

if (min>array[20])

min=array[20];

}

printf("o min einai : %d",min);

return 0;

}

 

 

paides ta alla erwtimata ligo na koitaxoume me to 2 erwtima pou leei gia 5 se kathe grammh othonis me tin adistrofi pou zhtaei...k ta eipoloipa...:( :( paketo

to erwthma tis simetrikothtas daxei twra gia ta ypoloipa den xerw ti na pw toulaxiston na parw tin mish ti na pw...thx pados paidia...zhataw akoma helpppppp!!!!

Δημοσ.

Για το δεύτερο ερώτημα δήλωσε κατ'αρχήν μια μεταβλητή int k=0; που σκοπός της θα είναι να μετράει πόσα στοιχεία έχεις γραψει ανα γραμμή. Μετά γράψε μια for με αρχική τιμή 19 όπου θα κάνεις τα εξής:σε κάθε loop πρέπει να ελέγχεις αν η τιμή του k είναι μεγαλύτερη από 5 (αν είναι αλλάζεις γραμμή και μηδενίζεις την k) και ταυτόχρονα όταν τυπώνεις το στοιχείο να αυξάνεις την k.Δηλαδη το περιεχόμενο της for θα είναι κάπως έτσι:

{

if (k==5)

{

printf('\n');//αλλαξε γραμμή

k=0;//μηδενισε τον μετρητή τυπωμένων στοιχείων

}

printf("%d ",array);// τυπωσε τον αριθμό

k++; // αύξησε το k

}

 

 

Για το τέταρτο ερώτημα ελέγξε τα στοιχεία ξανά με μια for.Εδώ μπορείς να εκμεταλλευτείς το γεγονός της συμμετρικότητας και να κάνεις τις μισές επαναλήψεις.Δηλαδή θα είναι κάπως έτσι:

 

for(i=0;i<10;i++)

{

if(array!=array[19-i])

return false; //ο πίνακας δεν είναι συμμετρικός

}

return true; //αν τελειωσε η for σημαίνει οτι τα συμμετρικά στοιχεία είναι μεταξύ τους ίσα οποτε εππέστρεψε true

 

Αν έχεις πρόβλημα με τις υπόλοιπες let us know :)

Δημοσ.

daidalus man thx...den mporw na ta dw ayth tin stigmh dioti den eimai sto pc mou...tha ta dw ka tha sas pw ;) :)

 

aplos na se rwtisw an koitaxes to erwthma mou me tin min timh k tin for pou exw an einai swsth giati den tin exw mazi...???pls gia koita...

 

k teleutaia help gia ta 3 telika erwtimata an uparxei tha eimai komle...thx

Δημοσ.

Φίλε PaniC_GR

Πριν απ' όλα μή σε πιάνει Πανικός :-)

Υστερα: Πριν θεωρήσεις ένα κώδικα τελειωμένο, κάνε μια δοκιμή. Οι C-Compilers είναι ό.τι πιό εύκολο να βρεθούν.

Ως προς αυτά που θεωρείς τελειωμένα:

 

(α) Για την εισαγωγή

Το βασικό Πρόβλημα είναι στη scanf. Οι παράμετροι της ρουτίνας αυτής είναι οι Διευθύνσεις Μνήμης των Μεταβλητών που θέλουμε να διαβάσουμε και όχι οι μεταβλητές αυτές καθαυτές όπως π.χ. στην Pascal ή στην Basic.

Για το λόγο αυτό η κλήση

>scanf("%d",array[i-1]);

είναι λάθος, όπως θα δεις τρέχοντας τον κώδικα. Οι τιμές που δίνεις από το πληκτρολόγιο δεν θα καταχωρηθούν στα στοιχεία του Πίνακα array[k] -αυτά θα μείνουν ανέγγιχτα-, αλλά στις διευθύνσεις μνήμης που παριστάνονται από το κάθε array[k].

Η "σωστή" διατύπωση θα ήταν είτε

>scanf("%d",&array[i-1]);
είτε 
scanf("%d",array+(i-1));

Κάποιες δευτερεύουσες παρατηρήσεις:

(1) Απόφυγε τις δηλώσεις του τύπου int array[20]; Είναι καλύτερα να προηγείται μια #define N 20 κι ο Πίνακας να δηλώνεται int array[Ν]; Αυτό βοηθάει στη γενικότητα και επιτρέπει να κάνεις δοκιμές θέτοντας π.χ. το Ν ίσο με 5 αντί να τρέχεις να δίνεις 20 (ή 200) αριθμούς για να ελέγξεις την κάθε αλλαγή.

(2) Μη χρησιμοποιείς το array σαν όνομα μεταβλητής. Το Array είναι προδηλωμένη class σε πολλές υλοποιήσεις και η σύγχιση είναι εύκολη.

(3) Φτιάξε την printf έτσι, που να σε καθοδηγεί πού βρίσκεσαι π.χ. printf("dwse arithmo%4d: ",i);

(4) Δεν θα δούλευα ποτε το συνδυασμό for(i=1;...) με τη χρήση του i-1 για τις αναφορές στα στοιχεία του Πίνακα, θα προτιμούσα το for(i=0;...) με τη χρήση του i, αλλά αυτό μπορεί νάναι και ιδιοτροπία μου.

 

(β) Για την εκτύπωση

Ας τη δούμε σε κανονική σειρά, για να συζητήσουμε την αλλαγή της γραμμής:

Η ρουτίνα που γράφεις είναι γενικά σωστή, μόνο που τα στοιχεία θα κολλήσουν μεταξύ τους κι έτσι είτε μιλάμε για 19 και 3, είτε για 1 και 93, αυτό που θα δούμε είναι κάποιο 193. Σωστά; Πρώτο βήμα, να τα ξεκολλήσουμε ορίζοντας ότι θα τυπώνεται κάθε στοιχείο σε 10 (για παράδειγμα) θέσεις κι αυτό γίνεται με τη χρήση του %10d αντί για το σκέτο %d στην printf.

Για την αλλάγή γραμμής, μπορούμε να ορίσουμε ένα if που θα ελέγχει άν τυπώθηκαν 5 στοιχεία (αν ναί θ' αλλάζει γραμμή). Αν αυτό το υλοποιήσουμε με το γνωστό "πονηρό" if της C, o ο κώδικας γίνεται:

>for (i=0;i<N;i++)
    printf("%10d%c",array[ i ],((i+1)%5?'\0':'\n'));

Στην ουσία αφού τυπώσουμε το -όποιο- στοιχείο του Πίνακα, τυπώνουμε ένα χαρακτήρα που παίρνει τιμή επί τόπου: Αν το υπόλοιπο της διαίρεσης (i+1)/5 είναι διάφορο από 0, "τυπώνουμε" εναν NULL char ('\0'-> αυτόν που έχει ASCII=0), αλλοιώς, αν αυτό το υπόλοιπο είναι 0, αν δλδ. τυπώσαμε 5, 10, 15 ή 20 στοιχεία, τυπώνουμε το γνωστό χαρακτήρα '\n', που σημαίνει αλλαγή γραμμής.

Η αντίστροφη σειρά είναι τώρα πολύ εύκολη, αφου θ' αλλάξει απλά η ροή του for και ο έλεγχος.

 

(γ) Για την μικρότερη τιμή

Πρώτο και βασικό: Μην καταχωρείς τίποτε στη θέση array[20]. Η δήλωση int array[20]; δέσμευσε για το πρόγραμμά σου τις θέσεις από array[0] ως array[19]. Το τί περιεχόμενο έχει (και σε ποιά μεταβλητή ανήκει) η array[20], ένας θεός (και ο Linker) το ξέρει.

Αν σύμφωνα με τις πρακτικές τις Borland εκεί υπάρχει μηδέν, (και οι τιμές του πίνακα είναι θετικές), θα σου εμφανίσει ελάχιστη τιμή το 0 κι ας μην το έχεις καταχωρήσει πουθενά. Το ίδιο θα γινόταν ακόμη κι αν το for και το if ...δούλευαν :-)

Επειδή φίλε, ...δεν δουλεύουν: το πρώτο ξεκινάει με i=1 (που δεν γίνεται ποτέ >=20) και αφού

>min=array[20]
δεν γίνεται ποτέ true αυτό που ελέγχει το 
if (min>array[20])

 

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

Πρόσεξε λίγο αυτό το τελευταίο: Τη θέση του θα την κρατήσουμε (θέλοντας και μη) κι ας είναι t_min. Η Μεταβλητή min είναι άχρηστη, αφού το μικρότερο κάθε φορά θα είναι το στοιχείο a[t_min].

Αφού προσδιορίσουμε την t_min, εκτελούμε άλλο ένα for (από τη θέση t_min+1) για να βρούμε μήπως αυτό το ελάχιστο εμφανίζεται κι άλλες φορές.

 

>#include <stdio.h>
#include <conio.h>
#define N 20
int main (void)
{
  int i,t_min;
  int a[N];
  clrscr();
  for (i=1;i<=N;i++){
    printf("dwse arithmo %2d: ",i);
    scanf("%d",&a[i-1]);
    /*Enallaktika scanf("%d",a+(i-1)); */
  }
  for (i=0;i<N;i++)
    printf("%5d%c",a[i],((i+1)%5?'\0':'\n'));
  printf("\n");
  for (i=N-1;i>=0;i--)
    printf("%5d%c",a[i],(i%5?'\0':'\n'));

  t_min=0;
  for (i=1;i<N;i++)
if (a[i]<a[t_min])
   t_min=i;
  printf("o min einai :%4d, otan i=%4d\n",a[t_min],t_min);
  for (i=t_min+1;i<N;i++)
if (a[i]==a[t_min])
   printf("Epishs otan i=%4d\n",i);
}

Εχω μια επείγουσα συνάντηση μπροστά μου και αφήνω τα υπόλοιπα γι' αργότερα. Ως τότε: Προσπάθησε να καταλάβεις αυτά που γράφω, μην διστάσεις να ζητήσεις εξηγήσεις σε ότι δεν κατάλαβες και ξεκινωντας από τον τρόπο που προσδιορίζουμε τον ελάχιστο, προσπάθησε να υλοποιήσεις τον αλγόριθμο Straight Selection Sort.

Μην σε φοβίζει η αντιμετάθεση: Φτιάξε μια βοηθητική συνάρτηση π.χ. my_swap( ... ) που αντιμεταθέτει δύο οποιεσδήποτε μεταβλητές.

 

ΥΓ: Οση ώρα έγραφα, ο daidalus σου έδωσε κάποιες κατευθύνσεις ακόμη. Ετσι κι αλλιώς, εδώ είμαστε.

Δημοσ.

Για την αλλάγή γραμμής' date=' μπορούμε να ορίσουμε ένα if που θα ελέγχει άν τυπώθηκαν 5 στοιχεία (αν ναί θ' αλλάζει γραμμή). Αν αυτό το υλοποιήσουμε με το γνωστό "πονηρό" if της C, o ο κώδικας γίνεται:

>for (i=0;i<N;i++)
    printf("%10d%c",array[ i ],((i+1)%5?'\0':'\n'));

Στην ουσία αφού τυπώσουμε το -όποιο- στοιχείο του Πίνακα, τυπώνουμε ένα χαρακτήρα που παίρνει τιμή επί τόπου: Αν το υπόλοιπο της διαίρεσης (i+1)/5 είναι διάφορο από 0, "τυπώνουμε" εναν NULL char ('\0'-> αυτόν που έχει ASCII=0), αλλοιώς, αν αυτό το υπόλοιπο είναι 0, αν δλδ. τυπώσαμε 5, 10, 15 ή 20 στοιχεία, τυπώνουμε το γνωστό χαρακτήρα '\n', που σημαίνει αλλαγή γραμμής.

Η αντίστροφη σειρά είναι τώρα πολύ εύκολη, αφου θ' αλλάξει απλά η ροή του for και ο έλεγχος.

[/quote']

Έγραψες!!!Αυτή η λύση μου αρέσει πολύ! :)

 

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

Μετά σε μια for απλά συγκρινε τον αριθμό με τα στοιχεία του πίνακα.Κάθε φορά που το βρήκες ιδιο αύξησε την μεταβλητή count κατά ένα.Στο τέλος της for αν το count έχει τιμή 0 τότε δεν υπάρχει αυτή η τιμή στον πίνακα, αλλιώς ο αριθμός αυτός θα περιέχει πόσες φορές περιέχεται η συγκεκριμένη τιμή στον πίνακα.Κάπως έτσι δηλαδή...

 

for(i=0;i<20;i++){

if(array==timh_pou_evale_o_xrhsths)

count++

}

if(count==0)

//βγαλε μηνυμα οτι η τιμη δεν υπάρχει στον πινακα

else

//βγαλε μηνυμα οτι η τιμή υπάρχει count φορες

Δημοσ.

@ daidalus: Σ' ευχαριστώ για τα καλά λόγια. Ο τρόπος αυτός έχει να κάνει με κάποιες εμμονές που μου δημιουργήθηκαν από την εποχή της ALGOL: Εχοντας κάψει τη γούνα μου με κάτι δαιδαλώδη GOTO της FORTRAN και της COBOL (αυτά διάβαζα, αυτά έγραφα), μόλις ασχολήθηκα με την ALGOL (κι αργότερα την Pascal) εξελίχτηκα σε ... Μουζαχεντίν του structured programming σε τέτοιο βαθμό, που θεωρούσα απαράδεκτο ένα υποπρόγραμμα να ξεπερνά τη ΜΙΑ οθόνη. Η C λίγο μετά, προσφερόταν για Στενογραφία κι έτσι έγραφα κάτι συμπυκνωμένες εκφράσεις σαν αυτή, αλλά και κάτι απίθανα συμπλέγματα παρενθέσεων και τελεστών που λίγες εβδομάδες μετά, δεν μπορούσα -ούτε ο ίδιος- να καταλάβω τί έκαναν :-)

 

@ PaniC_GR: Ο daidalus σου έδωσε ήδη δυό πολύ καλές ιδέες για τα ερωτήματα D και E.

Πάμε να δούμε λίγο το F: Αν γράψουμε ένα for σαν το παρακάτω

>for(i=0;(p[ i ]<=p[i+1])&&(i<N-1);i++);

αυτό δεν θα κάνει τίποτε άλλο από το αν αυξήσει το i μέχρι να συναντήσει ένα στοιχείο που να προηγείται από κάποιο μικρότερο. Αν ο Πίνακας είναι ταξινομημένος κατ' αύξουσα σειρά, δεν θα βρεί κανένα τέτοιο στοιχείο και το loop θα ολοκληρώθεί χάρη στον δεύτερο έλεγχο με το i να γίνεται ίσο με (N-1). Ενα πανομοιότυπο for θα ελέγξει τον πίνακα για φθίνουσα ταξινόμηση, μόνο που τώρα το for θα διακόπτεται "πρόωρα" αν για κάποιο ζευγάρι δεν ισχύει (p[ i ]>=p[i+1]). Αν και τα δυό for ολοκληρωθούν με το i να είναι ίσο με N-1, τότε, προφανώς όλα τα στοιχεία είναι ίσα.

 

Ξεκινάμε λοιπόν με μια μεταβλητή flag=0. Τελειώνοντας το πρώτο for, αν αυτό εξάντλησε τις τιμές του i, ο πίνακας είναι ταξινομημένος προς τα πάνω και αυξάνουμε το flag κατά 1 , ενώ στη δεύτερη περίπτωση αυξανουμε το flag κατά 2.

Τελικά το flag θα πάρει μια τιμή από 0 έως 3, ανάλογα με τις ανακυκλώσεις που θα ολοκληρωθούν και από την τιμή αυτή θα εξαρτηθεί το μήνυμα που θα βγάλει η σχετική συνάρτηση:

>void check_srt(int p[])
{ int i, flag=0;
 for(i=0;(p[ i ]<=p[i+1])&&(i<N-1);i++);
 if (i==N-1) flag+=1;
 for(i=0;(p[ i ]>=p[i+1])&&(i<N-1);i++);
 if (i==N-1) flag+=2;
 switch (flag) {
case 0 : printf("MH TAXINOMHMENOS\n"); break;
case 1 : printf("TAXINOMHMENOS AYXOYSA SEIRA\n"); break;
case 2 : printf("TAXINOMHMENOS FTHINOYSA SEIRA\n"); break;
case 3 : printf("OLA TA STOIXEIA ISA\n"); break;
}
}

Μπήκα να δώσω αυτή τη λύση και να δω άν συνεχίζεις ν' αναζητάς τη ρουτίνα της ταξινόμησης. Απ' ότι καταλαβαίνω, ναι, γι αυτό κάνε λίγη υπομονή.

Δημοσ.

Πάμε λοιπόν φίλε PaniC_GR να δούμε την ταξινόμηση ξεκινώντας από την αντιμετάθεση που σ' ενοχλεί: Αν υποθέσω ότι έχω μια έτοιμη συνάρτηση my_swap για να κάνει αυτή τη δουλειά, θα μου αντιμεταθέσει τις τιμές δυό μεταβλητών a και b, αν την καλέσω περνώντας της σαν παραμέτρους τις διευθύνσεις των δύο μεταβλητών.

Η κλήση δλδ. πρέπει να είναι my_swap(&a, &B) και όχι my_swap(a, B) αφού στην τελευταία περίπτωση, η καλούσα συνάρτηση δεν θα πάρει μυρουδιά. Ευνόητο είναι ότι οι παράμετροι στη δήλωση της συνάρτησης θάναι τύπου pointer σε int και ο κώδικας θα γραφεί κάπως έτσι:

>void my_swap(int* x, int* y)
{
 int t=*x;
 *x=*y;
 *y=t;
}

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

 

Από κεί και πέρα, δεν έχουμε παρά να εκτελέσουμε τον προσδιορισμό του μικρότερου (όπως στο ερώτημα C), αλλά τώρα Ν-1 φορές και ξεκινώντας κάθε φορά, όχι από τη θέση 1, αλλά από τη θέση i. Ο κώδικας θα είναι κάπως έτσι:

>void str_selec_sort(int p[])
{ int i,j, t_min;
 for(i=0;i<N-1;i++){
    t_min=i;
    for (j=i+1;j<N;j++)
 if (p[j]<p[t_min])
    t_min=j;
    my_swap(&p[ i ],&p[t_min]);
 }
}

Για το αν η my_swap θα καλείται αβλεπί (όπως εδώ) ή θα ελέγχεται από ένα if (i!=t_min) έχουν γραφεί σελίδες επί σελίδων, αλλά και πάλι δεν είναι του παρόντος. Οσο για την εναλλακτική κλήση της my_swap (χωρίς τον op & )τάχουμε ξαναπεί στην κουβέντα για τη scanf. Διάλεξε ότι σου ταιριάζει καλύτερα.

 

Δεν έχω μπροστά μου C compiler, αλλά νομίζω ότι οι κώδικες δουλεύουν. Αν χρειαστείς οτιδήποτε, μη διστάσεις να ρωτήσεις.

Δημοσ.

popo re paides emina kolona me tis katevatoures kala ti na pw XILIA THXXXXXXX...se olo to team mate ;)...

 

tpt gerodas eithela na sou pw pws akoma den eimai se toso proxwrimeno epipedo k sthn parousiash kapion pragmatwn ta opia tha fanoun prwth fora se enan prog pou tha kanw...

den gnorizw akoma tin library #define N 20 dld ti paizei ekei?

k oso gia to int a[N]; oute ayto mporw na piasw kala dld dilwsi int a pou periexei [N] den tha mporouse na ginei int a,N???

akoma kati den eixa mazi akrivos mexri to simio pou eixa ftasei ekatsa wra gia na ton graxw edw to prog xwris tpt mprosta mou k se xenw pc :( :(...

telos padon k palli daidalus,gerodas,hayzel,ligionnarie k olous tous allous pou rixan mia matia...anamenw gerodas ;) :)

Δημοσ.

akoma xexasa sta simia void my_swap gerodas mporw na thesw tin main...(den xerw an eipa ppria :)) dld my_swap ligo kalutera gia to arxiko prog pou eixa post...

my man apo oti eida exeis exigisi gia thn kathe kinish k se eyxaristo pollu gia ayto twra ligo pros ta metra mou k pio apla na ginodan AN ginode...

Δημοσ.

Το #define είναι και αυτό οδηγία προς τον προεξεργαστή άλλα σε αντίθεση με το #include δεν εισάγει βιβλιοθήκες αλλά ορίζει μεταβλητές που στη συνέχεια αντικαθιστούνται στο πρόγραμμα.Η #define Ν 20 θα αντικαταστήσει το N στο κώδικα σου με την τιμή 20 ενώ ταυτόχρονα ο κώδικας σου γίνεται πιο εύκολος στο διάβασμα (readable).Δηλαδή όταν μεταγλωττίζεις τον κώδικα, ο μεταγλωττιστής αντικαθιστά όπου Ν την τιμή 20 οπότε η δήλωση που δεν καταλαβαίνεις γίνεται στην ουσία int a[20].

Την επόμενη ερώτηση σου δεν την καταλαβαίνω καλά...Ουσιαστικά ο gerontas ορίζει 2 συναρτήσεις (η my_swap καλείται από την str_selec_sort) από τις οποίες η πρώτη κάνει αντιμετάθεση των στοιχείων και η άλλη την ταξινόμηση.Εσύ θα συμπεριλάβεις και τις δύο άλλα από την main θα καλέσεις την str_selec_sort με παράμετρο τον πινακα.

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

Αρχειοθετημένο

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

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