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

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

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

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

Το προγραμματάκι που σχεδιάζει το γράφημα δεν θα μπει στο αρχικό post? :(

Btw, στα Επιπλέον του 1ου post, το snippet που διαβάζει αριθμούς μέχρι να διαβάσει 0 και τους τυπώνει αντεστραμμένους νομίζω είναι καλύτερα να μπει στην Αναδρομή (μιας και χρησιμοποιεί αναδρομή για να κάνει αυτό που κάνει).

Έκανα 2 ακόμα προσθήκες στο πρόγραμμα με το γράφημα, το έβαλα να σχεδιάζει και γραμμή ανάμεσα σε 2 σημεία (που μπορούν προφανώς να αλλαχτούν κατά βούληση) καθώς και να σχεδιάζει έναν κύκλο με μεταβλητό κέντρο και ακτίνα. Αυτό είναι μάλλον πολύπλοκο για να μπει στο 1ο post, αλλά όποιος ενδιαφέρεται μπορεί να δει τον κώδικα και το αποτέλεσμα εδώ: http://ideone.com/tyeVZ

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

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

Δημοσίευσηαπό linuxs » 08 Ιούλ 2011, 23:12

migf1 έγραψε:Το προγραμματάκι που σχεδιάζει το γράφημα δεν θα μπει στο αρχικό post? :(

Btw, στα Επιπλέον του 1ου post, το snippet που διαβάζει αριθμούς μέχρι να διαβάσει 0 και τους τυπώνει αντεστραμμένους νομίζω είναι καλύτερα να μπει στην Αναδρομή (μιας και χρησιμοποιεί αναδρομή για να κάνει αυτό που κάνει).

Έκανα 2 ακόμα προσθήκες στο πρόγραμμα με το γράφημα, το έβαλα να σχεδιάζει και γραμμή ανάμεσα σε 2 σημεία (που μπορούν προφανώς να αλλαχτούν κατά βούληση) καθώς και να σχεδιάζει έναν κύκλο με μεταβλητό κέντρο και ακτίνα. Αυτό είναι μάλλον πολύπλοκο για να μπει στο 1ο post, αλλά όποιος ενδιαφέρεται μπορεί να δει τον κώδικα και το αποτέλεσμα εδώ: http://codepad.org/8HisgPEQ

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


Νομίζεις θα το άφηνα εκτός :/ are u crazy? :P lol
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ 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 » 08 Ιούλ 2011, 23:36

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

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

Δημοσίευσηαπό migf1 » 09 Ιούλ 2011, 04:38

Παράδειγμα καταχώρησης 3 εγγραφών σε αρχείο, και κατόπιν αλλαγή της 3ης και της 1ης.

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

/* -------------------------------------------------------------
* Από: migf1
* Παράδειγμα καταχώρησης 3 εγγραφών σε αρχείο, και κατόπιν αλλαγή της 3ης και της 1ης
* -------------------------------------------------------------
*/

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

#define MAXLEN_ID (3+1) // μέγιστο μήκος κωδικού
#define MAXLEN_NAME (25+1) // μέγιστο μήκος ονόματος

#define myexit(n) printf("\npress ENTER to exit..."); fflush(stdin); getchar(); exit((n))

typedef enum { FALSE=0, TRUE } bool;

typedef struct rec { // δομή εγγραφής
char id[ MAXLEN_ID ]; // κωδικός
char name[ MAXLEN_NAME ]; // όνομα
} Rec;


// ------------------------------------------------------------------------------------
// Αντιγραφή του string: src στο string: dst (έως n-1 χαρακτήρες)
//
char *s_ncopy( char *dst, const char *src, int n )
{
char *save = dst;

while ( (dst-save) < n-1 && (*dst=*src) != '\0' )
dst++, src++;

if ( *dst )
*dst = 0;

return save;
}

// ------------------------------------------------------------------------------------
// Δημιουργία της εγγραφής: rec στην μνήμη, με κωδικό: id και όνομα: name
//
Rec *rec_set( Rec *rec, const char *id, const char *name )
{
if ( !rec )
return NULL;

s_ncopy( rec->id, id, MAXLEN_ID );
s_ncopy( rec->name, name, MAXLEN_NAME );

return rec;
}

// ------------------------------------------------------------------------------------
// Ανάγνωση της εγγραφής: rec που βρίσκεται στη θέση: fpos του αρχείου: fp
//
bool rec_fread( FILE *fp, const int fpos, Rec *rec )
{
if ( !fp )
return FALSE;

if ( fseek( fp, (fpos-1) * sizeof(Rec), SEEK_SET ) != 0 )
return FALSE;

if ( fread( rec, sizeof(Rec), 1, fp ) != 1 )
return FALSE;

return TRUE;
}

// ------------------------------------------------------------------------------------
// Καταχώρηση της εγγραφής: newrec στη θέση: fpos του αρχειου: fp
//
bool rec_fwrite( FILE *fp, const int fpos, const Rec *newrec )
{
if ( !fp )
return FALSE;

if ( fseek( fp, (fpos-1) * sizeof(Rec), SEEK_SET ) != 0 )
return FALSE;

if ( fwrite( newrec, sizeof(Rec), 1, fp ) != 1 )
return FALSE;

return TRUE;
}

// ------------------------------------------------------------------------------------
// Ανάγνωση και τύπωμα όλων των εγγραφών του αρχείου: fp
//
bool f_print( FILE *fp )
{
if ( !fp )
return FALSE;

if ( fseek( fp, 0, SEEK_SET ) != 0 ) // μεταπήδηση στην αρχή του αρχείου
return FALSE;

Rec rec; // προσωρινή εγγραφή

puts("File Contents\n-------------");
while ( fread( &rec, sizeof(Rec), 1, fp ) )
printf( "%s %s\n", rec.id, rec.name );

putchar('\n');

return TRUE;
}

// ------------------------------------------------------------------------------------
int main( void )
{
char fname[] = "b.txt"; // το όνομα του αρχείου
Rec rec = { .id="", .name="" }; // προσωρινή δομή εγγραφής

FILE *fp = fopen( fname, "w+" ); // άνοιγμα του αρχείου
if ( !fp ) { // αποτυχία
puts("*** fatal error: fopen() failed"); // προώρος τερματισμός
myexit(1);
}

/* αποθήκευση 3 εγγραφών (χωρίς έλεγχο για σφάλματα) */

rec_set( &rec, "001", "Giorgos" ); // αποθήκευση 1ης εγγραφής
rec_fwrite( fp, 1, &rec );

rec_set( &rec, "002", "Xristos" ); // αποθήκευση 2ης εγγραφής
rec_fwrite( fp, 2, &rec );

rec_set( &rec, "003", "Petros" ); // αποθήκευση 3ης εγγραφής
rec_fwrite( fp, 3, &rec );

f_print( fp ); // εμφάνιση περιεχομένων αρχείου

/* αλλαγή εγγραφών 3 και 1 (με έλεγχο για σφάλματα) */

rec_set( &rec, "003", "Basilhs" ); // ΑΛΛΑΓΗ 3ης εγγραφής
if ( !rec_fwrite( fp, 3, &rec ) )
puts("\t*** error: write file error");

rec_set( &rec, "001", "Maria" ); // ΑΛΛΑΓΗ 1ης εγγραφής
if ( !rec_fwrite( fp, 1, &rec ) )
puts("\t*** error: write file error");

if ( !f_print( fp ) ) // εμφάνιση περιεχομένων αρχείου
puts("\t*** error: read file error");

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

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

Δημοσίευσηαπό Star_Light » 10 Ιούλ 2011, 04:02

Κώδικας: Επιλογή όλων
#include<stdio.h>
#define N 0; /*Οριζω το Ν σαν 0 μεσω της define εντολης του προεπεξεργαστη */
void test(int *sum);

int main()
{
int x;
int y;
int sum;

printf("Dwse to x:");
scanf("%d",&x);
printf("Dwse to y: ");
scanf("%d",&y);

sum=x+y;
test(&sum);
/*Κληση της συναρτησης test που παιρνει σαν ορισμα την διευθυνση της μεταβλητης sum οποτε θα επενεργησει απευθειας πανω της μολις κληθει ανεξαρτητα απο τις εισοδους του χρηστη */
printf("To apotelesma tis pros8esis einai: \t %d \t",sum);

/*Επομενως το αποτελεσμα θα ειναι παντα 10 ασχετα με την εισοδο επειδη η συναρτηση κανει την "βρωμοδουλεια" της στη μνημη μεσα */

printf("Ops kati pige strava eimai diavoliko mixanima!!!");

return N;
}
void test(int *sum)
{
*sum=10;

return;
}


Για πλακα το βαζω... Και για να καταλαβει ακομα καλυτερα καποιος τι σημαινει "ξεροκεφαλο" προγραμμα. ΜΠορεις να βαφτισεις ενα προγραμμα σαν και αυτο ξεροκεφαλο διοτι οτι τιμη και να δωσει ο χρηστης στα χ και ψ για να κανει μια απλη προσθεση αυτο θα τυπωνει παντα 10!!!!!!

ΧΑΧΧΑΧΑ καθως διαβαζα σημερα τα παραδειγματα του migf1 σκεφτηκα να το φτιαξω! εχει την πλακα του!
Γνώσεις ⇛ 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

Δημοσίευσηαπό Qdata » 10 Ιούλ 2011, 13:04

@Star_Light :P :D Μόνο άλλαξε το #define και κάνε το έτσι:
Κώδικας: Επιλογή όλων
#define N 0
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

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

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

Έκανα τις τελευταίες τροποποιήσεις...αν έχω παραλείψει κάτι πείτε μου! ;)

Off topic:
Πάντως το θέμα(1ο πόστ) πάει καλά... ;)
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ 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

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

Πρόταση...τι θα λέγατε να κατηγοριοποιήσουμε καπως τα θέματα? :/ Για παράδειγμα(αν θέλει) ο migf1 να δείνει ασκήσεις παω σε pointers, εγώ πάνω σε αρχεία κτλ -όχι απαραίτητα έτσι(παράδειγμα είπα)- ε? :/
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ 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 » 10 Ιούλ 2011, 19:53

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

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

Δημοσίευσηαπό linuxs » 10 Ιούλ 2011, 20:02

Τώρα ο κάθε ένας γράφει προγράμματα απο διαφορετικά parts όπως pointers, files, strings etc. Απλά σκεφτόμουν αν θα ήταν καλύτερο να ορίσουμε για παράδειγμα εμένα σε ένα part όπως files. Έτσι όλα τα παραδείγματα μου θα είναι σχετικά με αρχεία. Εσύ μπορείς να πάρεις κάποιο άλλο part ο τάδε ένα άλλο κτλ. Κατάλαβες τώρα? ;/ ...its just an idea, δεν ξέρω αν θα είναι καλύτερα! :D
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ 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
Εκτύπωση

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

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

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