freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

Εισαγωγή στη C


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [10 Μηνύματα]       Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
alex599


Μέλος από: 17 Δεκ 2008
Βοηθήματα: 3
Μηνύματα: 66

Περιοχή: Πάτρα
View users profile Send email to user
ΜήνυμαΣτις: 20 Απρ 2009 12:17    Θέμα: Εισαγωγή στη C Απάντηση με παράθεση  Mark this post and the followings unread

Μια μικρή βοήθεια για τους νέους προγραμματιστές στους οποίους συνιστώ να ξεκινήσουν με τη C.

Η βασική δομή ενός προγράμματος είναι η εξής:
κώδικας:

main(){
   δηλώσεις μεταβλητών;
   εκτελέσιμες προτάσεις;
}


Για να μπορέσουμε να εκτυπώσουμε ένα απλό μήνυμα στην οθόνη του υπολογιστή μας χρησιμοποιείται η συνάρτηση printf() η οποία ορίζεται στο αρχείo επικεφαλίδας stdio.h το οποίο πρέπει να συμπεριλάβουμε με την οδηγία #include πριν από την main(). Έτσι ένα απλό πρόγραμμα είναι το εξής:
κώδικας:

#include <stdio.h>
main(){
    printf("Hello Freestuff!!");
}


Οι βασικοί τύποι δεδομένων είναι οι εξής:
int:Ακέραιοι αριθμοί (χωρίζονται και σε short,long,unsigned)
float:Αριθμοί κινητής υποδιαστολής μονής ακρίβειας (7 δεκαδικά ψηφία)
double:Αριθμοί κινητής υποδιαστολής διπλής ακρίβειας (14 δεκαδικά ψηφία)
char:Ένας μόνο χαρακτήρας

Ένα απλό παράδειγμα κώδικα είναι το εξής:
κώδικας:

#include <stdio.h>
main(){
    int i=11;
    float f=34,567;
    char c='a';
    printf("Ακέραιος αριθμός:%d",i);
    printf("Κινητής υποδιαστολής:%.3f",f);
    printf("Χαρακτήρας:%c",c);
}

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

Για να μπορέσουμε να έχουμε είσοδο από τον χρήστη μέσω του πληκτρολογίου χρησιμοποιείται η συνάρτηση scanf() που ορίζεται και αυτή στο stdio.h. Χρησιμοποιούνται οι ίδιοι συνδυασμοί που χρησιμοποιούνται και στην printf() για εισαγωγή δεδομένων ανάλογα με τον τύπο δεδομένων.Παράδειγμα:
κώδικας:

#include <stdio.h>
main(){
    int i;
    float f;
    char c;
    printf("Δώστε έναν ακέραιο αριθμό:");
    scanf("%d",&i);
    printf("Δώστε έναν πραγματικό αριθμό:");
    scanf("%f",&f);
    printf("Δώστε έναν χαρακτήρα:");
    scanf("%c",&c);
}

Στην πρόταση scanf("%d",&i) το & χρησιμοποιείται για να τοποθετηθεί η τιμή που θα δωθεί από το χρήστη στη διεύθυνση της μνήμης που έχει δεσμευτεί για αυτήν την μεταβλητή.

Κάθε μεταβλητή έχει μια συγκεκριμένη διεύθυνση στη μνήμη και συγκεκριμένο μέγεθος ανάλογα με τον τύπο δεδομένων της. Η εντολή &a μας δίνει τη διεύθυνση της μεταβλητής a ενώ η εντολή sizeof(a) μας δίνει το μέγεθος της.

TIP: Αν χρησιμοποιήσετε τον Dev-C++ για τη συγγραφή και τη μεταγλώττιση του κώδικα σας δεν θα σας δέχεται ελληνικούς χαρακτήρες εκτός και αν πχ μετά τη δήλωση των μεταβλητών σας δώσετε την εντολή system("chcp 1253"); και στην κονσόλα όπου τρέχει το εκτελέσιμο αλλάξετε τη γραμματοσειρά σε Lucida concole. Επίσης πρέπει να δώσετε την εντολή system("pause") πριν από την τελευταία αγκύλη του προγράμματος σας για να γίνει πάγωμα της κονσόλας και να δείτε αποτελέσματα. Η συνάρτηση system() ορίζεται στο stdlib.h το οποίο πρέπει να συμπεριλάβεται πριν την main().

_________________
while(!dead()) ++knowledge;
ThyClub
Honorary Member

Μέλος από: 17 Νοε 2003
Βοηθήματα: 8
Νέα: 2
Templates: 3
Scripts: 5
Μηνύματα: 256+

Περιοχή: Hell's Kitchen
View users profile Visit posters website
portfolio facebook twitter deviantART digg del.icio.us 
skype 
ΜήνυμαΣτις: 20 Απρ 2009 14:14    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Έγινε βοήθημα. Πολύ καλό ευχαριστούμε
alex599


Μέλος από: 17 Δεκ 2008
Βοηθήματα: 3
Μηνύματα: 66

Περιοχή: Πάτρα
View users profile Send email to user
ΜήνυμαΣτις: 03 Μαη 2009 01:46    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Παιδιά, να το συνεχίσω και άλλο ή να το αφήσουμε ως μόνο μια μικρή εισαγωγή στη γλώσσα?

_________________
while(!dead()) ++knowledge;
Kainourios
Ruby Moderator

Μέλος από: 18 Μαη 2005
Βοηθήματα: 2
Νέα: 1
Μηνύματα: 256+

Περιοχή: Κορυδαλλός
View users profile Send email to user Visit posters website
ΜήνυμαΣτις: 03 Μαη 2009 15:01    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Ωραίο tutorial, ενδιαφέρον αυτό με τα ελληνικά. Προσωπικά θα με ενδιέφερε ένα tutorial για το πώς γίνονται διάφορα είδη input validations στην C (το scanf είναι λίγο σπάσιμο για input).
cordis
Administrator, [F|H]ounder, [C|S]EO

Μέλος από: 09 Οκτ 1999
Βοηθήματα: 95
Νέα: 477
Templates: 1
Scripts: 2
Μηνύματα: 256+

Περιοχή: Greece
View users profile Visit posters website
blog cv flickr picasa facebook linkedin 
twitter friendfeed deviantART del.icio.us 
ΜήνυμαΣτις: 03 Μαη 2009 17:46    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

alex599 ανέφερε:
Παιδιά, να το συνεχίσω και άλλο ή να το αφήσουμε ως μόνο μια μικρή εισαγωγή στη γλώσσα?


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

_________________
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

alex599


Μέλος από: 17 Δεκ 2008
Βοηθήματα: 3
Μηνύματα: 66

Περιοχή: Πάτρα
View users profile Send email to user
ΜήνυμαΣτις: 07 Μαη 2009 00:17    Θέμα: Εντολές Ελέγχου! Απάντηση με παράθεση  Mark this post and the followings unread

όπως και σε άλλες γλώσσες προγραμματισμού έτσι και η C διαθέτει δομές αλλαγής ροής του προγράμματος.

Η εντολή if εκτελεί κώδικα αν και μόνο αν είναι αληθής μια συνθήκη και συντάσσεται ως:

κώδικας:

if(ΛογικήΣυνθήκη1){
    Προτάσεις;
}
else if(ΛογικήΣυνθήκη2){
   Προτάσεις;
}
...
else if(ΛογικήΣυνθήκηΝ){
   Προτάσεις;
}
else{
   Προτάσεις;
}


Ανάλογα με το ποια ΛογικήΣυνθήκη είναι αληθής εκτελείται και το αντίστοιχο block προτάσεων.

Η εντολή switch-case ελέγχει αν μια παράσταση ισούται με κάποιες σταθερές μόνο τύπου int ή char και συντάσσεται ως εξής:

κώδικας:

switch(παράσταση){
     case σταθερά1:
          προτάσεις;
          break;
     case σταθερά2:
          προτάσεις;
          break;
     ...
     case σταθεράΝ:
          προτάσεις;
          break;
      default:
          προτάσεις;
          break;
}


Η εντολή break μεταφέρει τον έλεγχο του προγράμματος μετά την switch. Ανάλογα με ποια σταθερά ισούται η παράσταση εκτελούνται οι αντίστοιχες προτάσεις ενώ αν δεν ισούται με καμία εκτελούνται οι προτάσεις της default.

Ο τριαδικό τελεστής ή τελεστής συνθήκης ? συντάσσεται ως εξής:

κώδικας:

(Συνθήκη) ? Πρόταση1 : Πρόταση2


και ουσιαστικά ανάλογα με το αν η συνθήκη είναι αληθής εκτελείται η πρόταση1 ενώ αν είναι ψευδής εκτελείται η πρόταση2. Οι προτάσεις είναι απλές και όχι σύνθετες.

_________________
while(!dead()) ++knowledge;
alex599


Μέλος από: 17 Δεκ 2008
Βοηθήματα: 3
Μηνύματα: 66

Περιοχή: Πάτρα
View users profile Send email to user
ΜήνυμαΣτις: 05 Ιουν 2009 11:14    Θέμα: Εντολές Επανάληψης και αλλαγής ροής. Απάντηση με παράθεση  Mark this post and the followings unread

Η αγαπημένη μου εντολή στη C δεν είναι άλλη από αυτή που ουσιαστικά καταστρέφει τον δομημένο προγραμματισμό, η goto, η οποία έχει την ιδιότητα να μεταφέρει τον έλεγχο του προγράμματος σε διάφορα σημεία του. Χρησιμοποιεί ταμπέλες, οι οποίες δείχνουν τα διάφορα σημεία του προγράμματος και συντάσσονται ως εξής:

κώδικας:
Label:


και η goto συντάσσεται:

κώδικας:
goto Label;


Φυσικά επειδή είμαι σίγουρος ότι οι νέοι προγραμματιστές καταλάβατε τα πάντα, δείτε ένα παράδειγμα, όπου κάνω πρόσθεση 10 αριθμών που δίνονται από το πληκτρολόγιο:

κώδικας:
#include <stdio.h>
int main(){
    int number,counter=0,sum=0;
    repeat:{
        ++counter;
        printf("Δώστε έναν αριθμό:");
        scanf("%d",&number);
        sum+=number;
        if(counter<10){
            goto Repeat;
        }
    }
    printf("άθροισμα:%d",sum);
    return 0;
}


Οι αγκύλες δίπλα από την ετικέτα Repeat είναι βοηθητικές για να δούμε απλά το block εντολών που θα γίνεται επανάληψη.

Επείδη όμως η goto όπως είπα καταστρέφει τον δομημένο προγραμματισμό, η goto εγκαταλήφθηκε και απλά υπάρχει για λόγους συμβατότητας.
Έχουμε τις κλασικές δομές επανάληψης:

κώδικας:

while(ΛογικήΣυνθήκη){
    ΕντολέςΒρόχου;
}


H οποία κάνει επανάληψη ενός block εντολών όσο η ΛογικήΣυνθήκη είναι αληθής.

κώδικας:

do{
   ΕντολέςΒρόχου;
}while(ΛογικήΣυνθήκη);


H οποία κάνει επανάληψη όσο η ΛογικήΣυνθήκη είναι αληθής!
ώπα...και οι δύο while και do-while είναι ίδιες δηλαδή??
ΟΧΙ, στην δεύτερη έχουμε τουλάχιστον μία επανάληψη ενώ στην πρώτη μπορεί να μην μπούμε κάν στον βρόχο και επιπλέον παρατηρήστε το ερωτηματικό στον τέλος της do-while..μην το ξεχνάτε...

Και η τελευταία:

κώδικας:

for(Πρόταση1;Πρόταση2;Πρόταση3){
    ΕντολέςΒρόχου;
}


όπου η Πρόταση1 εκτελείται μία φορά και συνήθως αρχικοποιεί κάποιον μετρητή, η πρόταση2 είναι η ΛογικήΣυνθήκη, που όσο είναι αληθής τρέχει ο βρόχος και η Πρόταση3 εκτελείται με το πέρας μιας επανάληψης του βρόχου και συνήθως αλλάζει την Πρόταση2.

Έτσι ο αλγόριθμος του αρχικού μας παραδείγματος θα μπορούσε να γίνει:

κώδικας:

int counter=0,number,sum=0;
while (counter<10){
      printf("Δώστε έναν αριθμό:");
      scanf("%d",&number);
      sum+=number;
      ++counter;
}
printf("Άθροισμα:%d",sum);

ή

int counter,number,sum=0;
for(counter=0;counter<10;counter++){
      printf("Δώστε έναν αριθμό:");
      scanf("%d",&number);
      sum+=number;
}
printf("Άθροισμα:%d",sum);


Παρατηρήστε τις ΜΙΚΡΟ-διαφορές των εντολών επανάληψης. Ό,τι γράφεται με for μπορεί να γραφεί με while και do-while!Δεν ισχύει το αντίστροφο.

Αν όμως κάποια στιγμή θέλουμε να σταματήσουμε ή να συνεχίσουμε βίαια τον βρόχο??
Τότε χρησιμοποιούμε τις break και continue που λειτουργούν...σαν διακόπτες!

Η εντολή:

κώδικας:
break;


σταματάει την επανάληψη του πιο εσωτερικού βρόχου. (Ανν θυμάστε χρησιμοποιείται και στην switch-case).

Η εντολή:

κώδικας:
continue;


αναγκάζει την επόμενη επανάληψη παραλείποντας όλες τις εντολές που είναι κάτω από αυτήν, πάντα του πιο εσωτερικού βρόχου.

Τι εννοώ πιο εσωτερικό βρόχο? Σκεφτείται ένα τέτοιο πράγμα:

κώδικας:

while(logik1){
    while(logik2){
          while(logik3){
                 break;
          }
          continue;
    }
}


όπου η break αναγκάζει τον τερματισμό της τρίτης while και η continue αναγκάζει την επόμενη επανάληψη της δεύτερης while.

Αυτά για την ώρα..

Σχόλιο:Όποιος θέλει να βοηθήσει να το κάνουμε καλύτερο το βοήθημα, ευχαρίστως να πάρει μέρος..

_________________
while(!dead()) ++knowledge;
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 05 Ιουν 2009 16:30    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

παράθεση:
η goto εγκαταλήφθηκε και απλά υπάρχει για λόγους συμβατότητας


Θα μου επιτρέψετε να διαφωνήσω. Η goto στα απλά προγράμματα ίσως μπορεί να παραλειφθεί, αλλά σε πιο σύνθετα προβλήματα μπορεί να απλοποιήσει πολύ τον κώδικα και να τον κάνει πολύ πιο ευανάνγωστο παρά αν χρησιμοποιηθούν άλλες εντολές.

Εξάλλου μην ξεχνάμε πως ότι μπορεί να γίνει, με οποιαδήποτε συνδιασμό οποιονδήποτε εντολών επανάληψης, μπορεί να γίνει χρησιμοποιώντας μόνο με if+goto.

Η εμπειρία στον προγραμματισμό είναι που θα κάνει τον κώδικα σπαγγέτι ή έργο τέχνης. (Και για να γίνει κάτι σπαγγέτι αρκεί να δώσεις οποιαδήποτε γλώσσα προγραμματισμού ισχυρίζεται ότι παράγει δομημένο κώδικα σε κάποιον αρχάριο).
alex599


Μέλος από: 17 Δεκ 2008
Βοηθήματα: 3
Μηνύματα: 66

Περιοχή: Πάτρα
View users profile Send email to user
ΜήνυμαΣτις: 05 Ιουν 2009 21:51    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Δεν θα διαφωνήσω-τουναντιον συμφωνώ απόλυτα-άλλωστε όπως λέω στην αρχή είναι η αγαπημένη μου εντολή, αλλά για τους αρχάριους δεν προτείνεται...

_________________
while(!dead()) ++knowledge;
alex599


Μέλος από: 17 Δεκ 2008
Βοηθήματα: 3
Μηνύματα: 66

Περιοχή: Πάτρα
View users profile Send email to user
ΜήνυμαΣτις: 07 Ιουν 2009 16:45    Θέμα: Πίνακες Απάντηση με παράθεση  Mark this post and the followings unread

Tι γίνεται όταν θέλουμε να αποθηκεύσουμε πολλές πληροφορίες μαζί?
Τότε μπορούμε να κάνουμε χρήση πινάκων...

Ένας πίνακας μπορεί να έχει όσες διαστάσεις θέλουμε και δηλώνεται γενικά ως εξής:

κώδικας:
type ArrayName[length1][length2]...[lenghtN];


H πιο απλή μορφή πίνακα είναι ο μονοδιάστατος πίνακας, τον οποίο μπορούμε να τον φανταστούμε σα μια σειρά από συνεχόμενες θέσεις μνήμης, που έχουν ένα αριθμό αναφορά ξεκινώντας από το 0.

Ο πιο συχνός τρόπος προσπέλασης των στοιχείων ενός μονοδιάστατου πίνακα είναι:
κώδικας:

int i,table[20];
for(i=0;i<20;i++){
    table[i]=rand();
    printf("%d\n",table[i]);
}


όπου η συνάρτηση rand() ορίζεται στο stdlib.h και παράγει τυχαίους μη αρνητικούς αριθμούς.

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

Ο πιο συχνος τρόπος χρήσης τους:
κώδικας:

int i,j,table[20][20];
for(i=0;i<20;i++){
    for(j=0;j<20;j++){
       table[i][j]=rand();
       printf("%d\n",table[i][j]);
    }
}


Αυτά τα λίγα...πιο μετά θα παρουσιάσω κάποιες ασκήσεις που αφορούν τους πίνακες για εξάσκηση και που φυσικά αφορούν γενικά τον προγραμματισμό και όχι μόνο τη C.

_________________
while(!dead()) ++knowledge;
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [10 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Τώρα είναι 09 Δεκ 2016 13:32 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos