amoutzas Δημοσ. 5 Δεκεμβρίου 2017 Δημοσ. 5 Δεκεμβρίου 2017 γεια σας,εχω ενα μεγαλο προβλημα που δν εχω ιδεα πως να το λυσω,καθομαι επι 1 ωρα και διωρθωνω τον κωδικα μηπως και βγει κατι αλλα δεν,ο κωδικας τρεχει μια χαρα μεχρι το σημειο που υπαρχει η while με minptr και max ptr (θα βαλω και σχολιο στον κωδικα)αν βαλω πχ ενα διαστημα 5 με 15 Min και max και αρχιζω να εισαγω τιμες,θα δεχθει μια δυο τιμες και θα γινει ενα μπαχαλο,μπορει να δεχεται οτι ναναι,δεν δεχεται τιμες που θα επρεπε να εισαχθουνυπαρχει καποιο λαθος στην συνθηκη της while η σε εκεινο το κομματι κωδικα???ευχαριστω εκ τον προτερων για οποιαδηποτε απαντηση εχω ανεβασει και screenshot με το προβλημα που υπαρχειαπο κατω ειναι το τι ζηταει η ασκηση αλλα δν εχει πολυ σημασια(θα διαβάζονται και θα αποθηκεύονται στον πίνακα arr1 10 ακέραιοι. Θα πρέπει να γίνεται έλεγχος ότι κάθε ακέραιος που εισάγεται είναι στο διάστημα [min,max]. Αν δεν είναι, τότε θα ζητείται να ξαναεισαχθεί μέχρι να δοθεί αριθμός στο σωστό διάστημα) #include <stdio.h> #include <stdlib.h> #define TEN 10 int main() { int min = 0, max = 1 , *minptr, *maxptr, i, *temp; //Varibable assignment int arr1[TEN], arr2[TEN], *arr1ptr, *arr2ptr; //Varibable assignment int MO,sum,sub,*MOptr,*sumptr,*subptr; minptr = &min; // pointers assignment maxptr = &max; // pointers assignment MOptr= &MO; // pointers assignment sumptr= ∑ // pointers assignment subptr= ⊂ // pointers assignment arr1ptr = &arr1[1]; // pointers assignment arr2ptr = &arr2[1]; // pointers assignment printf(" Enter a min value \n"); //The user should enter a minimum value scanf("%d", &minptr); //read value printf(" Enter a max value \n"); //The user should enter a maximum value scanf("%d", &maxptr); //read value while (maxptr == minptr){ //checking if minimum and maximum values are equal printf("You entered the same value,Enter two different values for min and max\n"); //The user should enter different values printf(" Enter a min value \n"); //The user should enter a minimum value scanf("%d", &minptr); //read value printf(" Enter a max value \n"); //The user should enter a maximum value scanf("%d", &maxptr); //read value } while (maxptr < minptr){ //checking if minimum value is bigger than maximum value temp = maxptr; //swaping values with a temp variable for help maxptr = minptr; //swaping values with a temp variable for help minptr = temp; //swaping values with a temp variable for help } printf("maxptr is : %d minptr is : %d \n", maxptr, minptr); //print the maximum and minimum values // APO EDW KAI KATW EINAI TO SHMEIO POY E3IGW for(i = 0; i < TEN ; i++){ printf("Enter an element\n"); scanf("%d", &arr1ptr + i); while(arr1ptr +i <= minptr || arr1ptr +i >= maxptr) { printf("The value you enter must be bewteen min and max \n"); scanf("%d", &arr1ptr + i); } } return 0; }
GReaperEx Δημοσ. 5 Δεκεμβρίου 2017 Δημοσ. 5 Δεκεμβρίου 2017 Αν ενεργοποιούσες τα warnings του compilers, θα έβλεπες ότι σε προειδοποιεί για τις γραμμές 53 και 57. Η scanf θέλει δείκτη σε int, αλλά εσύ της δίνεις δείκτη σε δείκτη σε int. Παίρνεις την διεύθυνση του δείκτη. Το ίδιο για τα minptr και maxptr. Πέτα όλα αυτά τα *ptr και χρησιμοποίησε κατευθείαν '&min', '&max' και '&arr1'.
amoutzas Δημοσ. 6 Δεκεμβρίου 2017 Μέλος Δημοσ. 6 Δεκεμβρίου 2017 ετσι πρεπει να γινει ασκηση,λες να θελω να πεδεψω τον εαυτο μου με δεικτες?http://prntscr.com/hjmrgk δες εδω στο τελος τις παρενθεσεις τι λενε
amoutzas Δημοσ. 6 Δεκεμβρίου 2017 Μέλος Δημοσ. 6 Δεκεμβρίου 2017 Α, κατάλαβα... Τα συλλυπητήρια μου. Μπορω να σε ρωτησω κατι αλλο ασχετο? οταν θελω να σε εναν 2d πινακα char να διαβασω ενα στοιχειο αλλα δεν πρεπει να ειναι μεγαλυτερο απο καποιο αριθμο χαρακτηρων και μετα πρεπει να κανω και ελεγχο,αυτο γινεται με strings? (πχ 10) δλδ πρεπει να γραψω την scanf ετσι η γινεται κ αλλιως? και αν ειναι ετσι,ο ελεγχος πως μπορει να γινει? με καποιο j που να μετραει ποσους χαρακτηρες περιλαμβανει το string? for(i=0; i < 5 i++ scanf(" %10s",&names[i])
k33theod Δημοσ. 6 Δεκεμβρίου 2017 Δημοσ. 6 Δεκεμβρίου 2017 Αφού έχεις ορίσει του δείκτες μετά πρέπει να χρησιμοποιήσεις το όνομα του όπου χρειάζεται δείκτης και το * όπου θες την τιμή του δηλαδή scanf("%d", minptr); //To όρισμα είναι ήδη pointer printf(" Enter a max value \n"); //The user should enter a maximum value scanf("%d", maxptr); //ομοίως while (*maxptr == *minptr){ //Πρέπει να συγκρίνεις τιμές και όχι pointers κλπ κλπ Ελπίζω να μην τα λεώ λάθος Ο mo καλό είναι να είναι float.
Επισκέπτης Δημοσ. 7 Δεκεμβρίου 2017 Δημοσ. 7 Δεκεμβρίου 2017 #include <stdio.h> #include <stdlib.h> // Για τον φιλαράκο στο insomnia με αγάπη // αυτό είναι το διάλλειμά μετά απο 12 ώρες διάβασμα // για την πτυχιακή μου int main() { int min = 0; int max = 1; int arr1[10]; int arr2[10]; int *minptr = &min; int *maxptr = &max; int *arr1ptr = arr1; int *arr2ptr = arr2; int *temp = 0; do { printf("Δώσε 2 αριθμούς min και max \"%%d %%d\": "); scanf("%d %d", minptr, maxptr); if( *minptr == *maxptr ) { printf("Έδωσες ίδιους αριθμούς για min και max.. Πάλι από την αρχή!\n"); continue; } if ( *minptr > *maxptr ) { printf("Δεν μπορείς να διαβάσεις ρε παπάρα? min και μετά max λέμε\n"); temp = minptr; minptr = maxptr; maxptr = temp; break; } break; } while (1); printf("Πληκρολόγησε 10 αριθμούς με την σειρά..\n"); int i = 0; do{ scanf("%d", arr1ptr); if ( *arr1ptr < *minptr || *arr1ptr > *maxptr ) { printf("Ο αριθμός που έδωσες είναι έξω από τα όρια του [min,max] διαστήματος..\n"); continue; } arr1ptr++; i++; } while ( i < 10 ); return 0; } Κάνει ακριβώς όλα όσα ζητάει το screenshot σου εως την 3η βουλίτσα, σου άφησα την 4η για πάρτη σου. Κάτσε και κατάλαβε τον κώδικα μου γιατί αν δεν καταλάβεις και έτσι που τον έγραψα καθαρά και χωρίς πολλά πολλά δεν έχεις ελπίδα. Ο κώδικας που έδωσες εδώ ηταν χάλια μάυρα με το συμπάθιο, παντού βασικά λάθη κατανόησης και των πιο βασικών λειτουργιών των δεικτών. Α και φιλαράκι, ΣΤΑΜΑΤΑ σε παρακαλώ να βάζεις σχόλια σε ΚΑΘΕ γραμμή κωδικα. Κυριολεκτικά χίλλιες φορές καλήτερα να μην δω κανένα σχόλιο σε κώδικα παρά η κάθε γραμμή να λεεί τι κάνει, ποίος σου είπε να το κάνεις αυτο ο καθηγητής σου? Πες του να πάει να κόψει καμία βόλτα με τις @@ του.
BabyRage Δημοσ. 7 Δεκεμβρίου 2017 Δημοσ. 7 Δεκεμβρίου 2017 1. Οι πίνακες ξεκινάνε από το στοιχείο μηδέν στην C. Άρα αυτό είναι μάλλον λάθος: arr1ptr = &arr1[1]; // pointers assignment arr2ptr = &arr2[1]; // pointers assignment γιατί οι δείκτες θα δείχνουν στην δεύτερη θέση, πρέπει να γράψεις αυτό για να δείχνουν στην πρώτη θέση arr1ptr = &arr1[0]; // pointers assignment arr2ptr = &arr2[0]; // pointers assignment 2. Η scanf θέλει να δεχτεί μια διεύθυνση για όρισμα, έτσι ώστε να πάει να γράψει εκεί την τιμή που πατήθηκε: Άρα αυτό είναι λάθος: scanf("%d", &minptr); //read value Ή θα γράψεις: scanf("%d", minptr); //read value μιας και το minptr είναι δείκτης σε μια θέση μνήμης που περιέχει έναν ακέραιο. ή θα γράψεις: scanf("%d", &min); //read value Και οι δύο κλήσεις το ίδιο "αποτέλεσμα" θα έχουν, αφού πρόκειται για την ίδια θέση μνήμης. Το ίδιο και για το maxptr 3. while (maxptr == minptr){ //checking if minimum and maximum values are equal ΌΧΙ. Το maxptr και το minptr είναι δείκτες, Το περιεχόμενο τους είναι θέσεις μνήμης, εκεί που δείχνουν δηλαδή. Στην συνθήκη αυτή συγκρίσεις αν το περιεχόμενο τους είναι ίδιο, αν δείχνουν δηλαδή στην ίδια θέση μνήμης. Το περιεχόμενο τους δεν θα είναι ποτέ ίδιο, καθώς λες minptr = &min; // pointers assignment maxptr = &max; // pointers assignment τους δίνεις δηλαδή να δείχνουν σε διαφορετικές θέσεις μνήμης. Εκεί θες να τσεκάρεις αν αυτό στο οποίο δείχνουν είναι ίδιο, δηλαδή while (*maxptr == *minptr){ //checking if minimum and maximum values are equal Και πάλι μετά, μέσα στην while διαβάζεις με λάθος τρόπο. 4. while (maxptr < minptr) Και πάλι, συγκρίνεις θέσεις μνήμης. Δεδομένου ότι λες αυτό: int min = 0, max = 1 , *minptr, *maxptr, i, *temp; //Varibable assignment ... minptr = &min; // pointers assignment maxptr = &max; // pointers assignment Το min και το max αποθηκεύονται σε θέσεις μνήμης που λέγεται Stack memory. Η stack memory ανάλογα με το σύστημα στο οποίο τρέχεις "μεγαλώνει" "προς τα κάτω". Από την στιγμή που πρώτα δηλώνεις το min, το min θα είναι σε μεγαλύτερη διεύθυνση από το max, άρα το minptr θα έχει ως περιεχόμενο μια διεύθυνση που είναι μεγαλύτερη από αυτήν την του maxptr. Άρα η while συνθήκη υποθέτω ότι εκτελείται ΠΆΝΤΑ, άσχετα με τις τιμές του min και max. 5. temp = maxptr; //swaping values with a temp variable for help maxptr = minptr; //swaping values with a temp variable for help minptr = temp; //swaping values with a temp variable for help Δεν αλλάζεις τις πραγματικές τιμές, το min και το max θα έχουν τις τιμές που είχαν εξ'αρχής. Απλά το minptr θα δείχνει στο max, και το maxptr θα δείχνει στο min. Αν πραγματικά θες να αλλάξεις τιμές, πρέπει να χρησιμοποιήσεις το * πριν τον δείκτη και να πάρεις την τιμή εκεί που δείχνουν οι δείκτες. 6. scanf("%d", &arr1ptr + i); while(arr1ptr +i <= minptr || arr1ptr +i >= maxptr){ printf("The value you enter must be bewteen min and max \n"); scanf("%d", &arr1ptr + i); } Και πάλι παίζεις με δείκτες και όχι με την θέση μνήμης στην οποία δείχνουν.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα