Padaz Bloody Δημοσ. 14 Μαρτίου 2012 Μέλος Δημοσ. 14 Μαρτίου 2012 Εντάξει τα σετάρισα, όλα οκ είναι, δουλεύει και ο codeblocks, δουλεύει και η Pelles C. Έκανα καμία 10 προγραμματάκια, τα δοκίμασα τρέχουνε όλα άψογα μου λύθηκαν τα χέρια. Παραθέτω ένα συμπληρωματικό site μήπως χρειαστεί για κανέναν, εξηγεί λίγο το στήσιμο του code blocks Εμένα πάντως δεν μου χρειάστηκε, απλά αυτό που έκανα λάθος ήτανε στη διαδικασία δημιουργίας project, ακολουθούσα λάθος διαδρομή. Η εγκατάσταση ήτανε σωστή δηλαδή.
Padaz Bloody Δημοσ. 18 Μαρτίου 2012 Μέλος Δημοσ. 18 Μαρτίου 2012 (επεξεργασμένο) Το παρακάτω πρόγραμμα στον compiler Pelles C μου τρέχει άψογα, αντιθέτως στο IDE codeblocks με GNU GCC compiler μου κρεμάει, γιατί? Μήπως το codeblocks δεν αναγνωρίζει κάποια εντολή. Δοκιμάστε το και εσείς... Ορίστε ο κώδικας για Pelles C: > /**************************************************************************** * * * File : main.c * * * * Purpose : Console mode (command line) program. * * * * History : Date Reason * * 00/00/00 Created * * * ****************************************************************************/ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> /**************************************************************************** * * * Function: main * * * * Purpose : Πληκτρολογούμε μία ημερομηνία της μορφής: 25 Feb 2012 και το πρόγραμμα την τυπώνει με τη εξής μορφή 25/2/12 * * * * History : Date Reason * * 00/00/00 Created * * * ****************************************************************************/ int main(int argc, char *argv[]) { char months[] [4]={" \0", "Jan\0", "Feb\0", "Mar\0", "Apr\0", "May\0", "Jun\0", "Jul\0", "Aug\0", "Sep\0", "Oct\0", "Nov\0", "Dec\0" }; int hm,etos,neo_etos,i=0; char mhn[4]; printf("Give a date with this format 25 Feb 2012: "); scanf("%d %s %d",&hm,mhn,&etos); while(strcmp(mhn,months[i])) i++; neo_etos=etos%100; printf("The new date format is %d/%d/%d\n",hm,i,neo_etos); getchar(); return 0; } Και ορίστε ο κώδικας για το IDE codeblocks με GNU GCC compiler: > #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> /*Πληκτρολογούμε μία ημερομηνία της μορφής: 25 Feb 2012 και το πρόγραμμα την τυπώνει με τη εξής μορφή 25/2/12*/ int main() { char months[] [4]={" \0", "Jan\0", "Feb\0", "Mar\0", "Apr\0", "May\0", "Jun\0", "Jul\0", "Aug\0", "Sep\0", "Oct\0", "Nov\0", "Dec\0" }; int hm,etos,neo_etos,i=0; char mhn[4]; printf("Give a date with this format 25 Feb 2012: "); scanf("%d %s %d",&hm,mhn,&etos); while(strcmp(mhn,months[i])) i++; neo_etos=etos%100; printf("The new date format is %d/%d/%d\n",hm,i,neo_etos); getchar(); return 0; } Επεξ/σία 21 Μαρτίου 2012 από Padaz Bloody
migf1 Δημοσ. 18 Μαρτίου 2012 Δημοσ. 18 Μαρτίου 2012 Χρησιμοποιείς το... >char mhn[3]; uninitialized στην strcmp(). Αν το αρχικοποιήσεις θα σου τρέχει και στον gcc (η Pelles-C, ως extension, αρχικοποιεί σε μηδενικές τιμές τις uninitialized μεταβλητές) ΥΓ. Βάζε τους κώδικες σε [code ] tags όταν τους ποστάρεις στο φόρουμ. EDIT: Άκυρο, τώρα είδα πως το ζητάς στην scanf(). Βάλε τον κώδικα σε [code ] tags γιατί έστι δεν κάθομαι να τον διαβάσω. Επίσης, πες μας σε ποια γραμμή κρασάρει. EDIT 2: Μάλλον φταίει πως το mhn το ορίζεις με 3 χαρακτήρες ενώ τα mon με 4 (σε συνδυασμό με αυτό που σου γράφω παραπάνω για την Pelles C).
marios_geo Δημοσ. 19 Μαρτίου 2012 Δημοσ. 19 Μαρτίου 2012 Ο intel c++ δεν κάνει; Νομίζω είναι και δωρεάν για μη εμπορικές χρήσεις.
V.I.Smirnov Δημοσ. 19 Μαρτίου 2012 Δημοσ. 19 Μαρτίου 2012 Ο intel c++ δεν κάνει; Νομίζω είναι και δωρεάν για μη εμπορικές χρήσεις. Ο intel C++ (η έκδοση v12.1 που περιέχεται στο parallel studio ΧΕ 2011) είναι ΚΟΡΥΦΗ και αφήνει τη σκόνη του σε όλους. Πέραν των επιδόσεων του ίδιου του compiler (βελτιστοποιημένος κώδικας κλπ), τα συνοδευτικά παρελκόμενα του XE 2011 είναι εξαιρετικά εργαλεία και απογειώνουν όποιον κάνει σοβαρή δουλειά. http://software.intel.com/en-us/articles/intel-parallel-studio-xe/ Δεν νομίζω να είναι δωρεάν, δυστυχώς... -
migf1 Δημοσ. 19 Μαρτίου 2012 Δημοσ. 19 Μαρτίου 2012 Νομίζω επίσης πως προϋποθέτει το SDK της Microsoft (τσεκάρετέ το γιατί δεν είμαι σίγουρος).
V.I.Smirnov Δημοσ. 19 Μαρτίου 2012 Δημοσ. 19 Μαρτίου 2012 Μπορεί να ενσωματωθεί στο visual studio της MS αλλά δεν το χρειάζεται. Αν δεν υπάρχει, εγκαθίσταται αυτόματα ότι χρειάζεται από το IDE. Αν εσωματωθεί στο VS, υπάρχει επίσης η δυνατότητα να εναλλάσσονται εύκολα η intel C/C++ και η ΜS C/C++. Μικτά projects με την fortran επίσης επιτρέπονται για να χρησιμοποιούνται τυχόν βιβλιοθήκες ή ότι άλλο. Το περιβάλλον είναι συνολικά το πιο λειτουργικό, πλήρες και ισχυρό που έχω δει σε ότι αφορά τα εργαλεία και τις επιδόσεις. Δυστυχώς δεν είναι δωρεάν... -
Padaz Bloody Δημοσ. 21 Μαρτίου 2012 Μέλος Δημοσ. 21 Μαρτίου 2012 @migf1 όσο μπορούσα το διόρθωσα το πρόγραμμα, sorry και πάλι δικό μου λάθος που τα πόσταρα έτσι χύμα, δεν ήξερα ότι υπάρχει και το code tag. Καλύτερα δεν μπορούσα να το φτιάξω, όποτε προσπαθούσα να το ισιώσω λίγο, ειδικά στην αρχικοποίηση του πίνακα months μου τα εμφάνιζε στο post εντελώς στραβά... Ίσως ο text editor του insomnia να μην είναι και ο καλύτερος τρόπος για να γράφουμε προγράμματα, τα παιδιά (administrators - moderators) κάνουν ότι μπορούν για να υπάρχουνε όλες οι δυνατότητες και όλες οι ευκολίες ενσωματωμένες σε αυτό το site, μην τα θέλουμε και όλα δικά μας. Στο θέμα μας τώρα: Εντάξει το βρήκα τελικά, ήταν αυτό που είπες να δηλώσω 4 χαρακτήρες τον mhn. Τώρα μου τρέχει κανονικά.
migf1 Δημοσ. 21 Μαρτίου 2012 Δημοσ. 21 Μαρτίου 2012 Άλλαξες τον ορισμό του mhn[] από 3 χαρακτήρες σε 4, που σου είπα; ΥΓ. Αν τον άλλαξες και συνεχίζει να κρασάρει, θα το κοιτάξω λίγο αργότερα γιατί τώρα δεν μπορώ. EDIT: Μόλις το τσέκαρα με το mhn[] ορισμένο για 4 χαρακτήρες και δουλεύει μια χαρά. Απορία: Αφού τις "γράφεις" τις απαντήσεις μας, γιατί συνεχίζει και μας ρωτάς... το συγκεκριμένο στο είχα ξαναπεί εδώ: http://www.insomnia....ost__p__4637011 Για τα code-tags στο είχα ξαναπεί εδώ: http://www.insomnia....ost__p__4513603 ΥΓ. Στα code-tags κάνε copy & paste τον κώδικα από το IDE σου (για να σου κρατάει την στοίχιση όπως την έχεις εκεί... ή περίπου έτσι τέλος πάντων).
Padaz Bloody Δημοσ. 21 Μαρτίου 2012 Μέλος Δημοσ. 21 Μαρτίου 2012 Ναι, το άλλαξα όλα οκ, διόρθωσα και το post μου. Έγινε θα τα γράφω σε code tags για να είναι και καθαρογραμμένα.
migf1 Δημοσ. 21 Μαρτίου 2012 Δημοσ. 21 Μαρτίου 2012 Ναι, το άλλαξα όλα οκ, διόρθωσα και το post μου. Οκ! Το γιατί σου κράσαρε με 3 το έχεις καταλάβει;
imitheos Δημοσ. 21 Μαρτίου 2012 Δημοσ. 21 Μαρτίου 2012 Στην περίπτωση του codeblocks κάνω build και run F9 Δίνω πχ 22 Jun 1999 και κρασάρει, μου βγάζει το μύνημα ότι το στοιχείο askisi.exe - έτσι έχω ονομάσει την άσκησή μου - σταμάτησε να λειτουργεί. Να πω ότι δεν μου βγάζει λάθη και προειδοποιήσεις ούτε για codeblock gnu compiler ούτε για την Pelles C. Στην Pelles C εξάλλου μου τρέχει κανονικότατα και μου εμφανίζει στην οθόνη σωστά το αποτέλεσμα. Ίσως να έχει κάποια ιδιομορφία ο gnu compiler, τι να πω. Τέσπα δεν είναι και τίποτα το σοβαρό. Άλλαξες τον ορισμό του mhn[] από 3 χαρακτήρες σε 4, που σου είπα; ΥΓ. Αν τον άλλαξες και συνεχίζει να κρασάρει, θα το κοιτάξω λίγο αργότερα γιατί τώρα δεν μπορώ. Καταρχήν καλό είναι να ενεργοποιήσεις τα διαγνωστικά μηνύματα του compiler (-Wall για gcc) αν δεν το έχεις κάνει ήδη ώστε να βλέπεις χρήσιμα μηνύματα. Μετά δες αυτό που είπε ο migf1 για τον ορισμό του mhn. > #include <conio.h> Το conio ήταν ένα header που παρείχε η turboc (ίσως να παρέχεται ακόμη σε windows. δεν το ξέρω) αλλά δεν υπάρχει στο πρότυπο για αυτό αν δεν είσαι σίγουρος ότι το χρειάζεσαι, μην το βάζεις. > int main() Αν μιλάμε για c++ είσαι οκ αλλά αν μιλάμε για c όπως αναφέρει ο τίτλος του νήματος, τότε άλλαξε το σε int main(void). > char months[] [4]={" \0", "Jan\0", Με τα διπλά εισαγωγικά δηλώνουμε αυτό που μπακάλικα ονομάζουμε "string" και το οποίο στην C τελειώνει πάντα με 0. Έτσι το "Jan\0" έχει 5 χαρακτήρες (3 για το Jan, 1 το μηδενικό που έχεις βάλει και 1 για το μηδενικό που μπαίνει αυτόματα). Έτσι δεν χρειάζεται να βάζεις χειροκίνητα το \0 (επίσης ο C++ compiler που είναι πιο αυστηρός δεν θα το κάνει compile λέγοντας ότι προσπαθείς να θέσεις 5 χαρακτήρες σε χώρο 4άρων). > char mhn[3]; Εδώ είναι αυτό που σου είπε ο migf1. Για να έχεις αρκετό χώρο για το μήνα + το μηδενικό, θέλεις τουλάχιστον 4 χαρακτήρες (παραβλέποντας το γεγονός ότι η scanf θα σε αφήσει να δώσεις και παραπάνω).
Padaz Bloody Δημοσ. 21 Μαρτίου 2012 Μέλος Δημοσ. 21 Μαρτίου 2012 @imitheos το κατάλαβα τελικά αυτό με την ιδιομορφία των string. Η συγκεκριμένη άσκηση δεν κάνει τίποτα το ιδιαίτερο, τυπώνει την ημερομηνία με πιο σύντομο format. Εντάξει, δεν είναι και από τις ασκήσεις που θα μου χρησιμεύσουνε άμεσα. Είμαι σε φάση που δοκιμάζω ότι πρόγραμματα έχω και τα τρέχω για να κάνω ένα μικρό αρχείο - συλλογή. Στο θέμα μας λοιπόν: Στην εντολή neo_etos = etos % 100; Τι παίζει? Διαιρεί με 100 και τυπώνει τα 2 τελευταία δεκαδικά ψηφία? Αφού δεν έχουμε δηλώσει το neo_etos σαν integer? Εδώ λίγο το έχασα... @migf1 μπορείς λίγο να βοηθήσεις?
Crizzt Δημοσ. 21 Μαρτίου 2012 Δημοσ. 21 Μαρτίου 2012 Το α % β θα σου δωσει το υπολοιπο της διαιρεσης α / β. Στη περιπτωση σου ουσιαστικα αγνοει τα 2 πρωτα ψηφια του ετους. Ξαναδιαβασε το κεφαλαιο με τους Operators
migf1 Δημοσ. 21 Μαρτίου 2012 Δημοσ. 21 Μαρτίου 2012 Κατατοπιστικότατοι οι φίλοι imitheos & crizzt Παραθέτω μια bullet-proof εκδοχή της άσκησης με τους μήνες, η οποία (hopefully) δεν κρασάρει όσο και να τη ζορίσει στην είσοδο ο χρήσης (σε αντίθεση με αυτή που παρέθεσες, η οποία π.χ. αν της γράψεις μήνα που δεν υπάρχει στο πίνακα σκάει). Ως bonus, δέχεται τη σύντμηση του μήνα case-insensitively καθώς επίσης και σε 6 διαφορετικές γλώσσες > #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> /*Πληκτρολογούμε μία ημερομηνία της μορφής: 25 Feb 2012 και το πρόγραμμα την τυπώνει με τη εξής μορφή 25/2/12*/ #define MAXINPUT (255+1) #define NMONTHS 12 /* ------------------------------------------------------- */ char *s_toupper( char *s ) { if ( !s ) return NULL; for (char *cp=s; *cp = toupper((int)(*cp)); cp++ ) ; return s; } /* ------------------------------------------------------- */ int main( void ) { char *months[] = { /*en*/ "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV","DEC", /*el*/ "ΙΑΝ", "ΦΕΒ", "ΜΑΡ", "ΑΠΡ", "ΜΑΙ", "ΙΟΥΝ","ΙΟΥΛ", "ΑΥΓ", "ΣΕΠ", "ΟΚΤ","ΝΟΕ","ΔΕΚ", /*fr*/ "JAN", "FEV", "MAR", "AVR", "MAI", "JUIN","JUIL", "AOU", "SEP", "OCT","NOV","DEC", /*de*/ "JAN", "FEB", "MAR", "APR", "MAI", "JUN", "JUL", "AUG", "SEP", "OKT", "NOV","DEZ", /*es*/ "ENE", "FEB", "MAR", "ABR", "MAY", "JUN", "JUL", "AGO", "SEP", "OCT", "NOV","DIC", /*it*/ "GEN", "FEB", "MAR", "ABR", "MAG", "JIU", "LUG", "AGO", "SET", "OTT", "NOV","DIC", NULL }; char input[ MAXINPUT ] = {'\0'}; char mstr[ MAXINPUT ] = {'\0'}; /* inputted month (as string) */ int d, y = 0; char **sp = NULL; /* string pointer to parse *months[]*/ printf("Give a date (e.g: 25 Feb 2012): "); if ( !fgets(input, MAXINPUT, stdin) /* handles line bufering*/ || 3 != sscanf(input, "%d %s %d", &d, mstr, &y) /* handles overflows */ || !s_toupper(mstr) ) /* handles dag-pointer */ goto exit_fatal; for ( sp = months; *sp; sp++ ) if ( !strcmp(*sp, mstr) ) break; if ( !*sp ) printf( "Unknown month: %s!\n", mstr ); else { y %= 100; printf( "Converted date: %02d/%02d/%02d\n", d, 1 + (int)((sp - months) % NMONTHS), y ); } system("pause"); /* windows only */ exit( EXIT_SUCCESS ); exit_fatal: puts("*** fatal internal error, terminating program..."); system("pause"); /* windows only */ exit( EXIT_FAILURE ); } ΥΓ. Σε παλαιότερο ποστ νομίζω έχεις αναφέρει πως έχεις τελειώσει κάποια σχολή στην επιστήμη της πληροφορικής, κι έχεις έρθει σε επαφή με διάφορες γλώσσες. Οπότε λογικά δεν θα έχεις πρόβλημα να παρακολουθήσεις τον κώδικα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα