Απορίες σε απλά πραγματάκια σε C++

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
User avatar
para
Wow! Terabyte level
Wow! Terabyte level
Posts: 3648
Joined: Sat Nov 04, 2006 2:59 am
Academic status: Alumnus/a
Gender:

Απορίες σε απλά πραγματάκια σε C++

Postby para » Sun Sep 21, 2008 12:44 pm

Code: Select all

    cin >> metavliti;
    while (metavliti<1 || metavliti>50)
    {
        cout << "Minima1" << endl << "Minima2";
        cin >> metavliti;
    }
Οκ..

Απ' αυτό αν δώσω τιμή -1 στη μεταβλητή παίρνω το εξής:
Minima1
Minima2Minima1
Minima2Minima1
...

Γιατί δεν περιμένει να πάρει ξανά τιμή απ' το cin;
Πώς να καταφέρω αυτό που θέλω;

--------------

2η απορία:

Code: Select all

    char** table = new char*[megethos];
    for (unsigned i=0;i<megethos;i++)
    {
        cin >> table[i];
    }
Εδώ δε μου βάζει το τρίτο στοιχείο στον πίνακα αν δώσω οποιοδήποτε megethos>=3

--------------

3η απορία:
Γιατί κάνει 10 ώρες να αρχίσει το run? :smt013 :smt013
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
cyberpython
Mbyte level
Mbyte level
Posts: 654
Joined: Wed Nov 21, 2007 8:18 pm
Academic status: Alumnus/a
Gender:
Location: Αθηνα
Contact:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby cyberpython » Sun Sep 21, 2008 3:55 pm

1:
Το παρακάτω δουλεύει μια χαρά :

Code: Select all

#include <iostream>
using namespace std;

int main(){
   int metavliti;
   cin >> metavliti;
   while (metavliti<1 || metavliti>50)
   {
      cout << "Minima1" << endl << "Minima2" << endl;
      cin >> metavliti;
   }
   return 0;
}


Έκδοση g++ :
g++ (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)


Αποτελέσματα:

ImageImage


2:
Η C++ έχει strings(οπότε δε βλέπω το λόγο να παιδεύεσαι με char*). Δες το παρακάτω:

Code: Select all

#include <iostream>
#include <cstdlib>
#include<string>
using namespace std;

int main(){
   unsigned megethos;
   char temp[100];
   
   cin.getline(temp,100);
   megethos = atoi(temp);
   
   string table[megethos];      
   for (unsigned i=0;i<megethos;i++)
   {      
      getline(cin,table[i]);
   }
   
   cout << "------------------------------------" << endl;
   
   for (unsigned i=0;i<megethos;i++)
   {      
      cout << table[i] << endl;      
   }   
      
   cout << "---------------THE END---------------" << endl;
   return 0;
}


Αποτελέσματα:

ImageImage


3: Μάλλον χρησιμοποιείς MSVC

Edit: Ρίξε μια ματιά σε αυτό
User avatar
para
Wow! Terabyte level
Wow! Terabyte level
Posts: 3648
Joined: Sat Nov 04, 2006 2:59 am
Academic status: Alumnus/a
Gender:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby para » Sun Sep 21, 2008 6:17 pm

1. Είχα ορίσει τη μεταβλητή unsigned οπότε στην είσοδο -1 τα έπαιζε, λογικό :oops: :oops:
Συγγνώμη για την ταλαιπωρία :???:

2. Δε χρησιμοποίησα την atoi, αλλά το υπόλοιπο που μου έδωσες λειτούργησε κανονικά με την προσθήκη ενός cin.ignore(); (ειδάλλως έτρωγε μια γραμμή).
Ευχαριστώ για τη βοήθεια :smt002 :-)

3. Dev-C++ αλλά το συνήθισα το "περίμενε" πλέον, οπότε οκ :ρ
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby proskopos » Sun Oct 05, 2008 11:32 pm

Έχω αυτό το παράδειγμα

Code: Select all

#include <iostream>
using namespace std;

int main ()
{
  int firstvalue, secondvalue;
  int * mypointer;

  mypointer = &firstvalue;
  *mypointer = 10;
  mypointer = &secondvalue;
  *mypointer = 20;
  cout << "firstvalue is " << firstvalue << endl;
  cout << "secondvalue is " << secondvalue << endl;
  return 0;
}


Αυτό θα εμφανίσει τα

Code: Select all

firstvalue is 10
secondvalue is 20


Δεν μπορώ να καταλάβω γιατί η αλλαγή του *mypointer σε 10 (δηλαδή η διεύθυνση στην μνήμη που δείχνει ο operator mypointer), αλλάζει και την τιμή του firstvalue.. Αφού το τι τιμή θα έχει το firstvalue δεν δηλώνεται...
Εν συνεχεία το ίδιο γίνεται και με τον secondvalue...! Μπορεί κάποιος να μου το εξηγήσει...;
Είχα βρεί προηγουμένος ότι αν για παράδειγμα έχουμε σαν παράμετρο μιας διαδικασίας μια μεταβλητή με το & μπροστά, τότε η αλλαγή της επιρρεάζει την μεταβλητή αυτή και μέσα και έξω από την διαδικασία... Αλλά τώρα το & έχει μπεί για να δείξει τον τύπο του operator...
Μάλλον βέβαια κάνει την ίδια δουλειά αλλά μπορεί κάποιος να μου το εξηγήσει στα σίγουρα...;
Επίσης αν ήταν ο κώδικας έτσι:

Code: Select all

]#include <iostream>
using namespace std;

int main ()
{
  int firstvalue, secondvalue;
  int * mypointer;

  mypointer = *firstvalue;
  *mypointer = 10;
  mypointer = *secondvalue;
  *mypointer = 20;
  cout << "firstvalue is " << firstvalue << endl;
  cout << "secondvalue is " << secondvalue << endl;
  return 0;
}
τι θα γινόταν...;
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
para
Wow! Terabyte level
Wow! Terabyte level
Posts: 3648
Joined: Sat Nov 04, 2006 2:59 am
Academic status: Alumnus/a
Gender:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby para » Sun Oct 05, 2008 11:46 pm

Code: Select all

  mypointer = &firstvalue;
  *mypointer = 10;

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

Καλύτερα: Ο mypointer έχει για τιμή μια διεύθυνση (τη διεύθυνση της firstvalue) και το περιεχόμενο της διεύθυνσης είναι το *mypointer (η τιμή της firstvalue). Το *mypointer εδώ παθαίνει ό,τι το firstvalue κι ανάποδα.

Αν δεν έγινα κατανοητός πες μου :χ

--

Code: Select all

  mypointer = *firstvalue;
  *mypointer = 10;

Το * δεν μπορεί να μπει μπροστά από το firstvalue. O compiler θα πετάξει invalid type argument of `unary *'
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby proskopos » Sun Oct 05, 2008 11:58 pm

para wrote:

Code: Select all

  mypointer = &firstvalue;
  *mypointer = 10;

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

Αν δεν έγινα κατανοητός πες μου :χ

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

Code: Select all

include <iostream>
using namespace std;

int main ()
{
  int firstvalue = 5, secondvalue = 15;
  int * p1, * p2;

  p1 = &firstvalue;  // p1 = address of firstvalue
  p2 = &secondvalue; // p2 = address of secondvalue
  *p1 = 10;          // value pointed by p1 = 10
  *p2 = *p1;         // value pointed by p2 = value pointed by p1
  p1 = p2;           // p1 = p2 (value of pointer is copied)
  *p1 = 20;          // value pointed by p1 = 20
 
  cout << "firstvalue is " << firstvalue << endl;
  cout << "secondvalue is " << secondvalue << endl;
  return 0;
}

και αποτελέσματα:

Code: Select all

firstvalue is 10
secondvalue is 20


Αυτό που καταλαβαίνω εγώ είναι:
Ή τιμή του pointer p1 γίνεται η διεύθυνση στην μνήμη του firstvalue (αντίστοιχα και το p2), εν συνεχεία η διεύθυνση στην μνήμη που δείχνει ο p1 γίνεται 10 (δηλαδή και το &firstvalue == 10), μετά και η διεύθυνση στην μνήμη που δείχνει ο p2 γίνεται 10... (Άρα και &secondvalue == 10) Ύστερα η τιμή του p1 γίνεται ίση με την τιμή του p2... (άγνωστη τιμή...) Και στο τέλος η διεύθυνση στην μνήμη που δείχνει ο p1 γίνεται 20.. Άρα και &firstvalue == 20...
Άρα εμένα μου βγαίνουν ανάποδα... Τις πταίει...; :)
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
para
Wow! Terabyte level
Wow! Terabyte level
Posts: 3648
Joined: Sat Nov 04, 2006 2:59 am
Academic status: Alumnus/a
Gender:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby para » Mon Oct 06, 2008 12:05 am

Code: Select all

include <iostream>
using namespace std;

int main ()
{
  int firstvalue = 5, secondvalue = 15;
  int * p1, * p2;

  p1 = &firstvalue;  // p1 == διεύθυνση της fv. *p1 == fv == 5
  p2 = &secondvalue; // p2 == διεύθυνση της sv. *p2 == sv == 15
  *p1 = 10;          // *p1 == 10. fv == 10
  *p2 = *p1;         // *p2 == 10. sv == 10.
  p1 = p2;           // O p1 δείχνει εκεί που δείχνει και ο p2, δηλαδή στο sv
  *p1 = 20;          // άρα *p1 == 20 σημαίνει ότι θα αλλάξει η τιμή του sv (γιατί σε αυτό έδειχνε ο p2) σε 20. ( sv == 20 )
 
  cout << "firstvalue is " << firstvalue << endl;
  cout << "secondvalue is " << secondvalue << endl;
  return 0;
}

και αποτελέσματα:

Code: Select all

firstvalue is 10
secondvalue is 20
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby proskopos » Mon Oct 06, 2008 12:10 am

para wrote:

Code: Select all

include <iostream>
using namespace std;

int main ()
{
  int firstvalue = 5, secondvalue = 15;
  int * p1, * p2;

  p1 = &firstvalue;  // p1 == διεύθυνση της fv. *p1 == fv == 5
  p2 = &secondvalue; // p2 == διεύθυνση της sv. *p2 == sv == 15
  *p1 = 10;          // *p1 == 10. fv == 10
  *p2 = *p1;         // *p2 == 10. sv == 10.
  p1 = p2;           // O p1 δείχνει εκεί που δείχνει και ο p2, δηλαδή στο sv
  *p1 = 20;          // άρα *p1 == 20 σημαίνει ότι θα αλλάξει η τιμή του sv (γιατί σε αυτό έδειχνε ο p2) σε 20. ( sv == 20 )
 
  cout << "firstvalue is " << firstvalue << endl;
  cout << "secondvalue is " << secondvalue << endl;
  return 0;
}

και αποτελέσματα:

Code: Select all

firstvalue is 10
secondvalue is 20

Και πάλι έχεις απόλυτο δίκιο.... Και πάλι ευχαριστώ... :-D :)
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby proskopos » Mon Oct 06, 2008 10:07 pm

Αν θέλω να φτιάξω μια δυναμική μνήμη που να δέχεται ακέραιους (σε έναν πίνακα), και να έχω έναν pointer στην αρχή...
Γράφω πχ...

Code: Select all

bobby = new int [5];

αυτό συνέχεια θα ανανεώνει τις θέσεις μνήμης κατα 5, και αν κάποια στιγμή η μνήμη "τελειώσει" θα βγάλει exception και θα τερματίσει το πρόγραμμα...

Ενώ αν έγραφα..

Code: Select all

bobby = new (nothrow) int [5];

και η μνήμη "τελείωνε", αντί για exception και τερματισμό του προγράμματος, θα έβγαζε έναν null pointer και το πρόγραμμα θα συνέχιζε κανονικά...
Σωστά το έχω καταλάβει...;
Επίσης τι νόημα θα έχει στον δέυτερο τρόπο ο null pointer...; Επίσης πως θα καταλάβουμε το σφάλμα, αφου δεν θα έχουμε exception η κάτι προειδοποιητικό....;

Spoiler: εμφάνιση/απόκρυψη
Περιμένοντας τον πάρα να απαντήσει... :-D


edit: Το πως θα καταλάβουμε το σφάλμα, το βρήκα... Θα τσεκάρουμε την τιμή του pointer, ώστε αν είναι 0 να γίνεται μια συγκεκριμένη πράξη... (αν υπάρχει και άλλος τρόπος, παρακαλώ πείτε μου...)
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
para
Wow! Terabyte level
Wow! Terabyte level
Posts: 3648
Joined: Sat Nov 04, 2006 2:59 am
Academic status: Alumnus/a
Gender:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby para » Tue Oct 07, 2008 1:23 am

proskopos wrote:Αν θέλω να φτιάξω μια δυναμική μνήμη που να δέχεται ακέραιους (σε έναν πίνακα), και να έχω έναν pointer στην αρχή...
Γράφω πχ...

Code: Select all

bobby = new int [5];

αυτό συνέχεια θα ανανεώνει τις θέσεις μνήμης κατα 5, και αν κάποια στιγμή η μνήμη "τελειώσει" θα βγάλει exception και θα τερματίσει το πρόγραμμα...
Αυτό θα απαιτήσει απ' τη μνήμη 5 θέσεις για int και αν υπάρχει χώρος για 5 θέσεις τότε προχωράει κανονικά, αν όχι συνεχίζει με την περίπτωση του null pointer που λες παρακάτω ή σταματάει με exception.
Αν υπάρχει χώρος, κάθε στοιχείο που βάζεις μετά απ' αυτά τα 5 θα απαιτεί απ' τη μνήμη μόνο 1 θέση, όχι καινούρια 5άδα. Διορθώστε με αν κάνω λάθος.

proskopos wrote:Ενώ αν έγραφα..

Code: Select all

bobby = new (nothrow) int [5];

και η μνήμη "τελείωνε", αντί για exception και τερματισμό του προγράμματος, θα έβγαζε έναν null pointer και το πρόγραμμα θα συνέχιζε κανονικά...
Σωστά το έχω καταλάβει...;
Ναι


Επίσης τι νόημα θα έχει στον δέυτερο τρόπο ο null pointer...;
Γλιτώνεις απ' το να σταματήσει να εκτελείται το πρόγραμμά σου, αν εννοείς γιατί τον δεύτερο αντί τον πρώτο.
Αν εννοείς γιατί να επιστρέφει null pointer το new, για να πάρει τιμή ο bobby που περιμένει.
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby proskopos » Wed Oct 08, 2008 12:38 am

Προσπάθησα να τρέξω το παρακάτω και το netbeans μου έβγαζε κάτι "κουλά" (νομίζω) σφάλματα...

Code: Select all

#include <map>
#include <iostream>
#include <string>
#include <fstream>
int main()
{
    map<string, unsigned> wordOccurrences;
    string line;
    ifstream inFile("file1.txt");
    // Μετράω πόσες φορές εμφανίζεται η κάθε λέξη:
    while(getline (inFile,line)
    {
       wordOccurrences[line]++;
    }
    cout <<  wordOccurrences[line];
}

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

Και μου βγάζει για σφάλματα..

Code: Select all

Running "C:\cygwin\bin\make.exe  -f Makefile CONF=Debug" in C:\......

/usr/bin/make -f nbproject/Makefile-Debug.mk SUBPROJECTS= .build-conf
make[1]: Entering directory `/cygdrive/c/....mkdir -p build/Debug/Cygwin-Windows
g++.exe    -c -g -o build/Debug/Cygwin-Windows/newfile.o newfile.cpp
newfile.cpp: In function `int main()':
newfile.cpp:7: error: `map' undeclared (first use this function)
newfile.cpp:7: error: (Each undeclared identifier is reported only once for each function it appears in.)
newfile.cpp:7: error: `string' undeclared (first use this function)
newfile.cpp:7: error: expected primary-expression before "unsigned"
newfile.cpp:7: error: expected `;' before "unsigned"
newfile.cpp:8: error: expected `;' before "line"
newfile.cpp:9: error: `ifstream' undeclared (first use this function)
newfile.cpp:9: error: expected `;' before "inFile"
newfile.cpp:11: error: `inFile' undeclared (first use this function)
newfile.cpp:11: error: `line' undeclared (first use this function)
newfile.cpp:11: error: `getline' undeclared (first use this function)
newfile.cpp:12: error: expected `)' before '{' token
newfile.cpp:13: error: `wordOccurrences' undeclared (first use this function)
newfile.cpp:15: error: `cout' undeclared (first use this function)
make[1]: *** [build/Debug/Cygwin-Windows/newfile.o] Error 1
make[1]: Leaving directory `/cygdrive/c/........
make: *** [.build-impl] Error 2

Build failed. Exit value 2.



Δεν καταλαβαίνω το γιατί... Μπορεί κάποιος (para :) :?: ) να μου το εξηγήσει...;
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
netharis
Venus Former Team Member
Posts: 1845
Joined: Sun Jul 15, 2007 2:37 pm
Academic status: Alumnus/a
Gender:
Location: Seattle, Washington
Contact:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby netharis » Wed Oct 08, 2008 1:02 am

Καταρχάς έχεις ένα συντακτικό λάθος, στο while έχεις ξεχάσει μία παρένθεση.

Code: Select all

while(getline (inFile,line))
{
wordOccurrences[line]++;
}

To map, καθώς και το string είναι στο standard namespace, άρα κάτω απο τα preprocessor directives, βάλε

Code: Select all

using namespace std;


Χωρίς να το έχω δοκιμάσει, πιστεύω οτι θα κάνει compile τουλάχιστον.
Image
Resistance is futile. Join the foss-side now!
"UNIX is very simple, it just needs a genius to understand its simplicity." - Dennis Ritchie
"The things that I want, by Max Payne. A smoke. A whiskey. For the sun to shine. I want to sleep, to forget. To change the past. Unlimited ammo and a license to kill. But right then, more than anything, I wanted her."
User avatar
para
Wow! Terabyte level
Wow! Terabyte level
Posts: 3648
Joined: Sat Nov 04, 2006 2:59 am
Academic status: Alumnus/a
Gender:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby para » Wed Oct 08, 2008 1:05 am

Code: Select all

using namespace std
:?:

---

ok, με πρόλαβαν :-p
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby proskopos » Wed Oct 08, 2008 1:13 am

Δίκιο είχατε.... para την επόμενη σε θέλω ταχύτερο... :-D
Έλεος, και τόση ώρα το έψαχνα... Το ποιο απλό πράγμα.... :smt013
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
para
Wow! Terabyte level
Wow! Terabyte level
Posts: 3648
Joined: Sat Nov 04, 2006 2:59 am
Academic status: Alumnus/a
Gender:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby para » Wed Oct 08, 2008 1:16 am

Έπαιζα στο zoo :-#
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby proskopos » Wed Oct 08, 2008 2:11 pm

Προσπαθώ να εμφανίσω τα περιεχόμενα ενός σετ, που έχει και εναν Iterator... Κάνω λοιπόν το εξής...:

Code: Select all

set<string>::const_iterator setIterator;
for(setIterator = s.begin(); setIterator != s.end(); setIterator++)
{
    cout << *setIterator << endl;
 
}

Και εμφανίζονται κανονικά...
Αν όμως βγάλω το endl ώστε να συνεχίσω στην ίδια γραμμή να εμφανίσει και άλλα, μου ενφανίζει μόνο τα άλλα.. πχ αν βάλω...

Code: Select all

  cout << *setIterator << "blabla " << endl;

μου βγάζει πρώτα το blabla και μετά τα περιεχόμενα του Iterator... Γιατί....;
Πως θα το κάνω να μου τα βγάζει κανονικά....;

Επίσης, πως μπορώ να αλλάζω το αρχείο εισόδου ανάλογα με τα περιεχόμενα ενός πίνακα, ή σετ, η αρχείου... Οτιδήποτε δηλαδή...
Θέλω κάτι σαν το...
ifstream inFile (τιτλος αρχείου 1)
και αυτός ο τίτλος να αλλάζει διαρκώς με την σειρά βέβαια που βρίσκονται οι τίτλοι σε αυτό το πίνακα (κτλ) ανά γραμμή...
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
para
Wow! Terabyte level
Wow! Terabyte level
Posts: 3648
Joined: Sat Nov 04, 2006 2:59 am
Academic status: Alumnus/a
Gender:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby para » Wed Oct 08, 2008 11:26 pm

proskopos wrote:Αν όμως βγάλω το endl ώστε να συνεχίσω στην ίδια γραμμή να εμφανίσει και άλλα, μου ενφανίζει μόνο τα άλλα.. πχ αν βάλω...

Code: Select all

  cout << *setIterator << "blabla " << endl;

μου βγάζει πρώτα το blabla και μετά τα περιεχόμενα του Iterator... Γιατί....;
Πως θα το κάνω να μου τα βγάζει κανονικά....;

Αν βάλεις

Code: Select all

cout << *setIterator;
cout << "blabla " << endl;
?

--

Το υπόλοιπο μετά το zoo :x
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby proskopos » Thu Oct 09, 2008 12:13 am

para wrote:
proskopos wrote:Αν όμως βγάλω το endl ώστε να συνεχίσω στην ίδια γραμμή να εμφανίσει και άλλα, μου ενφανίζει μόνο τα άλλα.. πχ αν βάλω...

Code: Select all

  cout << *setIterator << "blabla " << endl;

μου βγάζει πρώτα το blabla και μετά τα περιεχόμενα του Iterator... Γιατί....;
Πως θα το κάνω να μου τα βγάζει κανονικά....;

Αν βάλεις

Code: Select all

cout << *setIterator;
cout << "blabla " << endl;
?

--

Το υπόλοιπο μετά το zoo :x

To δοκίμασα δεν κάνει τίποτα διαφορετικό... :smt021
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
Bloody Mary
Venus Former Team Member
Posts: 1230
Joined: Thu May 10, 2007 6:52 pm
Academic status: Alumnus/a
Gender:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby Bloody Mary » Thu Oct 09, 2008 12:38 am

Δεν ξέρω πώς ακριβώς να στο εξηγήσω για να το καταλάβεις.. (Το έχω λίγο μπερδεμένο στο μυαλό μου!)
Φαντάσου πως όλα τα αποτελέσματα που προκύπτουν από την επανάληψη του iterator είναι μια οντότητα. Όλα μαζί. Οπότε τα αποτελέσματα της επανάληψης σου θα εμφανιστούν όταν ολοκληρωθεί ολόκληρη η επανάληψη του iterator. Το *setIterator μεταβάλλεται σε κάθε βρόχο της επανάληψης. Το "blabla" όμως παραμένει αμετάβλητο. Αυτό έχει ως αποτέλεσμα την πρώτη φορά που θα εκτελεστεί η εντολή σου

Code: Select all

cout << *setIterator << "blabla " << endl;

Να εκτυπωθεί ως αποτέλεσμα σου το "blabla". Στη συνέχεια θα συνεχίσει να εκτελείται κανονικά η επανάληψη σου μέχρι να ολοκληρωθεί. Όταν θα ολοκληρωθεί η επανάληψη, τότε θα εμφανιστεί η οντότητα - τα αποτελέσματα δηλαδή που θα έχουν προκύψει από το *setIterator. Απλά πρέπει να έχεις στο μυαλό σου ότι ό,τι προκύψει από το *setIterator θεωρείται όλο μαζί ως το αποτέλεσμα της επαναληψης σου.. Δεν μπορείς δλδ να πάρεις π.χ. μόνο το αποτέλεσμα του *setIterator στην τρίτη εκτέλεση της επαναληψης σου. Όχι τουλάχιστον εφόσον χρησιμοποιείς Iterators για την επαναληψη σου.
Ελπίζω να βγαίνει άκρη από αυτό που έγραψα.. :roll: Και να βοήθησα λίγο... Τα υπόλοιπα θα τα αναλάβει ο para πάλι :-p
Στείλε μας το άρθρο σου, βοήθησε να αναπτυχθεί
το portal με θέματα που σε ενδιαφέρουν!

Υπάρχουν 10 είδη ανθρώπων: Αυτοί που ξέρουν δυαδικό σύστημα και αυτοί που δεν ξέρουν.

User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby proskopos » Thu Oct 09, 2008 12:43 am

Κατάλαβα πολύ καλά τι εννοείς.... Ωστόσο, εγώ αυτό που κάνω τώρα είναι να σπάω τις περσινές εργασίες σε κομμάτια και κάθε ένα να το κάνω με όποιον τρόπο βρω... Έπρεπε λοιπόν να γράψουν σε μια σειρά το εξής...:

Code: Select all

<message file="…" category="spam" features="m">

Όπου το περιεχόμενο του message file βγαίνει με την βοήθεια iterator...τουλάχιστον έτσι το προσπαθώ εγώ....!!!
Οπότε....? Τι κάνω...;
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
para
Wow! Terabyte level
Wow! Terabyte level
Posts: 3648
Joined: Sat Nov 04, 2006 2:59 am
Academic status: Alumnus/a
Gender:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby para » Thu Oct 09, 2008 1:00 am

proskopos wrote:Επίσης, πως μπορώ να αλλάζω το αρχείο εισόδου ανάλογα με τα περιεχόμενα ενός πίνακα, ή σετ, η αρχείου... Οτιδήποτε δηλαδή...
Θέλω κάτι σαν το...
ifstream inFile (τιτλος αρχείου 1)
και αυτός ο τίτλος να αλλάζει διαρκώς με την σειρά βέβαια που βρίσκονται οι τίτλοι σε αυτό το πίνακα (κτλ) ανά γραμμή...

Code: Select all

   for(unsigned i=0; i<(*vector1).size(); i++)
   {
      ifstream arxeio((*vector1)[i].c_str());
      [..]
   }

Αυτό τουλάχιστον εμένα μου λειτουργεί

---

proskopos wrote:Κατάλαβα πολύ καλά τι εννοείς.... Ωστόσο, εγώ αυτό που κάνω τώρα είναι να σπάω τις περσινές εργασίες σε κομμάτια και κάθε ένα να το κάνω με όποιον τρόπο βρω... Έπρεπε λοιπόν να γράψουν σε μια σειρά το εξής...:

Code: Select all

<message file="…" category="spam" features="m">

Όπου το περιεχόμενο του message file βγαίνει με την βοήθεια iterator...τουλάχιστον έτσι το προσπαθώ εγώ....!!!
Οπότε....? Τι κάνω...;

μου εμφανίζεται κανονικά με το (*vector1)[i] :x

---

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

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
proskopos
Wow! Terabyte level
Wow! Terabyte level
Posts: 2808
Joined: Tue Dec 18, 2007 4:01 pm
Academic status: Alumnus/a
Gender:
Location: Στα φεγγάρια του Πλάνταρ...
Contact:

Re: Απορίες σε απλά πραγματάκια σε C++

Postby proskopos » Thu Oct 09, 2008 10:26 am

Code: Select all

int main()
{
   
    string titles;
    ifstream inFile("spmsga1.txt");
    vector<string>message_title;
    vector<string>::iterator it;
    while (getline(inFile, titles))
    {
        message_title.push_back(titles);
       
       
        for(it=message_title.begin() ; it < message_title.end(); it++ )
        {
            ifstream inFile(*it.c_str());
        }
               
       
       
    }


:smt021 :smt013 Επέστρεψα και πάλι δυναμικά....
Το παραπάνω γιατί δεν λειτουργεί...; Λογικά το σφάλμα θα είναι στο

Code: Select all

ifstream inFile(*it.c_str());

Όπως και παραπάνω αυτό που θέλω είναι να ανοίγει τα αρχεία των οποίων ο τίτλος φαίνεται από τον iterator...
Μάλλον θα περιμένω το βράδυ τον πάρα να τελειώσει από το zoo και μετά να απαντήσει....!!! :smt005 :)
Με έχει συνεπάρει αυτή η γλώσσα.... χ0χ0, πολύ φαντεζί.... Καίγομαι... :smt016 :smt005
Ώρα να πάμε και σχεδιάση επιχειρησιακών εφαρμογών... Λαλαλαλα.... :-D
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image

Return to “Προγραμματισμός”

Who is online

Users browsing this forum: No registered users and 1 guest