forum.math.uoa.gr

Forum του Τμήματος Μαθηματικών
Ημερομηνία 24 Σεπ 2017, 12:36

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]




Δημιουργία νέου θέματος Απάντηση στο θέμα  [ 26 δημοσιεύσεις ]  Μετάβαση στην σελίδα Προηγούμενη  1, 2
Συγγραφέας Μήνυμα
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 06 Μαρ 2011, 16:41 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφη: 07 Μαρ 2007, 17:47
Δημοσ.: 392
Τοποθεσια: Gothenburg, Sweden
Αυτό εξαρτάται από τον τύπο μεταβλητής που χρησιμοποιείς καθώς και τη γλώσσα. Π.χ. με unsigned int θα μπορέσεις να πετύχεις κάτι καλύτερο. (ναι έχει και σχέση με αριθμητική ανάλυση, εκεί βλέπεις τους αριθμούς μονής/διπλής ακρίβειας κλπ). Ωστόσο σε ποιο καινούριες γλώσσες όπως η Haskell μπορείς να διαχειριστείς "άπειρες" δομές δεδομένων (λόγω του σχεδιασμού της γλώσσας) και να έχεις και "άπειρη" ακρίβεια. Αν όντως σε ενδιαφέρει πες μου να το γράψω πιο αναλυτικά :P

_________________
]


Δεν τελειώνει η ζωή σε μία άρνηση,
κ αν έχεις άντερα την άρνηση ακολούθα...


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 06 Μαρ 2011, 17:49 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφη: 25 Σεπ 2007, 17:31
Δημοσ.: 4228
Ευχαριστώ Nikolo για την απάντηση.
Το κανα unsigned δεν άλλαξε τίποτε πάλι μετά το 12! βγάζει λάθος
λογικό αν σκεφτείς ότι 13!=6 227 020 800 και απ'ότι φαίνεται φτάνει μέχρι το 4,294,967,295
από http://en.wikipedia.org/wiki/Integer_%2 ... science%29

Το unsigned int έτσι δεν είναι %u??

Άλλη ερώτηση τώρα
Για να μπορώ να τρέξω τα exe που βγάινουν χωρίς να χρειάζεται να τα ανοίξω πρώτα απ'το cmd-->C:\fakelos\klp στο τερματικό πρέπει να προσθέσω τίποτα στον κώδικα

γιατί άμα πάω να τα τρέξω από το εικονίδιό τους με το που πατάω το πρώτο enter κάνει μάλλον γρήγορα τις πράξεις και κλίνει

_________________
https://www.youtube.com/watch?v=wbZuBDJVHEI


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 06 Μαρ 2011, 19:58 
Χωρίς σύνδεση
Regular Forumer

Εγγραφη: 12 Μαρ 2006, 23:50
Δημοσ.: 442
Τοποθεσια: Άγιος Στέφανος
Φίλε μου πρέπει να ξέρεις ότι στα Windows που είναι NT based (όπως Windows NT, 2000, XP, Vista, 7) το "DOS" είναι ένα πρόγραμμα όπως όλα τα άλλα, σε σχέση με τα Windows 95,98,ME που ήταν βασισμένα σε αυτό.

Έτσι καθώς το πρόγραμμα σου απλά τυπώνει κάτι εκτελείται το cmd και το πρόγραμμα σου οπότε μόλις τελειώσει η εκτέλεση του exe σου, κλέινει και το cmd καθώς δε χρειάζεται πλέον.

Ο τρόπος να το κρατήσεις ανοικτό είναι, όπως ανέφερες σωστά, να το ανοίξεις ΠΡΙΝ τρέξεις το exe σου ή επίσης μπορείς να το κάνεις με κώδικα C, π.χ. να τελειώνει το πρόγραμμα σου αφού πατήσεις ENTER, οπότε μετά το ENTER θα κλείσει το cmd αλλά θα μείνει ανοιχτό μέχρι να το πατήσεις!

Στέλιος

_________________
Maths are so beautiful as a statue....


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 07 Μαρ 2011, 17:49 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφη: 25 Σεπ 2007, 17:31
Δημοσ.: 4228
Σωστό αυτό που λες,βάζω μια εντολή στο τέλος για έξοδο με enter ή κάτι τέτοιο.
Ευχαριστώ για την απάντηση.

_________________
https://www.youtube.com/watch?v=wbZuBDJVHEI


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 07 Μαρ 2011, 20:13 
Χωρίς σύνδεση
Regular Forumer

Εγγραφη: 21 Οκτ 2008, 19:57
Δημοσ.: 228
Η εντολή c = getch(); κάνει αυτή τη δουλειά, αρκεί να έχεις δηλώσει char c; ή και σκέτο getch(); . Η getch() δηλώνεται στο conio.h.

Μπορείς επίσης να δηλώσεις το proxeiro και το paragontiko σαν unsigned long long int (είναι δυνατότητα της C99 και υποστηρίζεται από τους gcc compilers και στο πρότυπο C90). Αυτό θα σε πάει μέχρι το 20!. Σ' αυτή την περίπτωση, εκτυπώνεις το paragontiko με την printf, με την σημαία %I64u.

Υπάρχουν κάποιες βιβλιοθήκες όπως η gmp, που υποστηρίζουν 'άπειρα' ψηφία.

_________________
"Αν οι αρχιτέκτονες κατασκεύαζαν τα κτίρια όπως οι προγραμματιστές προγραμματίζουν τους υπολογιστές, ο πρώτος τρυποκάρυδος που θα εμφανιζόταν θα κατέστρεφε τον πολιτισμό μας."
Δεύτερος νόμος του Gerald Weinberg.


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 08 Μαρ 2011, 11:57 
Χωρίς σύνδεση
Regular Forumer

Εγγραφη: 12 Μαρ 2006, 23:50
Δημοσ.: 442
Τοποθεσια: Άγιος Στέφανος
Είναι καλύτερο να χρησιμοποιήσεις και γενικά να χρησιμοποιείς την getchar() αντι της getche() επειδή η πρώτη είναι στο header stdio.h και όχι στο conio.h Συμφωνώ ότι η getche() είναι λίγο καλύτερη αλλά χρησιμοποιεί το conio.h της Borland που δεν ανήκει στην ANSI C.

Όσον αφορα για το παραγοντικό εγώ το δήλωσα ως float (μπορείς να δοκιμάσεις και double) και δουλεύει σωστά απλά στο τέλος βγάζει πολλά 0 όταν τυπώνεις με printf λόγω του %f. Παρόλα αυτά μπορείς να κάνεις κάποια κόλπα και να τα εξαφανίσεις.

ΠΡΟΣΟΧΗ: Μετά από έναν αριθμό, αν θυμάμαι καλά μετά το 25! τα αποτελέσματα που τυπώνονται στην οθόνη είναι χαζά και από ένα σημείο και μετά τυπώνεται Inf, προφανώς επειδή ξεπερνάς τα όρια του float. Οπότε μπορείς με if να ζητάς από το χρήστη να περνάει ακεραίους <=25 από το πληκτρολόγιο


Στέλιος

_________________
Maths are so beautiful as a statue....


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 08 Μαρ 2011, 21:09 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφη: 25 Σεπ 2007, 17:31
Δημοσ.: 4228
Ευχαριτώ delphi για την απάντηση
Το κανα ετσι τελικά,μέχρι 20! φαίνεται αντέχει
Spoiler:
Κώδικας:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
unsigned long long int paragontiko(int n);
int main()
{
    int n;
    unsigned long long int proxeiro;
    char c;
printf("Evresi paragontikou\n");
printf("Dose mou to n\n");
scanf("%d",&n);
if(n==0){
printf("n!=0");}
else
{
     proxeiro=paragontiko(n);
     printf("n!=%I64u",proxeiro);
}
printf("\nPata enter gia exodo");
c=getch();
}
unsigned long long int paragontiko(int n)
{
    int i;
    unsigned long long int sinolo;
    sinolo=1;
    for(i=1;i<n+1;i++)
    {
    sinolo*=i;
    }
    return sinolo;
}

με το float δε δοκίμασα ακόμα,πόσο πάει ,θα το κάνω μετά να δω

_________________
https://www.youtube.com/watch?v=wbZuBDJVHEI


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 02 Μάιος 2011, 14:10 
Χωρίς σύνδεση
Regular Forumer

Εγγραφη: 12 Μαρ 2006, 23:50
Δημοσ.: 442
Τοποθεσια: Άγιος Στέφανος
Κώδικας:

#include <stdio.h>

int paragontiko(int n);
int factrec(int);

int main()
{
    int n;

    printf("Evresi paragontikou\n");
    printf("Dose mou to n: ");
    scanf("%d",&n);

    printf("\nParagontiko apo thn paragontiko: %d!=%d\n",n,paragontiko(n));
    printf("\nParagontiko apo thn factrec: %d! = %d\n",n,factrec(n));

}

int factrec(int n)
{
    if (n <=1)
    {
        return 1;
    }
    else
    {
        return n*factrec(n-1);
    }
}

int paragontiko(int n)
{
    int i,sinolo;

    sinolo=1;

    for(i=1; i<=n; i++)
    {
        sinolo*=i;
    }

    return sinolo;
}



Άλλαξα τον κώδικά σου λίγο. Μελέτησε αυτόν. Πρόσθεσα και την αναδρομική συνάρτηση του παραγοντικού. Ωραία άσκηση θα είναι να βγάλεις το αποτέλεσμα από int σε double. Πρόσεξε με αυτόν τον τρόπο για μεγάλα νούμερα βγάζει Inf (άπειρο). Πρόσθεσε μια συνθήκη if να τερματίζει σε τέοια περίπτωση!!

Στέλιος

_________________
Maths are so beautiful as a statue....


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 02 Μάιος 2011, 16:51 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφη: 25 Σεπ 2007, 17:31
Δημοσ.: 4228
Θα το κοιτάξω,ευχαριστώ :D

_________________
https://www.youtube.com/watch?v=wbZuBDJVHEI


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 03 Μάιος 2011, 06:28 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφη: 01 Μαρ 2006, 19:18
Δημοσ.: 3078
Τοποθεσια: Από δω κι από κεί.
Για να έχεις παύση όταν τελειώνει το πρόγραμμα βάλε στις βιβλιοθήκες σου την stdlib.h και πρόσθεσε στην τελευταία γραμμή της main το
Κώδικας:
system ("pause");


Για το άλλο είχα βρει παλιά ένα mambo jumbo αλλά δε θυμάμαι τώρα τί. Με κάθε επιφύλαξη ίσως να λυθεί αν δηλώσεις τις μεταβλητές σου σαν string αλλά δε βάζω και στοίχημα, έχω πάρα πολύ καιρό να γράψω σε C.

_________________
Γι' αυτό σου λέω.
Την άλλη φορά που θα μας ρίξουνε
να μην την κοπανήσουμε. Να ζυγιαστούμε.
Μην ξεπουλήσουμε φτηνά το τομάρι μας ρε.
Μη. Βρέχει. Δόσμου τσιγάρο.


Κορυφή
 Προφίλ  
 
 Θέμα δημοσίευσης: Re: Boήθεια στην C
ΔημοσίευσηΔημοσιεύτηκε: 03 Μάιος 2011, 21:30 
Χωρίς σύνδεση
Regular Forumer
Άβαταρ μέλους

Εγγραφη: 25 Σεπ 2007, 17:31
Δημοσ.: 4228
Ευχαριστώ και για αυτή τη λύση
η αλήθεια είναι έχω λίγο καιρό να ασχοληθώ με το συγκεκριμένο θέμα αλλά όταν το ξαναπιάσω θα τα δοκιμάσω τα άνωθεν :D

_________________
https://www.youtube.com/watch?v=wbZuBDJVHEI


Κορυφή
 Προφίλ  
 
Τελευταίες δημοσιεύσεις:  Ταξινόμηση κατά  
Δημιουργία νέου θέματος Απάντηση στο θέμα  [ 26 δημοσιεύσεις ]  Μετάβαση στην σελίδα Προηγούμενη  1, 2

Όλοι οι χρόνοι είναι UTC + 2 ώρες [ DST ]


Μελη σε συνδεση

Μέλη σε αυτή την Δ. Συζήτηση : Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης


Δεν μπορείτε να δημοσιεύετε νέα θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να απαντάτε σε θέματα σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να επεξεργάζεστε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση
Δεν μπορείτε να διαγράφετε τις δημοσιεύσεις σας σε αυτή τη Δ. Συζήτηση

Αναζήτηση για:
Μετάβαση σε:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group