Παραδείγματα & Ασκήσεις στην C

...ασύγχρονα μαθήματα γλώσσας C

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό linuxs » 06 Ιούλ 2011, 15:51

Off topic:
Γίνε και εσύ hacker!!!!!! Έριξα απίστευτο γέλιο...http://triple-click.blogspot.com/2010/12/hacker_11.html
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό migf1 » 06 Ιούλ 2011, 16:02

Off topic:
:lol: :lol: :lol:
Φοβερό!
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό Star_Light » 06 Ιούλ 2011, 16:44

Μετα τις λιστες του migf1 εγω θα αρχισω να ασχολουμαι και με κρυπτογραφηση παντως σε C ή τον αλγοριθμο CRC .

Με ενδιαφερει αρκετα και η ασφαλεια!!!!!
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό linuxs » 06 Ιούλ 2011, 16:52

Star_Light έγραψε:Μετα τις λιστες του migf1 εγω θα αρχισω να ασχολουμαι και με κρυπτογραφηση παντως σε C ή τον αλγοριθμο CRC .

Με ενδιαφερει αρκετα και η ασφαλεια!!!!!

Έχεις βρεί απο που θα ξεκινήσεις? Γενικότερα το έχεις ψάξει καθόλου? :/

Off topic:
migf1, μιας και έχεις μεγαλύτερη εμπειρία...με την C σαν γλώσσα τι μπορώ να κάνω? Σίγουρα η πρώτη απάντηση είναι: "Πολλά!!!" το καταλαβαίνω αυτό απλά εκτός απο τα παραδείγματα και τις ασκήσεις που όπως συνήθως έχω κάνει και εγώ μπορέις να μου πείς 2-3 παραδείγματα που αν καταφέρω να τα υλοποιήσω θα είναι πραγματικά χρήσιμα είτε σε ένα webpage είτε στον υπολογιστή μου. :/ Απλά, εδώ και καιρό κάνω τα turorials κάποια προγράμματα κτλ αλλα ποτέ δεν έχω δεί κάτι ΧΡΗΣΙΜΟ. Να πω ωραία κατάφερα και υλοποίησα αυτό(ίσως και με βοήθεια άλλου) θα το βάλω στην άκρη να το χρησιμοποιήσω κάπου. + οτι θα μπορύσα να το ανεβάσω στο net για χρήση απο όποιον ενδιαφέρεται...

ελπίζω να κατάλαβες τις αποριούλες μου...
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό migf1 » 06 Ιούλ 2011, 17:26

Διάβασμα ενός string και μετατροπή του σε πραγματικό αριθμό (περισσότερες πληροφορίες στα σχόλια του κώδικα :) )

Κώδικας: Επιλογή όλων
/* -----------------------------------------------------------------------------------
* Από: migf1
*
* Διάβασμα ενός string από τον χρήστη και μετατροπή του σε πραγματικό αριθμό.
*
* Το πρόγραμμα παρουσιάζει τον πλέον συμβατό και ασφαλή τρόπο να διαβάζει
* κανείς μεταβλητές οποιουδήποτε τύπου στη C, χωρίς να εξαρτάται από εν δυνάμει
* προβληματικές συναρτήσεις, όπως είναι η στάνταρ scanf().
*
* Στην προκειμένη περίπτωση το string μετατρέπεται σε double, αλλά μπορεί εξίσου
* εύκολα να μετατραπεί σε οποινδήποτε άλλον τύπο, με χρήση της στάνταρ βιβλιοθήκης
* stdlib ( #include <stdlib.h> ).
*
* Η προτεινόμενη συνάρτηση είναι η strtod() η οποία δίνει πολλές δυνατότητας ελέγχου
* αποτυχίας της μετατροπής, με χρήση της καθολικής μεταβλητής errno (#include <errno.h)
* αλλά και του δείκτη: char *dummy στο 2ο όρισμά της. Εδώ παρουσιάζω μονάχα μερικές
* από αυτές τις δυνατότητες (για περισσότερες πληροφορίες, διαβάστε την τεκμηρίωση
* της συνάρτησης, στο manual της).
*
* Ως ευκολότερη λύση για την μετατροπή, αλλά χωρίς δυνατότητα ελέγχου ενδεχόμενης
* αποτυχίας, παρουσιάζω και την συνάρτηση: atof() ( επίσης στη βιβλιοθήκη: stdlib) ).
*
* -----------------------------------------------------------------------------------
*/

#include <stdio.h>
#include <errno.h> // για έλεγχο του errno
#include <stdlib.h> // για τις atof(), strtod() και exit()

#define MAX_LINE 255+1 // μέγιστο μήκος της γραμμής εισόδου

// -----------------------------------------------------------------------------------
// Ανάγνωση του string s από την κύρια είσοδο μέχρι να πατηθεί ENTER ή να συμπληρωθούν
// maxlen-1 χαρακτήρες. Επιστρέφει το αναγνωσμένο s με μηδενισμένο τον τελικό του
// χαρακτήρα (αντικαθιστώντας το ENTER, αν ήταν αυτό ο τελικός χαρακτήρας). Σε
// περίπτωση σφάλματος επιστρέφει NULL.
// ΣΗΜΑΝΤΙΚΟ:
// το s πρέπει να είναι ήδη δημιουργημένο και να έχει χώρο για τουλάχιστον maxlen
// χαρακτήρες!
//
char *s_get(char s[], int maxlen)
{
register int i;

for (i=0; (s[i]=getchar()) != '\n' && i < maxlen-1; i++)
; // for-loop με κενό σώμα
s[i] = '\0'; // μηδενισμός του τελικού χαρακτήρα

return s;
}

// -----------------------------------------------------------------------------------
int main( void )
{
extern int errno; // defined in <errno.h>
char line[MAX_LINE]; // η γραμμή ειδόδου (string)
char *dummy; // για την strtod()
double num = 0.0; // το αποτέλεσμα της μετατροπής

printf("Enter any real number: ");
s_get( line, MAX_LINE);
printf("You entered the string: %s\n", line);

// μετατροπή με την atof()
num = atof( line );
printf("\nConverted to double with atof() it gives: %g\n", num);

// μετατροπή με την strtod()
errno = 0;
num = strtod( line, &dummy );
// έλεγχος αποτυχίας
printf("\nConverted to double with strtod() it gives: %g\n", num);
if (errno == ERANGE)
puts("\t*** error: number too big or too small");
if ( *dummy != '\0')
printf("\t*** info: \"%s\" was invalid so it was ignored\n", dummy);

exit( EXIT_SUCCESS );
}
Τελευταία επεξεργασία από migf1 και 06 Ιούλ 2011, 18:53, έχει επεξεργασθεί 1 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό linuxs » 06 Ιούλ 2011, 17:29

Πρώτα απο όλα πρέπει να υπάρχει ένα bug! Πολλές φορές όταν πατάω Παράθεση μου κόβει λέξεις...



migf1 lol τα commnets είναι περισσότερα απο την άσκηση...!! :P
migf1 έγραψε:Διάβασμα ενός string και μετατροπή του σε πραγματικό αριθμό (περισσότερες πληροφορίες στα σχόλια του κώδικα :) )

Κώδικας: Επιλογή όλων

/* -----------------------------------------------------------------------------------
* Από: migf1
*
* Διάβασμα ενός string από τον χρήστη και μετατροπή του σε πραγματικό αριθμό.
*
* Το πρόγραμμα παρουσιάζει τον πλέον συμβατό και ασφαλή τρόπο να διαβάζει
* κανείς μεταβλητές οποιουδήποτε τύπου στη C, χωρίς να εξαρτάται από εν δυνάμει
* προβληματικές συναρτήσεις, όπως είναι η στάνταρ scanf().
*
* Στην προκειμένη περίπτωση το string μετατρέπεται σε double, αλλά μπορεί εξίσου
* εύκολα να μετατρταπεί σε οποινδήποτε άλλον τύπο, με χρήση της στάνταρ βιβλιοθήκης
* stdlib ( #include <stdlib.h> ).
*
* Η προτεινόμενη συνάρτηση είναι η strtod() η οποία δίνει πολλές δυνατότητας ελέγχου
* αποτυχίας της μετατροπής, με χρήση της καθολικής μεταβλητής errno (#include <errno.h)
* αλλά και του δείκτη: char *dummy στο 2ο όρισμά της. Εδώ παρουσιάζω μονάχα μερικές
* από αυτές τις δυνατότητες (για περισσότερες πληροφορίες, διαβάστε την τεκμηρίωση
* της συνάρτησης, στο manual της ).
*
* Ως ευκολότερη λύση για την μετατροπή, αλλά χωρίς δυνατότητα ελέγχου ενδεχόμενης
* αποτυχίας, παρουσιάζω και την συνάρτηση: atof() ( επίσης στη βιβλιοθήκη: stdlib) ).
*
* -----------------------------------------------------------------------------------
*/

#include <stdio.h>
#include <errno.h> // για έλεγχο του errno
#include <stdlib.h> // για τις atof(), strtod() και exit()

#define MAX_LINE 255+1 // μέγιστο μήκος της γραμμής εισόδου

// -----------------------------------------------------------------------------------
// Ανάγνωση του string s από την κύρια είσοδο μέχρι να πατηθεί ENTER ή να συμπληρωθούν
// malen-1 χαρακτήρες.
// Επιστρέφει το αναγνωσμένο s με μηδενισμένο τον τελικό του χαρακτήρα (αντικαθιστώντας
// το ENTER, αν ήταν αυτό ο τελικός χαρακτήρας). Σε περίπτωση σφάλματος επιστρέφει NULL.
// ΣΗΜΑΝΤΙΚΟ:
// το s πρέπει να είναι ήδη δημιουργημένο και να έχει χώρο για τουλάχιστον maxlen
// χαρακτήρες!
//
char *s_get(char s[], int maxlen)
{
register int i;

for (i=0; (s[i]=getchar()) != '\n' && i < maxlen-1; i++)
; // for-loop με κενό σώμα
s[i] = '\0'; // μηδενισμός του τελικού χαρακτήρα

return s;
}

// -----------------------------------------------------------------------------------
int main( void )
{
extern int errno; // defined in <errno.h>
char line[MAX_LINE]; // η γραμμή ειδόδου (string)
char *dummy; // για την strtod()
double num = 0.0; // το αποτέλεσμα της μεταροπής

printf("Enter any real number: ");
s_get( line, MAX_LINE);
printf("You entered the string: %s\n", line);

// μετατροπή με την atof()
num = atof( line );
printf("\nConverted to double with atof() it gives: %g\n", num);

// μετατροπή με την strtod()
errno = 0;
num = strtod( line, &dummy );
// έλεγχος αποτυχίας
printf("\nConverted to double with strtod() it gives: %g\n", num);
if (errno == ERANGE)
puts("\t*** error: number too big or too small");
if ( *dummy != '\0')
printf("\t*** info: \"%s\" was invalid so it was ignored\n", dummy);

exit( EXIT_SUCCESS );
}
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό migf1 » 06 Ιούλ 2011, 17:35

linuxs έγραψε:
[snip]
Off topic:
migf1, μιας και έχεις μεγαλύτερη εμπειρία...με την C σαν γλώσσα τι μπορώ να κάνω? Σίγουρα η πρώτη απάντηση είναι: "Πολλά!!!" το καταλαβαίνω αυτό απλά εκτός απο τα παραδείγματα και τις ασκήσεις που όπως συνήθως έχω κάνει και εγώ μπορέις να μου πείς 2-3 παραδείγματα που αν καταφέρω να τα υλοποιήσω θα είναι πραγματικά χρήσιμα είτε σε ένα webpage είτε στον υπολογιστή μου. :/ Απλά, εδώ και καιρό κάνω τα turorials κάποια προγράμματα κτλ αλλα ποτέ δεν έχω δεί κάτι ΧΡΗΣΙΜΟ. Να πω ωραία κατάφερα και υλοποίησα αυτό(ίσως και με βοήθεια άλλου) θα το βάλω στην άκρη να το χρησιμοποιήσω κάπου. + οτι θα μπορύσα να το ανεβάσω στο net για χρήση απο όποιον ενδιαφέρεται...

ελπίζω να κατάλαβες τις αποριούλες μου...

Με την C μπορείς να υλοποιήσεις κυριολεκτικά τα πάντα: από το να προγραμματίζεις μικροκυκλώματα μέχρι να φτιάχνεις drivers, λειτουργικά συστήματα και compilers άλλων γλωσσών, και από το να φτιάχνεις γραφικά περιβάλλοντα, games και applications μέχρι σχεδόν ότι μπορεί να φανταστεί το μυαλό σου.

Προφανώς, άλλα μπορείς να τα κάνεις πιο εύκολα κι άλλα πιο δύσκολα.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό linuxs » 06 Ιούλ 2011, 18:06

Μπορείς να μου κάτι πιο συγκεκριμένο μέτριας δυσκολίας()? Τι στο καλό πιστευω να το καταφέρω...σορρυ αν σε ταλαιπορώ(θα έχεις και δουλεια...)
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό migf1 » 06 Ιούλ 2011, 18:33

linuxs έγραψε:Μπορείς να μου κάτι πιο συγκεκριμένο μέτριας δυσκολίας()? Τι στο καλό πιστευω να το καταφέρω...σορρυ αν σε ταλαιπορώ(θα έχεις και δουλεια...)

Τι να σου πω βρε συ, είναι τεράστιο το εύρος που καλύπτει σε εφαρμογές η συγκεκριμένη γλώσσα. Σαν τι έχεις π..χ στο μυαλό σου όταν λες μέτριας δυσκολίας; Το μέτρο της δυσκολίας είναι σε πλήρη εξάρτηση με τις γνώσεις και την εμπειρία του καθενός.

Π.χ. να ένα παράδειγμα που έλεγα στον φίλο Unkonwn λίγο παλαιότερα: φτιάξε ένα calculator που θα διαβάζει σε κονσόλα μια γραμμή από τις βασικές πράξεις (πρόσθεση, αφαίρεση, πολλαπλασιασμό και διαίρεση) σε infix notation συμπεριλαμβανομένων των παρενθέσεων, την οποία θα την μετατρέπει σε postfix notation για να υπολογίσει το αποτέλεσμα και φυσικά να το τυπώνει.

Το συγκεκριμένο παράδειγμα χρησιμοποιείται κατά κόρον σε βιβλία εκμάθησης προγραμματισμού, συμπεριλαμβανομένου και του "The C Programming Language" των Kernighan-Richie. Το net είναι πήχτρα σε έτοιμο κώδικα, αλλά το θέμα είναι να το φτιάξεις μόνος σου΄.

Για να το καταφέρεις μόνος σου (προφανώς με καθοδήγηση σε θεωρητικό επίπεδο, όπως τα 2 links που σου έδωσα παρά πάνω) μπορεί να σε πάρει από 1 ημέρα μέχρι και μήνα ή μήνες, ανάλογα τις τρέχουσες γνώσεις σου.

Κατόπιν, εφόσον το καταφέρεις σε κονσόλα, μπορείς π.χ. να του βάλεις γραφικό περιβάλλον, προφανώς χρησιμοποιώντας GTK+ (με ή χωρίς τη βοήθεια του Glade) ή FreeGlut. Και πάλι ανάλογα τις τρέχουσες γνώσεις σου μπορεί να χρειαστείς από μερικές μέρες μέχρι και μήνες.

Άλλο παράδειγμα είναι να φτιάξεις ένα ημερολόγιο, πρώτα σε κονσόλα και κατόπιν να του βάλεις γραφικό περιβάλλον. Αν το θεωρείς εύκολο, μπορείς να του προσθέσεις και χρήση ατζέντας (με ραντεβού και τέτοια). Μπορείς ακόμα να του προσθέσεις και πλήρη διευθυνσιογράφο με επαφές και να του βάλεις π.χ. και δυνατότητα να στέλνει και να παραλαμβάνει email.

Οι δυνατότητες είναι ανεξάντλητες, δεν ξέρω τι ακριβώς εννοείς όταν λες "κάτι μέτριας δυσκολίας".
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό migf1 » 08 Ιούλ 2011, 03:19

Απλοϊκό πρόγραμμα δημιουργίας και απεικόνισης γραφήματος μιας συνάρτησης: f(x) = a*x + b

Κώδικας: Επιλογή όλων

/* -----------------------------------------------------------------------
* Από: migf1
*
* Πολύ απλοϊκό παράδειγμα προγράμματος κονσόλας που παράγει το γράφημα μιας
* συνάρτησης: f(x) = a*x + b στο πρώτο τεταρτημόριο του καρτεσιανού επιπέδου.
*
* Μπορείτε να αλλάξετε την συνάρτηση, αλλά σημειώστε πως το πρόγραμμα απεικονίζει
* μονάχα όσα σημεία παράγονται στην περιοχή: (0,0) ... (74,22)
* -----------------------------------------------------------------------
*/

#include <stdio.h>
#include <stdlib.h>

#define MAXCOLS 75 // μέγιστο πλάτος της οθόνης μας
#define MAXROWS 23 // μέγιστο ύψος της οθόνης μας

#define PIXEL_ON '#' // χαρακτήρας απεικόνισης "αναμμένων" pixels
#define PIXEL_OFF '.' // χαρακτήρας απεικόνισης "σβησμένων" pixels

#define VALIDPIXEL(x,y, w,h) ( (y) > -1 && (y) < (h) && (x) > -1 && (x) < (w) )
#define REVAXIS(y,h) (h) - (y) - 1 // αλλάζει την συντεταγμένη y ώστε το σημείο
// στο οποίο αντιστοιχεί να απεικονιστεί στην
// αντεστραμμένη φορά του άξονά (χρήσιμο για τον
// άξονα Υ που τον θέλουμε να μετράει από κάτω
// προς τα πάνω)

typedef struct screen {
int nrows; // τρέχον πλάτος της οθόνης μας
int ncols; // τρέχον ύψος της οθόνης μας
char pixel[MAXROWS][MAXCOLS]; // όλα τα pixels της οθόνης μας
} Screen;

// ------------------------------------------------------------------------------------
// Η συνάρτηση που παράγει το γράφημα (δοκιμάστε και με άλλες τιμές)
//
int f( int x )
{
return x/3+1;
}

// ------------------------------------------------------------------------------------
// "Ανάβει" το pixel (x,y) ώστε να εμφανιστεί αναμένο όταν αργότερα τυπωθεί η οθόνη
// μέσω της συνάρτησης: draw_screen()
//
void set_pixel( Screen *screen, int x, int y )
{
if ( !VALIDPIXEL(x,y, screen->ncols, screen->nrows ) )
return;

y = REVAXIS(y, screen->nrows); // make y-axis to start from bottom to top
screen->pixel[y][x] = PIXEL_ON;

return;
}

// ------------------------------------------------------------------------------------
// "Σβήνει" όλα τα pixels της οθόνης, ώστε να εμφανιστούν σβησμένα όταν αργότερα
// τυπωθεί η οθόνη μέσω της συνάρτησης: draw_screen()
//
void clear_screen( Screen *screen )
{
register int x,y;

for (y=0; y < screen->nrows; y++)
for (x=0; x < screen->ncols; x++)
screen->pixel[y][x] = PIXEL_OFF;

return;
}

// ------------------------------------------------------------------------------------
// Τυπώνει όλα τα pixels της οθόνης μας (αναμμένα και σβηστά) καθώς και την αρίθμηση
// των αξόνων Χ και Υ
//
void draw_screen( Screen screen )
{
register int x, y;

for (y=0; y < screen.nrows; y++)
{
// display value-labels to the left of y-axis
int ylab = y;
printf("%3d ", REVAXIS(ylab, screen.nrows) );

// display yth row of pixels
for (x=0; x < screen.ncols; x++)
putchar( screen.pixel[y][x] );
putchar('\n');
}

// display value-labels under x-axis
printf("Y/X ");
for (x=0; x < screen.ncols; x++)
printf("%d", x%10);
putchar('\n');

return;
}

// ------------------------------------------------------------------------------------
int main( void )
{
register int x=0;
Screen screen = { .ncols = MAXCOLS, .nrows = MAXROWS };

clear_screen( &screen ); // σβήσιμο όλων των pixels
for (x=0; x < screen.ncols; x++) // άναμμα μόνο όσων pixels...
set_pixel( &screen, x, f(x) ); // ... υπολογιζει η συνάρτηση f(x)
draw_screen( screen ); // τύπωμα όλων των pixels

exit( EXIT_SUCCESS );
}


Εικόνα
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

ΠροηγούμενηΕπόμενο

  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

Επιστροφή στο Μαθήματα C