Jump to content



Μαθήματα C++ [OutOfSchool 2010]


Dr.Paneas

Recommended Posts

Κατεβασα την εκδοση με το mingw αλλα παλι δεν κανει compile...πηγα να αλλαξω τον compiler απο το menu αλλα ηταν διαφορα που ελεγαν GCC και δεν ηξερα πιο να διαλεξω...τωρα να βαλω Linux λιγο δυσκολο αλλα οχι και απιθανο.

Υπάρχουν και Virtual Machines..

http://www.virtualbox.org/

Link to comment
Share on other sites

  • Replies 87
  • Created
  • Last Reply

Λοιπόν, εγώ έχω τον gcc 4.4.1. Για να μου παίξει το system("PAUSE"); πρέπει να κάνω #include <cstdlib>.

Πιο συγκεκριμένα τα system("PAUSE"); και std::system("PAUSE"); δεν παίζουν χωρίς να κάνω #include <cstdlib>.

Το std::system("PAUSE"); ΧΩΡΙΣ #include <cstdlib> επιστρέφει λάθος ότι το system δεν είναι member του std .

Ποια είναι εν τέλει η διαφορά ανάμεσα στους δύο τρόπους? To std αναφέρεται σε όλους τους standard headers που ορίζουμε δηλαδη?

Link to comment
Share on other sites

Το std είναι ένα namespace της Standard Library και περιέχει κάποιες λειτουργίες, όπως για παράδειγμα το input/output μέσω των εντολών cin και cout.

το system είναι εντολή που δεν περιέχεται στο std namespace. Περιέχεται στο cstdlib namespace. Για αυτό πρέπει να το κάνεις include.

Υπάρχει ιδιομορφία στις ρυθμίσεις των IDE, για αυτό σ'άλλους παίζει, ενώ σε άλλους θέλει include. Έχω δει IDE που δεν χρειάζεται να ορίσεις τον τύπο της main, ούτε την βάλεις να κάνει return ( τρελααααα πράγματα).

Εγώ προτείνω να σρησιμοποιείς όποιον τρόπο σε βολεύει και έχεις συνιθήσει. Αυτό που κάνουμε στην ουσία είναι αν αναγκάζουμε το command line να παραμένει ανοιχτό μέχρι να πατήσουμε κάποιο κουμπι. Με άλλα λόγια π@π@ριες.

Διαλέξτε έναν τρόπο και μην σας πολυ ενδιαφέρειbanana

Link to comment
Share on other sites

@mauros

Σωστό το πρώτο προγραμματάκι με τους στίχους και έξυπνη η ιδέα να το κάνεις σε C++.

Επίσης να σου πω πως αν το εγραφες σε Windows περιβάλλον τότε θα έπρεπε να:

1)#include <windows.h>

2)Sleep αντί για sleep . Και το όρισμα είναι σε ms και όχι σε s.


#include <iostream>
#include <windows.h>

int main()
{

SetConsoleOutputCP(1253); // Greek ISO

std::cout << " Μαίρη Μαράντη - θα τα γκρεμίσω \n\n\n ";
Sleep( 300 );
std::cout << " Όλα τα βλέπω σκοτεινά και μπερδεμένα \n ";
Sleep( 400 );
std::cout << " λες και με βρήκαν όλες οι καταστροφές \n ";
Sleep( 400 );
std::cout << " μέσα στην τρέλα μου συνάντησα και σένα \n ";
Sleep( 400 );
std::cout << " και η ζωή μου πήρε ανάποδες στροφές \n\n ";
Sleep( 400 );
std::cout << " θα πάρω φόρα, θα πάρω φόρα \n ";
Sleep( 200 );
std::cout << " να τα γκρεμίσω \n ";
Sleep( 300 );
std::cout << " αυτά που μου 'χουνε μπερδέψει τη ζωή \n\n ";
Sleep( 300 );
std::cout << " θα πάρω φόρα, θα πάρω φόρα \n ";
Sleep( 200 );
std::cout << " να τα γκρεμίσω\n ";
Sleep( 300 );
std::cout << " να πάρω επιτέλους μια αναπνοή \n\n ";
Sleep( 400 );
std::cout << " Έχει θολώσει το μυαλό μου απ' το σκοτάδι \n ";
Sleep( 300 );
std::cout << " και η καρδιά μου έχει τόση μοναξιά\n ";
Sleep( 300 );
std::cout << " πάνω στη τρέλα μου μιλάς και συ για αγάπη \n ";
Sleep( 300 );
std::cout << " κι εγώ καρδιά μου νιώθω μόνο παγωνιά \n\n ";
Sleep( 300 );
std::cout << " θα πάρω φόρα, θα πάρω φόρα \n ";
Sleep( 200 );
std::cout << " να τα γκρεμίσω \n ";
Sleep( 300 );
std::cout << " αυτά που μου 'χουνε μπερδέψει τη ζωή \n\n ";
Sleep( 300 );
std::cout << " θα πάρω φόρα, θα πάρω φόρα \n ";
Sleep( 200 );
std::cout << " να τα γκρεμίσω \n ";
Sleep( 300 );
std::cout << " να πάρω επιτέλους μια αναπνοή \n\n\n ";
Sleep( 500 );
std::cout << " Ευχαριστούμε, ευχαριστούμε πολύ ";
Sleep( 200 );
return(0);
}

Το πρόγραμμα με το tab ήταν επίσης καλό.


#include <iostream>
int main ()
{
std::cout << "|\t." << std::endl; //logika i teleia tha metakinithei oso to tab,ara to tab antistoixei se 7 kena
std::cout << "|123456789" << std::endl;
return(0);
}

Όντως είναι 7 space = tab

πχ αν πατήσω όντως 7 φορές το space


#include <iostream>
int main ()
{
std::cout<<"www.outofspecs.gr\t-\tOOS\nwww.outofspecs.gr - OOS"<<std::endl; //space=7
return(0);
}

Είναι όντως 7 ;)

Το τρίτο και μικρότερο πρόγραμμα είναι:


int main ()
{
return(0);
}

Link to comment
Share on other sites

@redgiorgos:

Στην άσκηση ρωτάω τι κάνει το Statement 4+3

Απ: Αυτό που κάνει είναι μία πρόσθεση 4+3=7

Τώρα το αν το εμφανίσει, αν το αποθηκεύσει ή ό,τι άλλο, δεν σε ενδιαφέρει.

Απλά κάνει μια πρόσθεση :) Δηλαδή δεν έχει side effect.

μου έστειλες:


#include <iostream>
int main()
{
std::cout<<4+3<<std::endl;
system("PAUSE");
return 7;
}

Λοιπόν, εδώ εσύ το εμφανίζεις στο Output Stream και βλέπει το αποτέλεσμα της πρόσθεσης. Δηλαδή τώρα το έβαλες να έχει side effect.

Ωραίος μέχρι εδώ.

Έχεις όμως λάθος στο return statement. Το return είναι πάντα 0. Το γεγονός ότι κάπου κάνει 4+3

το αποτέλεσμα του επιστρέφει στο OutputStream και δεν έχει να κάνει με το τι επιστρέφει η main. Η main επιστρέφει πάντα 0.

Τώρα σχετικά με το πρόγραμμα και του στίχους, θα ήθελα κάτι σε τέτοιο ας πούμε style:


#include <iostream>
int main()
{
std::cout << "Master of Puppets I'm pulling your strings."
<< "\nTwisting your mind and smashing your dreams."
<< "\nBlinded by me, you can't see a thing."
<< "\nJust call my name, 'cause I'll hear you scream."
<< "\nMaster\tMaster.\n\n" << std::endl;
system ("PAUSE");
return 0;
}

όχι ότι το δικό σου είναι λάθος:


// askhsh 2
// den grafw oloklhro to tragoudi giati einai polu pragma
#include <iostream>
int main()
{
std::cout << "Master of Puppets I'm pulling your strings.Twisting your mind and smashing your dreams.Blinded by me, you can't see a thing.Just call my name, 'cause I'll hear you scream.Master.Master.Just call my name, 'cause I'll hear you scream.Master.Master " << std::endl;
system ("PAUSE");
return 0;
}

αλλά δεν έχεις όμορφο Output. Όπως είπαμε το string literal δεν γίνεται να σπάσει γι αυτό ίσως αναγκάστηκες να κάνεις copy paste

όλο το κείμενο μεσα σε μόνο δύο double quotes " .... " . Σου δείχνω έναν τρόπο να το αποφύγεις αυτό ;).

Link to comment
Share on other sites

Γιατί όταν βάζω το SetConsoleOutputCP(1253); // Greek ISO μου λέει ο compiller

SetConsoleOutputCP was not declared in this scope?

έχω gcc 4.4.1

*(θελεις <windows.h> νομίζω.) <---- τι hijack είναι αυτό ; :p

και με windows.h και χωρίς τα ίδια λέει!

Link to comment
Share on other sites

ASKHSEIS:

1) Η ασκηση με τους CPU Cores :

@redgiwrgos


// askhsh 2
#include <iostream>
#include <string>

int main()
{
std::cout << "Enter the number of your cpu cores: ";

std::string cores;
std::cin >> cores;

std::cout << "Throw away your " << cores << " core cpu and buy a six-core i7!" << std::endl;
system ("PAUSE");
return 0;
}

Ωραίος ο παίκτης ;)

@Mauros


#include <iostream>
#include <string>

int main ()
{
std::string cores;
std::cout << " Posous pirines exei o epeksergastis sou? " << std::endl;
std::cin >> cores;
std::cout << cores << " ..." << "malista." << std::endl;
return 0;
}

Οκ ... μάλιστα :D

@yiancar


//Aftos edo rotai posous pirines exis
#include <iostream>
#include <string>

int main ()
{
//Rotame tous pirines
std::cout << "Posous pirines exi to cpuri sou?";

//Edo vazoume tin apantisi mas
std::string pirines;
std::cin >> pirines;

//Edo mas apantai...
std::cout << "ke poli wow exis " << pirines << " pirines sto pc sou :)" << std::endl;
return 0;
}

Πολλα καλόν ;)

2) Η άσκηση με τα ονοματεπώνυμα:

@yiancar


//Aftos edo rotai posous pirines exis
#include <iostream>
#include <string>

int main ()
{
//rotame onoma
std::cout << "pes mou to onoma sou ";

//Edo vazoume tin apantisi mas gia to onoma
std::string onoma;
std::cin >> onoma;

//rotame epi8eto
std::cout << "pes mou to epi8eto sou ";

//Edo vazoume tin apantisi mas gia to epi8eto
std::string epi8eto;
std::cin >> epi8eto;

//Edo mas apantai...
std::cout << "Giasou, " << onoma << " " << epi8eto << std::endl;

return 0;

}

Φύγε το comment :D

@mauros


#include <iostream>
#include <string>

int main ()
{
std::string name;
std::cout << " Onomateponimo : ";
getline(std::cin, name); //thanx to googlis!
std::cout << "Se lene " << name << "!"<<std::endl;
return 0;
}

Congrats my boy! That's the spirit ;)

Αλλά μετά ακριβώς κάτω από κάθε getline βάζουμε:

std::cin.ignore();

και ο λογος που το κάνουμε είναι γιατί η επιπλέον γραμμή που διαβάζει προκαλέι προβλήματα σε μεταγενέστερα istream objects.

@redgiorgos


//askhsh 3
#include <iostream>
#include <string>

int main()
{
std::cout << "Please enter your first name: ";

std::string name;
std::cin >> name;

std::cout << "Please enter your surname: ";

std::string surname;
std::cin >> surname;

std::cout << "Hello, " << name << " " << surname << "!" << std::endl;
system ("PAUSE");
return 0;
}

Ωραίο coding style Γιώργο ;)

H σωστή υλοποίηση είναι αυτή του mauros. Εγώ, αφου βρήκατε το σωστό θα σας δέιξω μία πολύ περιεργη buggy εκδοχή xmas1

Δώστε ολόκληρο το όνομά σας από την πρώτη κι ολας φορά ;):D :D :D

Γίνεται overflow στο istream με αποτέλεσμα να μην σας ζητάει ξανά το name, αλλά να παίρνει αυτόματα την λέξη μετά το whitespace ( κενό ), δηλαδή το επίθετο :p


#include <iostream>
#include <string>

int main()
{
std::cout << "What is your name? ";
std::string name;
std::cin >> name;
std::cout << "Onoma: " << name << std::endl ;
std::cin >> name;
std::cout << "Epi8eto: " << name << std::endl;
return 0;
}

3) Άσκηση με την ηλικία

@mauros


#include <iostream>

int main()
{
loop:
int age;

std::cout << "pes mou poso xronon eisai xristi.. " << std::endl;
std::cin >> age;

if (std::cin.fail())
{
std::cout<< "prepei na valeis arithmo\n" <<std::endl;
std::cin.clear();
std::cin.get();
goto loop;
}

if (age <= 0)
{
std::cout << "Plaka me kaneis?\n\n";
std::cin.clear();
std::cin.get();
goto loop;
}

if (age >= 123)
{
std::cout<< "Tha se evlepa stin TV\n" << std::endl;
std::cin.clear();
std::cin.get();
goto loop;
}
std::cout << "Aisios exeis ftasei ta " << age << "!" << std::endl;
return 0;
}

Πολύ έξυπνα βρήκες το cin.fail αλλά το goto όταν το είδα μου έπασαν όλα τα μαλλιά :eek: Γενικά μην το χρησιμοποιείς, εκτός κ αν γράφεις Assembly :cool:

Μία υλοποίηση που τσεκάρει πχ για γραμμάτα θα ήταν:


#include <iostream>
#include <string>
#include <sstream>

int main ()
{
std::string input;
for( ;; )
{
int val;
std::stringstream sstr;
//std::cout << prompt;
std::cout << "Enter your age: ";

if (!std::getline(std::cin, input))
return false; // Failed to read input.
sstr << input;

if (sstr >> val) {
return true;
} else {
std::cout << "Error, not a valid number" << std::endl;
}

}

return 0;
}

Link to comment
Share on other sites

:o Δεν έχω ιδέα απο loop κτλ γι'αυτό θα καραφλιάσεις πολλάκις!

Tο goto το πήρε το μάτι μου στο http://www.cplusplus.com και κουτσά στραβά με δοκιμές κατάφερα και το έχωσα.

Αν κατάλαβα απο τον κώδικα παραπάνω με το !std::getline(std::cin, input) έχεις το cin.fail.Επίσης άμα στο input βάλεις γράμμα τρώς μούτζα :) (επειδή η stringstream καταχωρεί την τιμή στο val με βάση τι τύπου data type είναι το val? )

Μου φαίνεται πως πρέπει να μας ξαναπάρεις γραμμούλα-γραμμούλα και καπάκια for,if,else κτλ

EDIT: θα μας πείς για την sstream?

:gyros

*αντί για false και true μπορούμε να βάλουμε 1 και 0 αντίστοιχα?

Link to comment
Share on other sites

όχι δεν θα σας πω τίποτα :D

Θα τα δούμε στην πορεία των μαθημάτων. Ο λόγος που έβαλα αυτή την άσκηση ήταν γιατί ο Λεωνίδας ήθελε κάτι πιο δύσκολο ;)

Στο επόμενο μάθημα θα μάθουμε να δημιουργούμε πλαίσιο γύρω από μία λέξη. Και στα καπάκια θα αρχίσουμε τους loops ;)

Link to comment
Share on other sites

  • 2 weeks later...

Κατ'αρχας να συγχαρω και εσενα οσο και το site για την δυνατοτητα που δινεις σε εμας που λατρευουμε τον προγραμματισμο να μαθουμε κατι ΔΩΡΕΑΝ στα ΕΛΛΗΝΙΚΑ.

επιπλεον να σε ευχαριστησω για τον χρονο που σπαταλας τοσο για τα μαθηματα οσο και για την διορθωση του κωδικα που θα αποστελλουμε

εχω σπουδασει στο τμημα εφαρμοσμενης πληροφορικης και πολυμεσων του τει κρητης και εχω βασικες γνωσεις σε C,pascal,java,HTML,CSS,PHP αλλα και απο την ενασχοληση μου με το flash εχω αποκτηση ανωτερη γνωση σε ActionScript 3.0

τρεχω win 7 και μεχρι τωρα χρησημοποιουσα το notepad++ αλλα τωρα ηρθε η ωρα για νεα εργαλεια ;)

τα λεμε στην "ταξη"

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

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