Jump to content

Βοηθεια σε προγραμμα C


NetSurfer_g7
 Κοινοποίηση

Recommended Posts

Την Τεταρτη ο καθηγητης του μαθηματος"Εισαγωγη στον προγραμματισμο"μας εβαλε την πρωτη μας εργασια.Εδω υπαρχει η εκφωνηση.Αυτο που δενεχω καταλαβει καλα ειναι πως μπορουμε να ελενξουμε αμα ενας αριθμος ειναι πρωτος.Για το αμα ειναι "ευτυχισμενος" φανταζομαι οτι θα διαχωριζουμε τα ψηφια(με ακεραια διαιρεση) θα βρισκουμε το αθρισμα των τετραγωνων τους και θα επαναλαβουμε την διαδικασια μεχρι να καταληξουμε σε 1 ή στον αρχικο αριθμο.Επισεις δεν ξερω καλα πως χρησημοποιειται η συναρτηση παραγωγης τυχαιων αριθμων rand.Υπαρχει καποιος που να γνωριζει καλα την C και να εχει λυσει παρομοιο προβλημα ή εστω καποια ιστοσελιδα που να εχει ετοιμο προγραμμα ελενχου πρωτων αριθμων?
Link to comment
Share on other sites

Την Τεταρτη ο καθηγητης του μαθηματος"Εισαγωγη στον προγραμματισμο"μας εβαλε την πρωτη μας εργασια.Εδω υπαρχει η εκφωνηση.Αυτο που δενεχω καταλαβει καλα ειναι πως μπορουμε να ελενξουμε αμα ενας αριθμος ειναι πρωτος.Για το αμα ειναι "ευτυχισμενος" φανταζομαι οτι θα διαχωριζουμε τα ψηφια(με ακεραια διαιρεση) θα βρισκουμε το αθρισμα των τετραγωνων τους και θα επαναλαβουμε την διαδικασια μεχρι να καταληξουμε σε 1 ή στον αρχικο αριθμο.Επισεις δεν ξερω καλα πως χρησημοποιειται η συναρτηση παραγωγης τυχαιων αριθμων rand.Υπαρχει καποιος που να γνωριζει καλα την C και να εχει λυσει παρομοιο προβλημα ή εστω καποια ιστοσελιδα που να εχει ετοιμο προγραμμα ελενχου πρωτων αριθμων?

 

n=0;

for (i=1; i<=number; i++)

{

if (number/i==0)

n+=1;

}

if (n==2)

printf ("%d is a prime number",number);

 

 

Ο number ειναι ενας τυχαιος ακεραιος αριθμος.Ετσι νομιζω οτι ειναι ο αλγοριθμος που βρισκει τους πρωτους αριθμους αλλα επειδη και εγω ειμαι πρωτοετης ας πει και καποιος πιο εμπειρος.

Edited by mitsos1

Android is simple, it just takes a genius to understand its simplicity.

Samsung Galaxy S4 die hard !!

Samsung Galaxy S7

Link to comment
Share on other sites

n=0;

for (i=1; i<=number; i++)

{

if (number/i==0)

n+=1;

}

if (n==2)

printf ("%d is a prime number",number);

 

 

Ο number ειναι ενας τυχαιος ακεραιος αριθμος.Ετσι νομιζω οτι ειναι ο αλγοριθμος που βρισκει τους πρωτους αριθμους αλλα επειδη και εγω ειμαι πρωτοετης ας πει και καποιος πιο εμπειρος.

 

Ευχαριστω.Νομιζω ομως οτι αντι για / στην διαιρεση πρεπει να μπει % αφου θελουμε να βρουμε αμα το ακεραιο υπολοιπο ισουται με 0.Αμα καποιος ξερει πως ακριβως χρησημοποιειται το rand ας το γραψει.

Link to comment
Share on other sites

Ευχαριστω.Νομιζω ομως οτι αντι για / στην διαιρεση πρεπει να μπει % αφου θελουμε να βρουμε αμα το ακεραιο υπολοιπο ισουται με 0.Αμα καποιος ξερει πως ακριβως χρησημοποιειται το rand ας το γραψει.

 

Ναι εισαι σωστος για το % και να φανταστεις οτι αυτο πηγα και πειραξα στην τροποποιηση :lol:

Android is simple, it just takes a genius to understand its simplicity.

Samsung Galaxy S4 die hard !!

Samsung Galaxy S7

Link to comment
Share on other sites

σε ποια ταξη αυτα?

 

Εννοείς πότε τα κάνουμε αυτά;Αν εννοείς αυτό τότε εμείς κάνουμε c στο πρώτο εξάμηνο.Αυτό μπορεί να διαφέρει ανάλογα το τμήμα για παράδειγμα αλλού μπορεί να μην κάνουν καθόλου ή να κάνουν αργότερα.

Android is simple, it just takes a genius to understand its simplicity.

Samsung Galaxy S4 die hard !!

Samsung Galaxy S7

Link to comment
Share on other sites

σε ποια ταξη αυτα?

Εγω ειμαι στο 1ο ετος στο τμημα Πληροφορικης και τηλεπικοινωνιων του πανεπιστημιου Αθηνας.Τωρα αρχισαμε να μαθαινουμε C στο μαθημα "Εισαγωγη στον προγραμματισμο" και το προγραμμα που αναφερω παραπανω ειναι η πρωτη μας εργασια.Μπορω να πω οτι ειναι λιγο περιπλοκη για πρωτη εργασια.Θα μπορουσε να μας βαλει κατι πιο απλο για αρχη αφου ειμαστε ακομα αρχαριοι στην C.

Link to comment
Share on other sites

Πρώτοι αριθμοί είναι οι αριθμοί που διαιρούνται μόνο με τη μονάδα και τον εαυτό τους πχ το 13. Για να βρεις αν ένας αριθμός Ν είναι πρώτος τον διαιρείς με όλους τους αριθμούς που είναι μικρότεροι του Ν κι αν έχει διαιρέτη τότε δεν είναι πρώτος. Προφανώς αυτό το κάνεις με το mod.

 

H rand είναι συνάρτηση που χρησιμοποιείται κυρίως για την παραγωγή τυχαίων αριθμών.

 

Για να την χρησιμοποιήσεις την αρχικοποιείς, srand(time(NULL)); και στη συνέχεια την χρησιμοποιείς rand() % 11 (το mod με το 11 είναι γιατί ήθελα αριθμούς σε μια συγκεκριμένη περιοχή.)

 

Στείλε μου ένα mail να σου στείλω μερικούς κώδικες για μελέτη (όχι για αντιγραφή γιατί έτσι δεν θα μάθεις ποτέ).

 

Υ.Γ.: Αυτά που σας έβαλε σαν πρώτη άσκηση είναι πολύ απλά. Που να δεις παρακάτω τι γίνεται!

http://www.myphone.gr/gallery/data/500/ZXRFlame.jpg
Link to comment
Share on other sites

μπορείς για λόγους βελτιστοποίσης-ταχύτητας να διαιρείς μέχρι τον ακέραιο που αντιστοιχεί στη ρίζα του Ν (sqrt(N)) αντί για N-1.. η απόδειξη είναι απλή και αφήνεται ως άσκηση στον αναγνώστη... αν θέλεις βοήθεια όμως το εξηγώ...
μέτρον άριστον
Link to comment
Share on other sites

μπορείς για λόγους βελτιστοποίσης-ταχύτητας να διαιρείς μέχρι τον ακέραιο που αντιστοιχεί στη ρίζα του Ν (sqrt(N)) αντί για N-1.. η απόδειξη είναι απλή και αφήνεται ως άσκηση στον αναγνώστη... αν θέλεις βοήθεια όμως το εξηγώ...

 

Δεν το καταλαβα.

Android is simple, it just takes a genius to understand its simplicity.

Samsung Galaxy S4 die hard !!

Samsung Galaxy S7

Link to comment
Share on other sites

greeker δεν ξέρω αν επιτρέπει ο καθηγητής στους πρωτοετείς τη χρήση αυτών των συναρτήσεων . Το σύνηθες είναι να μην το επιτρέπει γιατί ο υπολογισμός της ρίζας μπαίνει σαν άσκηση συνήθως...
http://www.myphone.gr/gallery/data/500/ZXRFlame.jpg
Link to comment
Share on other sites

ορθόν... παρόλα αυτά αν θέλεις, έστω και επί χάρτου, mitsou1 δοκίμασε να υποθέσεις ότι έχεις σαρώσει του ακεραίους μέχρι το ρίζα(Ν)-1 και δεν έχεις βρει κανέναν που να διαιρεί ακριβώς τον Ν... έχει νόημα να ψάξεις παραπάνω;

 

σαφώς και όχι, διότι τότε χρειάζεσαι 2 ακεραίους μεγαλύτερους από ρίζα(Ν)-1 που το γινόμενο δίνει Ν... αδύνατο όμως διότι τότε το γινόμενο θα είναι >Ν ;)

μέτρον άριστον
Link to comment
Share on other sites

  • 2 weeks later...
Ευχαριστω πολυ.Την τελειωσα την ασκηση και μου τρεχει κανονικα.Ομως πριν προλαβουμε να χαλαρωσουμε λιγο μας εβαλε καπακι την 2η ασκηση.Εδω βρισκεται η εκφωνηση.Φαινεται πιο δυσκολη απο την 1η ασκηση.Δεν εχω καταλαβει πως μπορει το προγραμμα να διαβαζει ολοκληρη την αριθμητικη παρασταση σε 1 γραμμη και να εμφανιζει απο κατω το αποτελεσμα.Πρεπει να διαβαστει ολη σε 1 εντολη και μεταβλητη ή καθε χαρακτηρας σε ξεχωριστη?Υπαρχει κανεις που να ξερει πως γινεται η να εχει κανει κατι παρομοιο?Αμα υπαρχει ας δωσει τα φωτα του.
Link to comment
Share on other sites

Θα προσπαθουσα να παρω ολη την γραμμη με την fgets (θα την αποθηκευσει σε ενα πινακα χαρακτηρων) με το τελος της γραμμης που εδωσε ο χρηστης να ειναι το /n. Στην συνεχεια διαβαζοντας ενα ενα τους αριθμους μετετρεψε τους σε ακεραιους με το atoi (εχωντας τους αποθηκευμενους σε ενα αλλο πινακα char). Τα συν και τα πλην μπορεις να τα συμβολιζεις με 0 και 1 και αναλογα με ενα if να κανεις την πραξη μεταξυ των αριθμων. Edited by Techguru
Link to comment
Share on other sites

Δεν ξέρω αν μπορούν να χρησιμοποιήσουν την fgets ως πρωτοετείς. Θα σου πρότεινα να κοιτάξεις να το κάνεις με την fscan. Στα ορίσματά της θα βάλεις τι θα διαβάζει και αναλόγως θα κάνεις τις πράξεις. Αν φτιάξεις να διαβάζει σωστά την είσοδο τότε τα bonus που λεει η άσκηση είναι εύκολα.
http://www.myphone.gr/gallery/data/500/ZXRFlame.jpg
Link to comment
Share on other sites

Θα προσπαθουσα να παρω ολη την γραμμη με την fgets (θα την αποθηκευσει σε ενα πινακα χαρακτηρων) με το τελος της γραμμης που εδωσε ο χρηστης να ειναι το /n. Στην συνεχεια διαβαζοντας ενα ενα τους αριθμους μετετρεψε τους σε ακεραιους με το atoi (εχωντας τους αποθηκευμενους σε ενα αλλο πινακα char). Τα συν και τα πλην μπορεις να τα συμβολιζεις με 0 και 1 και αναλογα με ενα if να κανεις την πραξη μεταξυ των αριθμων.

 

Δυστυχως δεν επιτρεπεται ακομα να χρησημοποιησουμε strings και πινακες.Ολοι οι χαρακτηρες πρεπει να διαβαστουν με getchar.Απ'οτι καταλαβα πρεπει να τα διαβαζουμε χαρακτηρα-χαρακτηρα.Αυτο που δεν εχω καταλαβει ειναι πως θα διαβασουμε εναν αριθμο με πολλα ψηφια?Π.χ. το 53 θα το διαβασει σαν 5 και 3 αφου θα εχει διαβαστει χαρακτηρα-χαρακτηρα.Πως θα κανουμε το προγραμμα να καταλαβει οτι γραψαμε 53 και οχι 5 3 και να αποθηκευσει σε 1 μεταβλητη το 53 για να γινουν οι πραξεις?

Edited by NetSurfer_g7
Link to comment
Share on other sites

Χρησιμοποιησε stringstream και operator <<

 

Δυστυχως στην συγκεκρειμενη εργασια απαγορευεται η χρηση πινακων και strings.

Πως στο διαολο το κανουν με getchar???Παω να το κανω αλλα οι μεταβλητες αντι να παρουν σαν τιμες τα νουμερα που δινω παιρνουν τους αντιστοιχους κωδικους ASCII.Π.χ.αμα δωσω το 1 σε μια μεταβλητη,οταν παω να εκτυπωσω την τιμη της μεταβλητης μου δειχνει 49(που ειναι ο κωδικος του '1' στον πινακα ASCII)Πως να γινουν ετσι σωστα οι πραξεις αμα δινω 1 και καταλαβαινει 49???

Link to comment
Share on other sites

Σας έχει πει ο καθηγητής να το κάνετε μόνο με getchar(); Αν ναι τότε θα πρέπει να σαρώνεις το input χαρακτήρα-χαρακτήρα και να αποθηκεύεις τον κάθε χαρακτήρα σε μια μεταβλητή. Αυτό θα το κάνεις μέχρι να βρεις "+" ή "-". Μόλις βρεις τους παραπάνω τελεστές τότε ενώνεις τα ψηφία που έχεις μαζέψει από την getchar() σε έναν αριθμό και συνεχίζεις την σάρωση μέχρι να βρεις terminating character.

 

Περίεργη υλοποίηση αλλά αν πρέπει να το κάνεις οπωσδήποτε με getchar()......

http://www.myphone.gr/gallery/data/500/ZXRFlame.jpg
Link to comment
Share on other sites

  • 2 weeks later...
Σας έχει πει ο καθηγητής να το κάνετε μόνο με getchar(); Αν ναι τότε θα πρέπει να σαρώνεις το input χαρακτήρα-χαρακτήρα και να αποθηκεύεις τον κάθε χαρακτήρα σε μια μεταβλητή. Αυτό θα το κάνεις μέχρι να βρεις "+" ή "-". Μόλις βρεις τους παραπάνω τελεστές τότε ενώνεις τα ψηφία που έχεις μαζέψει από την getchar() σε έναν αριθμό και συνεχίζεις την σάρωση μέχρι να βρεις terminating character.

 

Περίεργη υλοποίηση αλλά αν πρέπει να το κάνεις οπωσδήποτε με getchar()......

 

Ευχαριστω.Σχεδον το ολοκληρωσα.Ομως πριν καν παραδωσουμε την 2η ασκηση μας εδωσε στο καπακι την 3η που ειναι τεραστιο παλουκι για εμας που ειμαστε ακομα αρχαριοι στην C.

http://cgi.di.uoa.gr/~ip/iphw1112_3.pdf

Link to comment
Share on other sites

Μόλις είδα για γάμους σταμάτησα το διάβασμα! :p

Δεν είναι τοσό δύσκολη όσο φαίνεται. Το παν είναι να καταλάβεις τι ζητάει. Θα δεις ότι η υλοποίηση δεν είναι ανέφικτη. Θα το κοιτάξω πιο προσεκτικά και θα επανέλθω.

http://www.myphone.gr/gallery/data/500/ZXRFlame.jpg
Link to comment
Share on other sites

Αυτο ειναι το προβλημα.Οτι εχω καταμπερδευτει με την εκφονηση.Πως θα το υλοποιησω αμα δεν εχω καταλαβει καλα-καλα τι ζηταει?Και εχει και τεραστεια πολυπλοκοτητα.Για να υλοποιηθει σε προγραμμα πιστευω χρειαζεται παρα πολλες γραμμες κωδικα.
Link to comment
Share on other sites

  • 1 month later...
Τελικα την παρατησα την 3η ασκηση διοτι ηταν απαλευτη.Τωρα ομως μας εδωσε την 4η ασκηση η οποια ειναι να φτιαξουμε εναν διερμηνευτη απο μια ανυπαρκτη γλωσσα(ipl) σε γλωσσα C.Ειναι εξαιρετικα δυσκολη και περιπλοκη για τοσο αρχαριους πρωτοετεις προγραμματιστες.Θελω ομως να την κανω,αφου δεν εκανα την 3η.Εδω υπαρχει η εκφωνηση:http://cgi.di.uoa.gr/~ip/iphw1112_4.pdf.Αμα υπαρχει καποιος εμπειρος που εχει καμια ιδεα,ας βοηθησει.
Link to comment
Share on other sites

  • 1 month later...
Καλησπέρα παιδιά, πως μπορώ να δω αν ένας αριθμός που δίνει ο χρήστης είναι ακέραιος;

Android is simple, it just takes a genius to understand its simplicity.

Samsung Galaxy S4 die hard !!

Samsung Galaxy S7

Link to comment
Share on other sites

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

 

Παίζει ρόλο πως τον ζητάς αυτό τον αριθμό.

Ας πούμε ότι τον αποθηκεύεις σε float και θέλεις να δεις αν είναι ακέραιος.

 

float f;
scanf ("%f\n", &f);
if (f == (int)f)	{
printf ("true\n");	
}
else	{
printf ("false\n");	
}

 

οπότε οι: 1, 2, 3.0, 15.00 θα δίνουν true

ενώ οι: 1.23, 2.3, κλπ θα δίνουν false

μέτρον άριστον
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Επισκέπτης
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Κοινοποίηση

×
×
  • Create New...