alan2 Δημοσ. 25 Ιανουαρίου 2012 Δημοσ. 25 Ιανουαρίου 2012 προσπαθω να φτιάξω πρόγραμμα που να βρίσκει τα ακέραια πολλαπλάσια του 3 η του 4 στο πεδιο μεταξύ 20 και 40. το πληθος το βρίσκει αλλα δεν τυπώνει τους αριθμούς: #include <stdio.h> int main() { int i, j, m=0; for ( j=40;j>=20; j--) { if ((j/3==0)||(j/4==0)) printf("j = %d\n", j); m++; } printf("Plithos = %d\n", m); }
antonl Δημοσ. 25 Ιανουαρίου 2012 Δημοσ. 25 Ιανουαρίου 2012 Αντί για "/" στις συνθήκες του if statement βάλε mod. edit: Βασικά λείπουν και κάτι αγκύλες γιατί αλλιώς θα πρεπε να σου επιστρέφει μηδέν. > #include <stdio.h> int main() { int i, j, m=0; for ( j=40;j>=20; j--) if ((j mod 3==0)||(j mod 4==0)) { printf("j = %d\n", j); m++; } printf("Plithos = %d\n", m); }
virxen75 Δημοσ. 25 Ιανουαρίου 2012 Δημοσ. 25 Ιανουαρίου 2012 ο κώδικας σου πρέπει να γραφεί: > #include <stdio.h> int main() { int i, j, m=0; for ( j=40;j>=20; j--) //{ όχι στο for if ((j%3==0)||(j%4==0)){//<----αλλά στο if και αντί / βάλε % (αντί διαίρεση το υπόλοιπο της) printf("j = %d\n", j); m++;//αυξηση κατα 1 αν ισχύει η συνθήκη } printf("Plithos = %d\n", m); } ......... if ((j/3==0)||(j/4==0)){ ....... πές μου μια τιμή του j (20..40) που να αληθεύει η παραπάνω συνθήκη ....
MeTaXaS4 Δημοσ. 25 Ιανουαρίου 2012 Δημοσ. 25 Ιανουαρίου 2012 και όσο για το τι σου επιστρέφει πλήθος είναι γιατί το m++; δεν είναι μέσα στο if {} αλλά μέσα στο for{} οπότε όσες φορές τρέχει η for αυξάνει και ο μετρητής σου , οι διορθώσεις είναι οι από πάνω!
defacer Δημοσ. 26 Ιανουαρίου 2012 Δημοσ. 26 Ιανουαρίου 2012 Αυτό που δεν είπαν στα ίσια τα παιδιά παραπάνω είναι ότι η πράξη x / 3 όταν το x είναι int είναι ακέραια διαίρεση (π.χ. 6 / 3 = 2 αλλά 7 / 3 = 2 και επίσης 8 / 3 = 2). Επομένως δε σου κάνει. Ακόμα κι αν η διαίρεση ήταν floating point, θα είχες το πρόβλημα ότι δεν μπορείς ποτέ να συγκρίνεις αριθμούς κινητής υποδιαστολής μεταξύ τους (όπως θα ήταν εδώ το αποτέλεσμα του x / 3 και το 0). Η εξήγηση είναι τεχνικά όχι και τόσο απλή, αλλά μπορείς να δεις ένα ζωντανό παράδειγμα εδώ. Πέρα απ' αυτά, όπως λένε και τα παιδιά η διαίρεση εδώ δεν είναι η σωστή ιδέα έτσι κι αλλιώς, πρέπει να κάνεις τη δουλειά με modulo.
Star_Light Δημοσ. 27 Ιανουαρίου 2012 Δημοσ. 27 Ιανουαρίου 2012 προσπαθω να φτιάξω πρόγραμμα που να βρίσκει τα ακέραια πολλαπλάσια του 3 η του 4 στο πεδιο μεταξύ 20 και 40. το πληθος το βρίσκει αλλα δεν τυπώνει τους αριθμούς: > #include <stdio.h> int main() { int i, j, m=0; for ( j=40;j>=20; j--) { if ((j/3==0)||(j/4==0)) printf("j = %d\n", j); m++; } printf("Plithos = %d\n", m); } Kαλησπερα! Βαζε τον κώδικα αναμεσα σε ετικέτες ωστε να δειχνει πιο πλαισιωμένος. Εχω φτιαξει εναν δικο μου κωδικα ο οποιος βρισκει τα πολλαπλάσια των αριθμων αλλα περαιτερω επεκτασεις δεν του εχω κανει. Δικη μου αποψη ειναι να φτιαξεις πρωτα τον σκελετο. Και στη συνεχεια κολλα του μεσα οτι επεκταση θες. Αν φτιαξεις το γενικο "καλουπι" υπολογισμου μετα τα πραγματα ειναι πολυ ευκολοτερα. Απλα μια προγραμματιστικη τεχνικη που εχει βοηθησει εμενα τουλαχιστον.
alan2 Δημοσ. 27 Ιανουαρίου 2012 Μέλος Δημοσ. 27 Ιανουαρίου 2012 ευχαριστώ! και πώς μπορώ να τυπώσω ανεστραμένο ενα sting ? η βασική μου ιδέα char ch[10] ..... for(i=strlen(ch);i>=0;i--) printf ("%c",ch); για κάποιο λόγο δεν δουλεύει
Stavros_Ribo Δημοσ. 27 Ιανουαρίου 2012 Δημοσ. 27 Ιανουαρίου 2012 Αν έχεις κάνει #include<string.h> θα πρέπει να δουλέψει. Καλύτερα βάλε for(i=strlen(ch)-1;i>=0;i--) γιατί μετράμε από το 0.
alan2 Δημοσ. 27 Ιανουαρίου 2012 Μέλος Δημοσ. 27 Ιανουαρίου 2012 έχω γραψει #include <stdio.h> #include <string.h> int main() { unsigned int i; char ch[10]; puts("dose symboloseira"); scanf("%s",ch); ... for(i=strlen(ch)-1;i>=0;i--) putchar (ch);} } και κατι κανει αλλα αμεσως μετα η κονσολα γεμίζει με αχρηστους χαρακτήρες και ακουγονται μπιπ απο το μεγαφωνάκι.
Stavros_Ribo Δημοσ. 27 Ιανουαρίου 2012 Δημοσ. 27 Ιανουαρίου 2012 Αν αλλάξεις το unsigned int i, σε int i θα τρέξει.
migf1 Δημοσ. 27 Ιανουαρίου 2012 Δημοσ. 27 Ιανουαρίου 2012 έχω γραψει > #include <stdio.h> #include <string.h> int main() { unsigned int i; char ch[10]; puts("dose symboloseira"); scanf("%s",ch); ... for(i=strlen(ch)-1;i>=0;i--) putchar (ch[i]);} } και κατι κανει αλλα αμεσως μετα η κονσολα γεμίζει με αχρηστους χαρακτήρες και ακουγονται μπιπ απο το μεγαφωνάκι. Αρχικοποίησε το string σου όταν το ορίζεις, γεμίζοντάς το με μηδενικούς χαρακτήρες... > ... char ch[10] = {'\0'}; ... Επίσης, εφόσον ξέρεις πως το μέγιστο μήκος του είναι 10 (αφού έτσι το έχεις ορίσει) και δεδομένου πως η τελευταία θέση πρέπει πάντα να περιέχει μηδενικό χαρακτήρα, μπορείς να γλιτώσεις το overhead της strlen() αλλάζοντας τον κώδικά σου ως εξής: > #include <stdio.h> int main( void ) { int i; char ch[10] = {'\0']; puts( "dose symboloseira" ); scanf("%s",ch); ... for ( i=9; i >-1; i-- ) putchar( ch[i] ); } Έτσι δεν χρειάζεσαι και το #include <string.h>. Σημείωσε όμως πως αν σου δώσει πολύ μικρό string ο χρήστης (π.χ. 2 χαρακτήρες) τότε σε συμφέρει καλύτερα να χρησιμοποιήσεις την strlen(). Δυστυχώς όμως η χρήση της scanf() δεν σου εξασφαλίζει πως θα διαβάσει λιγότερους από 9+1 χαρακτήρες από την κύρια είσοδο, οπότε αν π.χ. ο χρήστης σου πληκτρολογήσει ας πούμε 15 χαρακτήρες, τότε .... BOOM... buffer overflow του ch ! Για αυτό το διάβασμα των strings γίνεται με άλλες συναρτήσεις (συνήθως custom). Μπορείς όμως να το κάνεις με την στάνταρ συνάρτηση: fgets(). Το μείον της (έναντι των custom) είναι πως διαβάζει και τον χαρακτήρα αλλαγής γραμμής '\n' (εκτός αν το input κάνει overflow, οπότε το κόβει χωρίς '\n'). Άρα αν δεν τον θέλεις μέσα στο ch πρέπει να πας να τον μηδενίσεις μόνος σου (αν υπάρχει). Αυτό με τη σειρά του επαναφέρει την αναγκαιότητα της strlen() για να βρεις που κι εάν μπήκε το '\n'. Οπότε όλα μαζί, βγάζουν κάτι σαν το παρακάτω (το υλοποιώ επίτηδες με δείκτες, οπότε σε περίπτωση που δεν τους ξέρεις να μην στο δώσω στο πιάτο, και άρα να το προσαρμόσεις στις ανάγκες σου... αν πάλι ξέρεις δείκτες, θα έπρεπε να σου ήταν πολύ εύκολο να γράψεις τον κώδικα μόνος σου, οπότε υποθέτω δεν έχετε μάθει ακόμα δείκτες)... > #include <stdio.h> #include <string.h> #define MAXSTRSIZE (10+1) #define myMIN(x,y) ( (x) < (y) ? (x) : (y) ) int main( void ) { char ch[ MAXSTRSIZE ] = {'\0'}; char *cp = NULL; puts( "dose symboloseira" ); fgets( ch, MAXSTRSIZE, stdin ); /* find len of string, set a pointer to it & remove '\n' if any */ cp = ch + myMIN( MAXSTRSIZE, strlen(ch) ) - 1; if ( *cp == '\n' ) *cp-- = '\0'; /* print the string, right to left */ while ( cp >= ch ) putchar( *cp-- ); return 0; } Ρίξε μια ματιά κι εδώ: http://x-karagiannis...gs/strings1.php
Star_Light Δημοσ. 27 Ιανουαρίου 2012 Δημοσ. 27 Ιανουαρίου 2012 ευχαριστώ! και πώς μπορώ να τυπώσω ανεστραμένο ενα sting ? η βασική μου ιδέα char ch[10] ..... for(i=strlen(ch);i>=0;i--) printf ("%c",ch); για κάποιο λόγο δεν δουλεύει έχω γραψει #include <stdio.h> #include <string.h> int main() { unsigned int i; char ch[10]; puts("dose symboloseira"); scanf("%s",ch); ... for(i=strlen(ch)-1;i>=0;i--) putchar (ch);} } και κατι κανει αλλα αμεσως μετα η κονσολα γεμίζει με αχρηστους χαρακτήρες και ακουγονται μπιπ απο το μεγαφωνάκι. "Kαλησπερα! Βαζε τον κώδικα αναμεσα σε ετικέτες ωστε να δειχνει πιο πλαισιωμένος....... " τιποτα! Εγω ευχαριστω που με γραψες στα παλια σου τα Nike μπορουσες να το κανεις πιο κομψά ρε παιδι μου... lol ευχαριστώ! και πώς μπορώ να τυπώσω ανεστραμένο ενα sting ? η βασική μου ιδέα >char ch[10] ..... for(i=strlen(ch);i>=0;i--) printf ("%c",ch[i]); για κάποιο λόγο δεν δουλεύει Οταν λες ανεστραμένο τι ακριβώς εννοεις? Αντιστροφα να στο εκτυπώσει? > #include<stdio.h> #include<stdlib.h> #define N 10 void func(char str[N]); int main() { char str[N]=""; printf("Give a string: \n"); fgets(str,N,stdin); printf("\n"); func(str); return 0; } //---------------------------------------------------------------------- void func(char str[N]) { char *sp; // string pointer sp=str; for(sp=str; *sp!='\0' && *sp!='\n'; sp++) putchar(*sp); printf("\n\n"); while(sp!=str) { sp--; printf("%c",*sp); } return; } //---------------------------------------------------------------------- Αυτη η συνάρτηση δέχεται ενα string και το εκτυπωνει 2 φορες. ΤΗν 1 φορα κανονικα (οπως το δίνει ο χρήστης) ενω την δεύτερη αντίστροφα. > HELLO OLLEH Αυτη τη φορα αλαν2 να μην ευχαριστησεις εμενα (ακομη και αν αποφασισεις να βαλεις tags στον κωδικα σου!!!!) ευχαριστησε με την μια τον migf1 γιατι αν δεν ηταν αυτος αυτα δεν θα τα ξερα ωστε να στα παραθεσω
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα