Προγραμματισμός σε C++ - Λύνουμε Ασκήσεις

...ασύγχρονα μαθήματα από τους guru της κοινότητας

Συντονιστής: the_eye

Re: Προγραμματισμός σε C++ - Λύνουμε Ασκήσεις

Δημοσίευσηαπό M.Jackson » 25 Ιαν 2011, 20:55

Μια εκπληκτική ιστοσελίδα εκμάθησης της γλώσσας: www.learncpp.com
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

Re: Προγραμματισμός σε C++ - Λύνουμε Ασκήσεις

Δημοσίευσηαπό M.Jackson » 07 Φεβ 2011, 17:29

Εκφώνηση:
Να γράψετε ένα πρόγραμμα το οποίο θα διαβάζει από το πληκτρολόγιο δύο ακέραιους αριθμούς. Να κάνετε έλεγχο έτσι ώστε οι ακέραιοι αριθμοί να βρίσκονται μεταξύ των ακεραίων 1 μέχρι 12. Στη συνέχεια να υπολογίζει και να τυπώνει τους πίνακες του πολλαπλασιασμού (από το 1-12) για τους αριθμούς που βρίσκονται στο ενδιάμεσο των ακέραιων αριθμών, συμπεριλαμβανομένων και των ακρινών τιμών. Για παράδειγμα αν διαβάσει τους αριθμούς 5 και 7 να τυπώνει τους πίνακες του 5, 6 και 7.

Κώδικας:
Κώδικας: Επιλογή όλων
#include <iostream>
#include <string>
using namespace std;

int main(){

int pinakas=1;
int pinakas2=1;

do{

cout << "Δώσε τον πρώτο πίνακα (σε αριθμό 1-12) του Πολλαπλασιασμού: ";
cin >> pinakas;
cout << "Δώσε τον δεύτερο πίνακα (σε αριθμό 1-12) του Πολλαπλασιασμού: ";
cin >> pinakas2;

}while((pinakas<=0 || pinakas>=13) || (pinakas2<=0 || pinakas2>=13) || (pinakas>pinakas2));

int x=pinakas;
int result=1;
while(x<=pinakas2){

for(int i=1; i<=12; i++){
result=x*i
;cout << x << " x " << i << " = " << result << endl;
}
cout << endl;
x++;

}

return 0;}


Αποτέλεσμα:
Κώδικας: Επιλογή όλων
Δώσε τον πρώτο πίνακα (σε αριθμό 1-12) του Πολλαπλασιασμού: 6
Δώσε τον δεύτερο πίνακα (σε αριθμό 1-12) του Πολλαπλασιασμού: 9
6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30
6 x 6 = 36
6 x 7 = 42
6 x 8 = 48
6 x 9 = 54
6 x 10 = 60
6 x 11 = 66
6 x 12 = 72

7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
7 x 11 = 77
7 x 12 = 84

8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72
8 x 10 = 80
8 x 11 = 88
8 x 12 = 96

9 x 1 = 9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81
9 x 10 = 90
9 x 11 = 99
9 x 12 = 108

Press [Enter] to close the terminal ...


Γραμμένο στο Linux Ubuntu, μέσω του NetBeans IDE 6.9 με plugin για την C++.
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

Re: Προγραμματισμός σε C++ - Λύνουμε Ασκήσεις

Δημοσίευσηαπό M.Jackson » 18 Φεβ 2011, 20:20

Συμβουλές για ταχύτερα προγράμματα:
Σε διάφορους διαγωνισμούς η ταχύτητα του προγράμματος σας μετρά και ίσως να είναι το κριτήριο για να αναδειχτεί κάποιος νικητής, θα γράψω κάποιες συμβουλές από προσωπικές εμπειρίες, όσοι ξέρουν άλλες συμβουλές παρακαλώ να τις πούνε :)
* Αποφεύγετε τα functions στα προγράμματα σας
* Απλοποιήστε την σκέψη σας χωρίς πολλά "μπιχλιμπίδια"
* Λιγότερους βρόχους αν είναι δυνατό
* Τα if σας να είναι σε σωστή σειρά δηλαδή, αν ελέγχετε πολλές πιθανότητες π.χ βαθμούς σε ένα σχολείο απο 1-20 = Ε-Α να ελέγχετε πρώτα την πιθανότητα λανθασμένης εισόδου πριν αρχίσετε να ελέγχετε αν είναι Α, Β, Γ παρά να έχετε τον έλεγχο λανθασμένης εισόδου στο ELSE και το πρόγραμμα σας να εκτελέσει 4-5 IF και να διαπιστώσει πως δεν μπένει σε κανένα αλλά στο else.

αυτά απο εμένα.
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

Re: Προγραμματισμός σε C++ - Λύνουμε Ασκήσεις

Δημοσίευσηαπό medigeek » 18 Φεβ 2011, 20:33

M.Jackson έγραψε:* Αποφεύγετε τα functions στα προγράμματα σας

Από πότε τα functions αποφεύγονται στον προγραμματισμό; :S
Όχι πως έχω μεγάλη εμπειρία με διαγωνισμούς και προγραμματισμό, απλά λογικό μου φαίνεται πως μεταξύ ταχύτητας και αναγνωσιμότητας του κώδικα, εγώ αν ήμουν κριτής θα διάλεγα την αναγνωσιμότητα/οργάνωση που επιτρέπει και την ευκολία συντηρησης και μετά την ταχύτητα. Κατα τη γνώμη μου, αυτό που πρέπει να προσέχουν είναι να μην επαναλαμβάνουν ένα βήμα/function 100 φορές εαν μπορούν να το εκτελέσουν 1 φορά.
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Προγραμματισμός σε C++ - Λύνουμε Ασκήσεις

Δημοσίευσηαπό M.Jackson » 18 Φεβ 2011, 23:26

δεν είπα να τα αποφύγει κάποιος αλλά να προσπαθεί να λύνει το πρόβλημα αν είναι δυνατό χωρίς functions, δεν το διατύπωσα σωστά.
Είναι γεγονός ότι τα functions καθυστερούν τα προγράμματα. Συμφωνώ αν χρειαστεί π.χ να βρεις το max σε 5 περιπτώσεις λογικό είναι να φτιάξεις ένα function και να το καλείς κάθε φορά, αλλά αν είναι 1 φορά τότε δεν υπάρχει λόγος :)
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

Re: Προγραμματισμός σε C++ - Λύνουμε Ασκήσεις

Δημοσίευσηαπό linuxs » 19 Φεβ 2011, 12:27

Ίσως δεν έχει διατυπωθεί σωστά και να εννοούμε το ίδιο αλλα σε μεγάλα προγράμματα είναι ΠΟΛΥ ποιό κατανοητό και ευκολοδιάβαστο αν υπάρχουν συναρτήσεις. Χωρίς συναρτήσεις γίνεται ένα μπάχαλο!!!

Να έχετε και καλή στοίχηση (όσο μπορείτε βέβαια)!!!! Είναι πολύ σημαντικό για μένα...
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ 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++ - Λύνουμε Ασκήσεις

Δημοσίευσηαπό M.Jackson » 19 Φεβ 2011, 12:51

συμφωνώ, προσωπικά προσπαθώ να βελτιώσω την στοίχιση μου!
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

Re: Προγραμματισμός σε C++ - Λύνουμε Ασκήσεις

Δημοσίευσηαπό simosx » 19 Φεβ 2011, 13:19

M.Jackson έγραψε:
δεν είπα να τα αποφύγει κάποιος αλλά να προσπαθεί να λύνει το πρόβλημα αν είναι δυνατό χωρίς functions, δεν το διατύπωσα σωστά.
Είναι γεγονός ότι τα functions καθυστερούν τα προγράμματα. Συμφωνώ αν χρειαστεί π.χ να βρεις το max σε 5 περιπτώσεις λογικό είναι να φτιάξεις ένα function και να το καλείς κάθε φορά, αλλά αν είναι 1 φορά τότε δεν υπάρχει λόγος :)


Είναι καλό να φτιάχνεις συναρτήσεις, ακόμα και για κάτι σαν το max(). Είναι καλό, διότι με αυτό το τρόπο θα γίνει συνήθεια.

Καθυστερεί πάρα πολύ το πρόγραμμα αν κάτι είναι σε συνάρτηση; Δεν υπάρχει τέτοια καθυστέρηση που να δημιουργεί πρόβλημα. Και η πιθανή καθυστέρηση θα είχε νόημα όταν καλείς τη συνάρτηση αυτή χιλιάδες φορές. Η απάντηση που είναι να δοθεί εδώ είναι η ίδια απάντηση στο ερώτημα «Να γράψω σε Assembly αντί σε C ώστε το πρόγραμμα μου να είναι ταχύτερο;». Η απλή απάντηση είναι ότι το κέρδος σε ταχύτητα είναι αμελητέο σε σχέση με τη δυσκολία που προσθέτεις με το να γράφεις το πρόγραμμα σε ακαταλαβίστικο τρόπο. Είναι τρομερά δύσκολο να γράψεις ένα σημαντικό πρόγραμμα με κάποιο μέγεθος σε γλώσσα assembly ή όταν προσπαθείς να αποφύγεις τις συναρτήσεις.

Και η απάντηση στο ερώτημά σου, για τις μικρές συναρτήσεις όπως min/max, τις γράφεις ως π.χ.
Κώδικας: Επιλογή όλων

static int inline max(int a, int b)
{
...
}

Περισσότερα στο http://gcc.gnu.org/onlinedocs/gcc/Inline.html
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Προγραμματισμός σε C++ - Λύνουμε Ασκήσεις

Δημοσίευσηαπό M.Jackson » 19 Φεβ 2011, 13:38

μάλιστα, οκ κατάλαβα
Άβαταρ μέλους
M.Jackson
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1053
Εγγραφή: 28 Μάιος 2010, 19:06
Εκτύπωση

Re: Προγραμματισμός σε C++ - Λύνουμε Ασκήσεις

Δημοσίευσηαπό Stefanos » 14 Μαρ 2011, 18:40

Τι compiler χρησιμοποιείς? Ξεκίνησα σήμερα να διαβάζω με βάση αυτό viewtopic.php?f=53&t=16695
Το terminal ομως μου βγάζει όλη την ώρα

Κώδικας: Επιλογή όλων
fatal error: iostream: No such file or directory
compilation terminated.


Γιατί ?? Έχει κάποιο κόλλημα ο gcc
Γνώσεις ⇛ Linux: Ελάχιστες ┃ Προγραμματισμός: Ελαχιστος┃ Αγγλικά: Πολύ Καλά
Λειτουργικό ⇛ Linux Ubuntu 16.04
Προδιαγραφές ⇛ Dual core Intel i5-5200U CPU @ 2,2 GHz│4GB Ram│ AMD Radeon R5 M330 1 GB│ Intel Wildcat Point-LP High Definition Audio Controller
Laptop ⇛ Lenovo G50-80
Stefanos
punkTUX
punkTUX
 
Δημοσιεύσεις: 230
Εγγραφή: 03 Αύγ 2008, 03:59
Εκτύπωση

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

Επιστροφή στο Το Σχολείο του Φόρουμ - Ασύγχρονα Μαθήματα