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

Ερώτηση για πίνακες σε C


pioneer2

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

Δημοσ.

Καλησπέρα. Όποιος παρακαλώ μπορέσει και απαντήσει θα του ήμουν πολύ ευγνώμων.. Έχω κάποιες ιδέες παρακάτω σε κώδικα αλλά δε ξέρω αν είναι σωστές..

 

Το ζητούμενο είναι:

'Εστω έχω 2 πίνακες γεμάτους τον pin[N] και npin[N]. Θέλω να συγκρίνονται τα στοιχεία των 2 αυτών πινάκων, κ όσα δεν είναι ίδια να τα κάνει μηδέν (στον npin).

 

int i;

 

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

if(*(pin+i) != (*(npin+i))

*(npin+i)=='0';

 

 

Επίσης τι εννοεί όταν λέει να συγκριθούν τα 2 πρωτα στοιχεία στα οποία διαφέρουν οι πίνακες?

 

Γνωρίζω ότι τα πρώτα στοιχεία είναι &pin[0], &npin[0] .Όμως αφού είναι σταθεροί δείκτες πως θα συγκρίνουμε τα στοιχεια τους?

Δημοσ.

Η εντολή *(npin+i)=='0'; δεν κάνει ανάθεση. Μάλλον εννοείς *(npin+i)='0';

Επίσης αν θέλεις να αναθέσεις τον αριθμό 0, δεν χρειάζεσαι τα quotes ' '.

 

τα 2 πρωτα στοιχεία στα οποία διαφέρουν οι πίνακες: Σκανάρεις τους πίνακες μέχρι να βρεις την πρώτη διαφορά (δεν είναι στη θέση 0 απαραίτητα), έστω θέση 3. 'Οταν την βρεις συγκρίνεις τα συγκεκριμένα στοιχεία npin[3], pin[3]. Τέλος δεν είσαι υποχρεωμένος να σκανάρεις τους πίνακες χρησιμοποιώντας pointer arithmetic.

Δημοσ.

Ευχαριστώ φίλε με σώζεις και έσπαγα το κεφάλι μου να'σαι καλά!!

Έχω άλλη μια εκδοχή:

 

δηλώνω έναν άλλο πίνακα με τα μηδέν: static char zero[]="0";

 

και λέω while ( *(npin+1)++ !='\0') /*ψάχνει όλο το πίνακα μέχρι τέλους*/

putchar *( zero++); /*γεμίζει συνεχώς με μηδενικά '0'

 

Αυτό μπορεί να το σκότωσα αλλά κάνω πειραματισμούς..

 

---------- Προσθήκη στις 16:31 ---------- Προηγούμενο μήνυμα στις 16:29 ----------

 

Ευχαριστώ φίλε με σώζεις και έσπαγα το κεφάλι μου να'σαι καλά!!

Έχω άλλη μια εκδοχή:

 

δηλώνω έναν άλλο πίνακα με τα μηδέν: static char zero[]="0";

 

και λέω while ( *(npin+1)++ !='\0') /*ψάχνει όλο το πίνακα μέχρι τέλους*/

putchar *( zero++); /*γεμίζει συνεχώς με μηδενικά '0'

 

Αυτό μπορεί να το σκότωσα αλλά κάνω πειραματισμούς..

 

 

Σορυ τα βγήκε μεγάλη η γραμματοσειρά καταλάθος

Δημοσ.
Καλησπέρα. Όποιος παρακαλώ μπορέσει και απαντήσει θα του ήμουν πολύ ευγνώμων.. Έχω κάποιες ιδέες παρακάτω σε κώδικα αλλά δε ξέρω αν είναι σωστές..

 

Το ζητούμενο είναι:

'Εστω έχω 2 πίνακες γεμάτους τον pin[N] και npin[N]. Θέλω να συγκρίνονται τα στοιχεία των 2 αυτών πινάκων, κ όσα δεν είναι ίδια να τα κάνει μηδέν (στον npin).

 

int i;

 

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

if(*(pin+i) != (*(npin+i))

*(npin+i)=='0';

 

 

Επίσης τι εννοεί όταν λέει να συγκριθούν τα 2 πρωτα στοιχεία στα οποία διαφέρουν οι πίνακες?

 

Γνωρίζω ότι τα πρώτα στοιχεία είναι &pin[0], &npin[0] .Όμως αφού είναι σταθεροί δείκτες πως θα συγκρίνουμε τα στοιχεια τους?

 

int i;

 

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

if(pin) != (npin)

npin=0;

 

 

 

και στο άλλο τι θέλεις να κάνεις ακριβώς;;

Δημοσ.

Αυτό που δεν έχω καταλάβει είναι το τι θες να κάνεις......

 

Είπαμε έχεις 2 πίνακες τον pin[Ν] και τον npin[Ν] και θες να τους συγκρίνεις.

Αν κάποιο στοιχείο του npin διαφέρει από το αντίστοιχο του pin τότε το κάνεις ίσο με 0.

Μετά λες πως αν κάποιο στοιχείου του npin δεν είναι μηδέν τότε:

>putchar *(zero++); /*γεμίζει συνεχώς με μηδενικά '0'

αυτή η εντολή θα εκτυπώσει την τιμή στην οποία δείχνει ο zero (ο οποίος όμως θα μετατοπιστεί στην επόμενη θέση μνήμης !!!!καλύτερα να αποφεύγεις τέτοια παιχνίδια με τον pointer που δείχνει στην αρχή ενός πίνακα!!!!

 

 

>static char zero[] = "0";

Static --- Causes a variable that is defined within a function to be preserved in subsequent calls to the function

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

>while(*(npin+1)++ != '\0')  /*ψάχνει όλο το πίνακα μέχρι τέλους*/

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

>while(npin[i++] != Ν-1)  /*ψάχνει όλο το πίνακα μέχρι τέλους*/

όπου i ένας δηλωμένος ακέραιος και Ν το μέγεθος του πίνακα σου.

 

Γιατί δεν μας εξηγείς τι προσπαθείς να κάνεις ??

Δημοσ.
Αυτό που δεν έχω καταλάβει είναι το τι θες να κάνεις......

 

Είπαμε έχεις 2 πίνακες τον pin[Ν] και τον npin[Ν] και θες να τους συγκρίνεις.

Αν κάποιο στοιχείο του npin διαφέρει από το αντίστοιχο του pin τότε το κάνεις ίσο με 0.

Μετά λες πως αν κάποιο στοιχείου του npin δεν είναι μηδέν τότε:

>putchar *(zero++); /*γεμίζει συνεχώς με μηδενικά '0'

αυτή η εντολή θα εκτυπώσει την τιμή στην οποία δείχνει ο zero (ο οποίος όμως θα μετατοπιστεί στην επόμενη θέση μνήμης !!!!καλύτερα να αποφεύγεις τέτοια παιχνίδια με τον pointer που δείχνει στην αρχή ενός πίνακα!!!!

 

 

>static char zero[] = "0";

 

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

>while(*(npin+1)++ != '\0')  /*ψάχνει όλο το πίνακα μέχρι τέλους*/

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

>while(npin[i++] != Ν-1)  /*ψάχνει όλο το πίνακα μέχρι τέλους*/

όπου i ένας δηλωμένος ακέραιος και Ν το μέγεθος του πίνακα σου.

 

Γιατί δεν μας εξηγείς τι προσπαθείς να κάνεις ??

 

Ρε παιδιά θα σταματήσετε ποτε να γράφετε τα μανιτάρια όπως *(npin+1)++??? Αφού δεν διαβάζεται αυτό το πράγμα, υπάρχουν και [] για αυτήν την δουλειά. Εάν πάτε να περάσετε την συνέντευξη και γράψετε κάτι τέτοιο εκεί πέρα θα αποτύχετε, είναι bad practice αυτό το εδώ.

Δημοσ.
Ρε παιδιά θα σταματήσετε ποτε να γράφετε τα μανιτάρια όπως *(npin+1)++??? Αφού δεν διαβάζεται αυτό το πράγμα, υπάρχουν και [] για αυτήν την δουλειά.

 

Ναι ήθελα να το τονίσω και εγώ αυτό...

Δημοσ.

Eυχαριστώ για τις απαντήσεις και τις επισημάνσεις. Αυτό που θελώ να κάνω είναι.. οτι μαθαίνω C.. εξ'ου και οι πατάτες..

 

Απλά γράφω έτσι επειδή είναι το ίδιο να λές pin[n] kai *(pin+n) ή pin+2 k ai &pin[2]

Δημοσ.
Eυχαριστώ για τις απαντήσεις και τις επισημάνσεις. Αυτό που θελώ να κάνω είναι.. οτι μαθαίνω C.. εξ'ου και οι πατάτες..

 

Απλά γράφω έτσι επειδή είναι το ίδιο να λές pin[n] kai *(pin+n) ή pin+2 k ai &pin[2]

 

Και πιο από τα 2 σου φαίνεται πιο ανθρώπινο?? Γιατί να βασανίζεις τους συναδέλφους σου?

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

Δημοσ.
Και πιο από τα 2 σου φαίνεται πιο ανθρώπινο?? Γιατί να βασανίζεις τους συναδέλφους σου?

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

 

Ξεκίνημα είναι..Είναι ο ενθουσιώδης τρόπος αυτός..Υπήρξες κ εσύ αρχάριος στη C..

Χωρίς αυτή τη μορφη δε θα καταλάβαινα τους δείκτες κ ότι ειναι πίνακες στην ουσια..

Δημοσ.
Αυτό που δεν έχω καταλάβει είναι το τι θες να κάνεις......

 

Είπαμε έχεις 2 πίνακες τον pin[Ν] και τον npin[Ν] και θες να τους συγκρίνεις.

Αν κάποιο στοιχείο του npin διαφέρει από το αντίστοιχο του pin τότε το κάνεις ίσο με 0.

Μετά λες πως αν κάποιο στοιχείου του npin δεν είναι μηδέν τότε:

>putchar *(zero++); /*γεμίζει συνεχώς με μηδενικά '0'

αυτή η εντολή θα εκτυπώσει την τιμή στην οποία δείχνει ο zero (ο οποίος όμως θα μετατοπιστεί στην επόμενη θέση μνήμης !!!!καλύτερα να αποφεύγεις τέτοια παιχνίδια με τον pointer που δείχνει στην αρχή ενός πίνακα!!!!

 

 

>static char zero[] = "0";

 

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

>while(*(npin+1)++ != '\0')  /*ψάχνει όλο το πίνακα μέχρι τέλους*/

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

>while(npin[i++] != Ν-1)  /*ψάχνει όλο το πίνακα μέχρι τέλους*/

όπου i ένας δηλωμένος ακέραιος και Ν το μέγεθος του πίνακα σου.

 

Γιατί δεν μας εξηγείς τι προσπαθείς να κάνεις ??

 

Χωρις πολλα πολλα. Παρε ενα IDE.

Δημοσ.
Αυτό που δεν έχω καταλάβει είναι το τι θες να κάνεις......

 

Είπαμε έχεις 2 πίνακες τον pin[Ν] και τον npin[Ν] και θες να τους συγκρίνεις.

Αν κάποιο στοιχείο του npin διαφέρει από το αντίστοιχο του pin τότε το κάνεις ίσο με 0.

Μετά λες πως αν κάποιο στοιχείου του npin δεν είναι μηδέν τότε:

>putchar *(zero++); /*γεμίζει συνεχώς με μηδενικά '0'

αυτή η εντολή θα εκτυπώσει την τιμή στην οποία δείχνει ο zero (ο οποίος όμως θα μετατοπιστεί στην επόμενη θέση μνήμης !!!!καλύτερα να αποφεύγεις τέτοια παιχνίδια με τον pointer που δείχνει στην αρχή ενός πίνακα!!!!

 

 

>static char zero[] = "0";

 

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

>while(*(npin+1)++ != '\0')  /*ψάχνει όλο το πίνακα μέχρι τέλους*/

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

>while(npin[i++] != Ν-1)  /*ψάχνει όλο το πίνακα μέχρι τέλους*/

όπου i ένας δηλωμένος ακέραιος και Ν το μέγεθος του πίνακα σου.

 

Γιατί δεν μας εξηγείς τι προσπαθείς να κάνεις ??

 

ούτε αυτό είναι σωστό

>while(npin[i++] != Ν-1)  /*ψάχνει όλο το πίνακα μέχρι τέλους*/

θες κάτι τέτοιο

>for(int i=0;i<N;i++) 

ή

>while(i<N) {...; ...; ...; i++;} 

Δημοσ.
ούτε αυτό είναι σωστό
>while(npin[i++] != Ν-1)  /*ψάχνει όλο το πίνακα μέχρι τέλους*/

θες κάτι τέτοιο

>for(int i=0;i<N;i++) 

ή

>while(i<N) {...; ...; ...; i++;} 

 

Αυτός ο κώδικας..

int i;

 

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

if(*(pin+i) != (*(npin+i))

*(npin+i)=0;

 

Πώς μπορεί να γίνει με άλλο τρόπο? ΓΝΩΡΙΖΟΝΤΑΣ ότι μπορεί να γράφω βλακείες πρότεινα αυτό

>
char zero[]="0";
while ( *(npin+1)++ !='\0') 
putchar *( zero++); 

ΔΕΝ θέλω να φτιάξω κάτι, μόνο πειραματίζομαι γι'αυτό ρωτάω. Ευχαριστώ.

Δημοσ.

πες τι θέλεις να κάνεις να μπορέσω να σε βοηθήσω,

 

αυτό

 

if(*(pin+i) != (*(npin+i))

*(npin+i)=0;

 

μην το χρησιμοποιείς λάθος τρόπος γραφής, θα καταλάβεις αργότερα ότι θα σε ζορίσει, θες να αριθμείς τα διαφορετικά ή να τα μηδενίζεις;;

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

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

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