Υλικό για μαθητές για τον Πανελλήνιο Διαγωνισμό Πληροφορικής

Εισαγωγή στους Αλγορίθμους: Από που να ξεκινήσω?

Ιστοσελίδες Πανεπιστημιακών Μαθημάτων Προγραμματισμού με Σημειώσεις

Η Γλώσσα Προγραμματισμού

Ποιο περιβάλλον προγραμματισμού να χρησιμοποιήσω?

Τι είναι τελικά ένας Αλγόριθμος?

Είσοδος και Έξοδος αρχείων στην C++

 


Εισαγωγή στους Αλγορίθμους: Από που να ξεκινήσω?

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

http://delab.csd.auth.gr/~manolopo/Design/index.html Σχεδίαση Αλγορίθμων από το ΑΠΘ
http://www.corelab.ntua.gr/courses/algorithms/  Αλγόριθμοι και Πολυπλοκότητα στο ΕΜΠ
http://www.csd.uoc.gr/~hy380/material.htm     Αλγόριθμοι και Πολυπλοκότητα στο Πανεπιστήμιο Κρήτης


http://stellar.mit.edu/S/course/6/sp08/6.046/materials.html  Εισαγωγή στους Αλγορίθμους από το MIT, με αρκετό υλικό
http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/CourseHome/index.htm  Πολύ υλικό για το ίδιο μάθημα αλλά από την πλατφόρμα ανοικτών μαθημάτων του MIT

Ένα πολύ καλό βιβλίο για αλγορίθμους που δεν είναι τόσο θεωρητικό όσο το CLR είναι το νέο βιβλίο των Dasgupta, Papadimitriou, και Vazirani το οποίο διατίθεται δωρεάν (προκαταρκτική έκδοση) και μπορείτε να κατεβάσετε σε pdf όποιο κεφάλαιο θέλετε
http://www.cs.berkeley.edu/~vazirani/algorithms.html


Ιστοσελίδες Πανεπιστημιακών Μαθημάτων Προγραμματισμού με Σημειώσεις

http://cgi.di.uoa.gr/~ip/  Πανεπιστήμιο Αθηνών, Εισαγωγή στον Προγραμματισμό
http://www.csd.uoc.gr/~hy240/, Πανεπιστήμιο Κρήτης, Δομές Δεδομένων
http://courses.softlab.ntua.gr/progintro/,  Προγραμματισμός σε Pascal, ΕΜΠ
http://courses.softlab.ntua.gr/progtech/, Προγραμματισμός σε C, ΕΜΠ
http://software.hpclab.ceid.upatras.gr/, Εισαγωγή στον Προγραμματισμό με τη C, Πανεπιστήμιο Πατρών
http://www.cs.uoi.gr/~foka/cs413.htm, Εισαγωγή στον Προγραμματισμό, Πανεπιστήμιο Ιωαννίνων


Η Γλώσσα Προγραμματισμού

Μπορείτε να στείλετε τις λύσεις σας σε Pascal ή C ή C++. Επειδή όμως αργά ή γρήγορα θα καταλήξετε σίγουρα στη C καλό θα ήταν να ξεκινήσετε να ασχολήστε με τη C ή τη C++. Μια καλή ιδέα θα ήταν να ξεκινήσετε με το C κομμάτι της C++, ώστε να αξιοποιήσετε και την Standard Template Library της γλώσσας.

Ένα ακόμα πολύ καλό βιβλίο (το καλύτερο ίσως που κυκλοφορεί αυτή τη στιγμή) που σου μαθαίνει όχι μόνο προγραμματισμό σε C αλλά και να λύνεις λίγο πιο δύσκολα προβλήματα και κάνει μια καλή εισαγωγή στους αλγορίθμους είναι το
Η τέχνη και επιστήμη της C του Eric Roberts

Αν φυσικά θέλετε να ξεκινήσετε σιγά σιγά προγραμματισμό σε C ή C++ το καλύτερο εισαγωγικό βιβλίο είναι το
How To Program in C++, Deitel & Deitel.
Είναι πολύ εισαγωγικό και μπορείτε μόνοι σας να ξεκινήσετε να μαθαίνετε C++. Ξεκινάει από το 0 και φτάνει σε αρκετά υψηλό επίπεδο. Υπάρχει μεταφρασμένο και στα ελληνικά αλλά σας συνιστώ την αγγλική έκδοση

Φυσικά αν δε θέλετε να αγοράσετε κάποιο βιβλίο και μπορείτε να διαβάζετε από την οθόνη (άλλωστε ο προγραμματισμός δεν μαθαίνεται με διάβασμα) μπορείτε να δείτε και τις παρακάτω πηγές

http://www.it.uom.gr/project/cmanual/index.htm  Εισαγωγικός οδηγός για προγραμματισμό σε C στα ελληνικά από το πανεπιστήμιο Μακεδονίας

http://www.it.uom.gr/project/cppmanual/cplman/index.htm Εισαγωγικός οδηγός για προγραμματισμό σε C++ στα ελληνικά από το πανεπιστήμιο Μακεδονίας

http://zeus.it.uom.gr/teaching/deitel/siteDeitel.htm Υλικό από το βιβλίο του Deitel

http://ibiblio.org/pub/docs/books/eckel/ Δωρεάν βιβλία από τον Bruce Eckel για εκμάθηση C++ και Java

http://www.techtoolblog.com/archives/195-free-online-programming-books  Δωρεάν Online βιβλία για διάφορες γλώσσες προγραμματισμού


Ποιο Περιβάλλον Προγραμματισμού να χρησιμοποιήσω?

Το περιβάλλον προγραμματισμού που θα χρησιμοποιήσουμε και σας προτείνω είναι το codeblocks το οποίο μπορείτε να το κατεβάσετε από την παρακάτω διεύθυνση
http://www.codeblocks.org/downloads

Ένα άλλο περιβάλλον που μπορείτε να δοκιμάσετε είναι το CodeLite. Το κατεβάζετε από εδώ http://www.codelite.org/

Και φυσικά υπάρχει και το περιβάλλον Visual Studio Express 2010 της Microsoft με το οποίο μπορείτε να σχεδιάσετε και να υλοποιήσετε και παραθυρικές εφαρμογές με γραφικά αν έχετε τον χρόνο και την υπομονή. Καλό θα ήταν πάντως να μην χρησιμοποιήσετε το περιβάλλον αυτό για τον διαγωνισμό αλλά μόνο για ανάπτυξη

Όλα τα παραπάνω περιβάλλοντα μπορείτε να τα κατεβάσετε δωρεάν :-)


Τι είναι τελικά ένας Αλγόριθμος?

Στην παρακάτω διεύθυνση μπορείτε να δείτε τον γρίφο που είπαμε με τον λύκο το πρόβατο και το λάχανο, απλά κάντε κλικ παρακάτω
http://logicgame.com.ua/game.php?buhf=wolf_sheep_cabbage&l=en

και αν θέλετε δείτε και αυτό που είναι πιο δύσκολο
http://logicgame.com.ua/game.php?buhf=river&l=en

Τώρα στο μάθημα ξεκινήσαμε με τον ορισμό του αλγορίθμου,

Αλγόριθμος ονομάζεται μια ακολουθία βημάτων που οδηγεί στη λύση ενός προβλήματος. Τα βήματα αυτά είναι πλήρως καθορισμένα, περιγράφονται με σαφήνεια και έχουν πεπερασμένο πλήθος. Δηλαδή δεν είναι άπειρα. Επίσης η ακολουθία αυτή των βημάτων τερματίζει  σε πεπερασμένο χρόνο (σταματάει κάποια στιγμή). Δηλαδή δεν εκτελείται επ'άπειρον.

Για παράδειγμα μια συνταγή μαγειρικής, αποτελεί αλγόριθμο.


Παρακάτω μπορείτε να διαβάσετε πληροφορίες για τους 2 πιο γνωστούς αλγορίθμους της αρχαιότητας, τον αλγόριθμο του Ευκλείδη για τον υπολογισμό του μέγιστου κοινού διαιρέτη

http://en.wikipedia.org/wiki/Euclidean_algorithm (επιλέξτε ελληνικά στα αριστερά και δείτε μόνο το παράδειγμα)

και το κόσκινο του Ερατοσθένη
http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes


Παρακάτω μπορείτε να διαβάσετε από που προήλθε το όνομα της google που σας είπα στο μάθημα (άσχετο :-) )
http://en.wikipedia.org/wiki/Google


Είσοδος και Έξοδος αρχείων στην C++

Εδώ θα δείξουμε πως διαβάζουμε ένα αρχείο σε C++ και στη συνέχεια πως γράφουμε σε ένα άλλο
Το παρακάτω πρόγραμμα αρχικά διαβάζει ένα αρχείο. Το αρχείο αυτό περιέχει στην πρώτη γραμμή έναν αριθμό Ν και έναν αριθμό Μ.  Ακολουθούν  Μ γραμμές και Ν στήλες από ακέραιους αριθμούς.
    Στη συνέχεια το πρόγραμμα ελέγχει αν κάθε ένας από αυτούς τους αριθμούς είναι άρτιος ή περιττός και γράφει τα αποτελέσματα σε ένα αρχείο εξόδου που έχει αντίστοιχη μορφή, μόνο που τώρα στη θέση κάθε αριθμού είναι το υπόλοιπο της διαίρεσής του με το 2.

#include <iostream.h>
#include <fstream.h>

int main ()
{
      ofstream fout;
      ifstream fin;

      fin.open("input.txt");
      fout.open("output.txt");

      fin >> M >> N ;
      fout << M << N << endl;
      for (i=1; i<=M; i++)
      {
          for (j=1; j<=N; j++)
          {
                fin >> number;
                fout << number % 2 ;
          }
          fout << endl;
      }

      fclose(fin);
      fclose(fout);
      return 0;
}