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

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
User avatar
gasparosoft
Gbyte level
Gbyte level
Posts: 1920
Joined: Fri Oct 19, 2007 8:03 pm

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

Postby gasparosoft » Thu Oct 09, 2008 10:36 am

Από το λίγο που κοίταξα,έχεις ξεχάσει την "κατσαρή αγκύλη" της main.Τώρα δεν το έχω δοκιμάσει όλο για να σου πω(αν μπορώ φυσικά).Αν και αυτό που κάνεις (το for μέσα στο while δεν μου στέκει).Βγάλε το for έξω από το while και βάλε και την "κατσαρή αγκύλη" και δες αν λειτουργεί.
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 2:29 pm

gasparosoft wrote:Από το λίγο που κοίταξα,έχεις ξεχάσει την "κατσαρή αγκύλη" της main.Τώρα δεν το έχω δοκιμάσει όλο για να σου πω(αν μπορώ φυσικά).Αν και αυτό που κάνεις (το for μέσα στο while δεν μου στέκει).Βγάλε το for έξω από το while και βάλε και την "κατσαρή αγκύλη" και δες αν λειτουργεί.

Την έχω την {... Και είναι και κατσαρή... :-D
Δεν νομίζω να είναι αυτό που λες το πρόβλημα... Αλλά άμα πάω σπίτι θα το δώ....
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 8:00 pm

Code: Select all

#include <iostream>
#include <vector>
#include <string>
#include <fstream>
using namespace std;

int athroisma = 0;
vector<string> the_vector;
vector<string>::iterator the_iterator;

void diavasma(string filename)
{
  int temp;
  ifstream inFile (filename.c_str());
  while(inFile >> temp)
  {
    athroisma += temp;
  }
  cout << "To athroisma tou " << filename << " einai " << athroisma << endl ;
  athroisma = 0;
}

int main()
{
    ifstream infile1 ("arxeio.txt");
    string word;
    while(infile1 >> word)
    {
        the_vector.push_back(word);
    }
    the_iterator = the_vector.begin();
    while( the_iterator != the_vector.end() ) {
      diavasma(*the_iterator);
      the_iterator++;
    }
   
      system("PAUSE");
      return 0;
}

Εμένα αυτό που δούλεψε και μου εμφάνισε τα εξής:
Image
για 60 50
20 20 20 20 40
35 25 70 αντίστοιχα

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

proskopos wrote:

Code: Select all

    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 Επέστρεψα και πάλι δυναμικά....
Το παραπάνω γιατί δεν λειτουργεί...;

Δε λειτουργεί γιατί πρώτα πρέπει να βάλεις όλες τις τιμές στο vector κ μετά να το προσπελάσεις με το iterator. Δηλαδή κλείσε πρώτα το while κ μετά πήγαινε στο for.


proskopos wrote:Λογικά το σφάλμα θα είναι στο

Code: Select all

ifstream inFile(*it.c_str());
Σε αυτό μου χτύπαγε ένα σφάλμα ο compiler αλλά έκανα το εξής

Code: Select all

        string temp;
        for(it=message_title.begin() ; it < message_title.end(); it++ )
        {
            temp = *it;
            ifstream inFile(temp.c_str());
        }
και είναι jet ;)
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
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 » Sat Oct 11, 2008 2:15 am

Για ποιόν λόγο μπορεί ο compiler να μην βγάζει λάθος(να μην δείχνει δηλαδή ότι η τάδε γραμμή έχει λάθος) , ωστόσο στο exit αντί για 0 να δείχνει 2.. (άρα υπάρχει λάθος, που δεν μου το δείχνει σε ποια γραμμή, και τι λάθος είναι..)..?

Δηλαδή μετά από compile πήρα αυτό...:

Code: Select all


........

build/Debug/Cygwin-Windows/newfile.o: In function `_Z4readSs':
/cygdrive/c/Documents and Settings/Jamais Ariere/Τα έγγραφά μου/NetBeansProjects/Application_1/newfile.cpp:18: multiple definition of `[u][b]read[/b][/u](std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
build/Debug/Cygwin-Windows/eswteriko.o:/cygdrive/c/Documents and Settings/Jamais Ariere/Τα έγγραφά μου/NetBeansProjects/Application_1/eswteriko.cpp:18: first defined here
build/Debug/Cygwin-Windows/newfile.o: In function `_Z7msgfileSs':

.....(εδώ λέει ότι πάνω αλλά αλλάζει την μέθοδο... Είτε βάζει το όνομα άλλης μεθόδου είτε ενός vector είτε και ενός iterator....)

collect2: ld returned 1 exit status
make[1]: *** [dist/Debug/Cygwin-Windows/application_1.exe] Error 1
make[1]: Leaving directory `/cygdrive/c/Documents and Settings/Jamais Ariere/Τα έγγραφά μου/NetBeansProjects/Application_1'
make: *** [.build-impl] Error 2

Build failed. Exit value 2.


Τι μπορεί να φταίει...;
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
Zifnab
Venus Former Team Member
Posts: 7582
Joined: Tue Nov 15, 2005 2:42 am
Academic status: MSc
Gender:
Location: Connecticut
Contact:

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

Postby Zifnab » Sun Oct 12, 2008 10:57 am

Τις μεθόδους σου τις δηλώνεις πριν την main() , προτού γράψεις το σώμα τους κάτω από την main???
Εναλλακτικά μπορείς να μεταφέρεις το σώμα των μεθόδων πάνω από την main... Τώρα αμα δεν έχουμε κομμάτια κώδικα πολλά μπορεί να φταίνε...

P.S Proskope ωραίο Username έχεις στο Pc σου: Jamais Ariere :lol:
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 12, 2008 11:06 am

Zifnab wrote:Τις μεθόδους σου τις δηλώνεις πριν την main() , προτού γράψεις το σώμα τους κάτω από την main???
Εναλλακτικά μπορείς να μεταφέρεις το σώμα των μεθόδων πάνω από την main... Τώρα αμα δεν έχουμε κομμάτια κώδικα πολλά μπορεί να φταίνε...

P.S Proskope ωραίο Username έχεις στο Pc σου: Jamais Ariere :lol:


Εϊχα το σώμα τςν μεθόδων πάνω από την main... Αλλά το άλλαξα και το έβαλα από κάτω και πιο πριν απλά τις δήλωσα, αλλά καμία διαφορά... Περίεργο.... :smt013

Υ.Γ. Jamais Ariere...: Με όνομα βαρύ σαν ιστορία...
Spoiler: εμφάνιση/απόκρυψη
Ποιός είναι ο ρουφ....? Ο Μάριος....; :-D
Extreme Makeover... Mind edition...
3,6 μαθήματα/εξεταστική....
Image
User avatar
Zifnab
Venus Former Team Member
Posts: 7582
Joined: Tue Nov 15, 2005 2:42 am
Academic status: MSc
Gender:
Location: Connecticut
Contact:

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

Postby Zifnab » Sun Oct 12, 2008 12:17 pm

Παράξενο....
Ο ρουφ... είναι το screenshot σου.... :smt016
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 12, 2008 12:31 pm

Zifnab wrote:Παράξενο....
Ο ρουφ... είναι το screenshot σου.... :smt016


[off] Α... δεν το είχα προσέξει ότι το είχα αφήσει... [/off]

Τώρα που έψαχνα να δω τι συμβαίνει με τον κώδικα που γράφω παραπάνω, παρατήρησα ότι το πρόβλημα δεν είναι στον κώδικα... Αλλά κάπου αλλού... Διότι ακόμα και αν έγραφα ένα πρόγραμμα που απλά έχει ενα cout πάλι το ίδιο περίπου έβγαζε... Δηλαδή με ένα πρόγραμμα που έχει cout << "kati";
έβγαζε

Code: Select all

/usr/bin/make -f nbproject/Makefile-Debug.mk SUBPROJECTS= .build-conf
make[1]: Entering directory `/cygdrive/c/............/NetBeansProjects/Application_1'
mkdir -p build/Debug/Cygwin-Windows
g++.exe    -c -g -o build/Debug/Cygwin-Windows/newfileadsasd.o newfileadsasd.cpp

----->
make[1]: *** No rule to make target `newfile.cpp', needed by `build/Debug/Cygwin-Windows/newfile.o'.  Stop.
----->


make[1]: Leaving directory `/cygdrive/c/......../NetBeansProjects/Application_1'
make: *** [.build-impl] Error 2
Build failed. Exit value 2.


Σε αυτό που δείχνω λογικά είναι το πρόβλημα, αλλά δεν ξέρω τι πρέπει να κάνω... Καμία ιδέα...;



EDIT:
Το πρόβλημα λύθηκε.... :)
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 » Sun Oct 12, 2008 1:48 pm

Το πρόβλημα μου φαίνεται πως δεν έχει σχέση με το πρόγραμμα σου, αλλά με τον compiler... Μπορεί να μην έχει εγκατασταθεί σωστά, ή να του λείπουν κάποια βοηθήματα/βιβλιοθήκες που του χρειάζονται για να κάνει σωστά build/compile/debug κάποιο πρόγραμμα... Έχεις ξαναεκτελέσει προγράμματα από τον συγκεκριμένο compiler και δεν είχες πρόβλημα?
Στείλε μας το άρθρο σου, βοήθησε να αναπτυχθεί
το 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 » Sun Oct 12, 2008 2:06 pm

Bloody Mary wrote:Το πρόβλημα μου φαίνεται πως δεν έχει σχέση με το πρόγραμμα σου, αλλά με τον compiler... Μπορεί να μην έχει εγκατασταθεί σωστά, ή να του λείπουν κάποια βοηθήματα/βιβλιοθήκες που του χρειάζονται για να κάνει σωστά build/compile/debug κάποιο πρόγραμμα... Έχεις ξαναεκτελέσει προγράμματα από τον συγκεκριμένο compiler και δεν είχες πρόβλημα?

Δεν ήταν από τον compiler, ούτε καν θα το έλεγα πρόβλημα... Τελικά ήταν του netbeans θέμα. Επειδή στο ίδιο project, άνοιγα πολλά αρχεία γιατί έκανα πατέντες, ήθελε κάποια στιγμή να δηλώσω τα αρχεία αυτά με το αρχικό αρχείο του project... Και εγώ αυτό δεν το ήξερα.. Και δεν το είχα κάνει... :)
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 » Sun Oct 12, 2008 3:40 pm

Code: Select all

    while (inFile2 >> word)
    {
        messages[word];
       while (inFile3 >> word)
       {
           it4=messages.find(word);
           if (messages.find(it4) != 0)
           {
               messages[word]++;
           }
       }         
    }

Με τον παραπάνω κώδικα θέλω να κάνω το εξής...:
Να πάρω αρχικά μια λέξη από το inFile2 και να την προσθέσω στο messages map, στην συνέχεια να πάρω μια λέξη από το inFile3 και αν αυτή η λέξη βρίσκεται ήδη στο messages map, να αυξήση κατα 1 την τιμή της...
Μου βγάζει όμως λάθος στο

Code: Select all

messages.find(it4) != 0

Καμία ιδέα κανείς....;
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 » Sun Oct 12, 2008 3:47 pm

Νομίζω η find σε ένα map, γυρίζει έναν iterator, και όχι τιμή.
Δοκίμασε να κάνεις τη σύγκριση με

Code: Select all

if (messages.find(it4) != messages.end())
           {
               messages[word]++;
           }
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 » Sun Oct 12, 2008 4:52 pm

Τι ακριβώς θες να κάνεις;
Να δεις αν υπάρχει και στα δύο; Να δεις πόσες φορές υπάρχει και στα δύο; Να δεις αν υπάρχει μόνο στο ένα;

----

Anyway, θα σου απαντήσω για το πιο πιθανό.
Αν θες να δεις αν υπάρχει και στα δύο μπορείς να κάνεις το παρακάτω:

Code: Select all

   while (inFile2 >> word)
    {
        messages[word]=1;
    }
   while (inFile3 >> word)
    {
        messages[word]++;
    }
    for(mapIterator = mymap.begin(); mapIterator != mymap.end(); mapIterator++)
         if ((*mapIterator).second > 1)
             cout << (*mapIterator).first << endl;;
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
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 12, 2008 6:01 pm

Netharis δεν λειτουργεί αυτο... Το δοκίμασα... Έχεις δίκιο πάντως, iterator επιστρέφει... Θέλω να μετρήσω πόσες φορές υπάρχει (αν υπάρχει) μια λέξη που βρίσκεται στο infile3 ενώ παράλληλα βρίσκεται και στο inFile2...
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 12, 2008 6:05 pm

Στη λύση που σου έδωσα αντικατέστησε το παραπάνω cout με:

Code: Select all

cout << "Το string " << (*mapIterator).first << " υπάρχει στο αρχείο 3, " << (*mapIterator).second - 1 << " φορές."  << endl

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

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
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 12, 2008 6:50 pm

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

Code: Select all

 (*mapIterator).second - 1
ίσο με 1...


Επίσης γτ δεν δουλεύει το find...; Λογικά (δεν ξέρω πόσο λογικά, αλλά έτσι νομίζω :) ), μια μέθοδος που προυπάρχει για ένα set , map κτλ θα είναι πιο γρήγορη από οτιδήποτε άλλο.. Αν γνωρίζει κάποιος ας το επιβεβαιώσει, και ακόμα καλύτερα ας δώσει μια λίση στο παραπάνω πρόβλημα....
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 12, 2008 7:10 pm

Έμπλεξα δυο maps μαζί

Τελική έκδοση: :-p

Code: Select all

    while (inFile2 >> word)
    {
        messages[word]=1;
    }
   while (inFile3 >> word)
    {
        messages[word]++;
    }
    for(mapIterator = messages.begin(); mapIterator != messages.end(); mapIterator++)
         if ((*mapIterator).second > 1)
             cout << "Το string " << (*mapIterator).first << " υπάρχει στο αρχείο 3, " << (*mapIterator).second - 1 << " φορές."  << endl;;
Αντί για mymap, messages.
Επειδή υπάρχει περίπτωση να τα έχεις ήδη αλλάξει θα κάνω μια δοκιμή να δω αν δουλεύει
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
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 12, 2008 7:14 pm

para wrote:Έμπλεξα δυο maps μαζί

Τελική έκδοση: :-p

Code: Select all

    while (inFile2 >> word)
    {
        messages[word]=1;
    }
   while (inFile3 >> word)
    {
        messages[word]++;
    }
    for(mapIterator = messages.begin(); mapIterator != messages.end(); mapIterator++)
         if ((*mapIterator).second > 1)
             cout << "Το string " << (*mapIterator).first << " υπάρχει στο αρχείο 3, " << (*mapIterator).second - 1 << " φορές."  << endl;;
Αντί για mymap, messages.
Επειδή υπάρχει περίπτωση να τα έχεις ήδη αλλάξει θα κάνω μια δοκιμή να δω αν δουλεύει



Μάντεψε.... Το είχα ήδη αλλάξει... Αλλά δεν κάνει... :-D
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 12, 2008 7:27 pm

Μου δουλεύει κανονικά το παρακάτω

Code: Select all

#include <iostream>
#include <map>
#include <string>
#include <fstream>
using namespace std;

int main()
{
    map<string, unsigned> messages;
    map<string, unsigned>::const_iterator mapIterator;
    string word;
    ifstream inFile2 ("arxeio2.txt");
    while (inFile2 >> word)
    {
        messages[word]=1;
    }
    ifstream inFile3 ("arxeio3.txt");
    while (inFile3 >> word)
    {
        messages[word]++;
    }
    for(mapIterator = messages.begin(); mapIterator != messages.end(); mapIterator++)
         if ((*mapIterator).second > 1)
             cout << "To string " << (*mapIterator).first << " yparxei sto arxeio3, " << (*mapIterator).second - 1 << " fores."  << endl;;

    cin.get();
    return 0;
}


arxeio2.txt: mhden ena ena ena ena dyo dyo dyo tria tessera tessera tessera tessera
arxeio3.txt: ena dyo dyo tria tria tria tessera tessera tessera tessera

Το αποτέλεσμα που παίρνω είναι το: 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 » Fri Dec 12, 2008 8:36 am

Επαναφέρω το θέμα με μια κουλή απορία..

Δε μου αναγνωρίζει το cout ο g++. Έχω κάνει include το iostream, αλλά εξακολουθεί τα ίδια.. Τι κάνω; :???:
----
ok forget it -_-. Προέρχομαι από κάτι ώρες java κι είχα ξεχάσει να ορίσω το namespace. Θα επανέλθω με απορία όμως :twisted: :twisted:
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
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 Jan 26, 2009 3:48 pm

Πώς μπορώ να διακόπτω μέσα στο πρόγραμμα κάτι που το ίδιο το πρόγραμμα έχει αρχίσει να εκετελεί;

Τι ακριβώς θέλω να κάνω:
Αρχικά το πρόγραμμα καλεί τη system() η οποία δε σταματάει να εκτελείται από μόνη της. Θέλω όμως να συνεχίσω παρακάτω στο πρόγραμμα όσο θα τρέχει αυτή. (Το παρακάτω περιλαμβάνει κι άλλη κλήση της system() που κι αυτή θέλει να τη σταματήσει ο χρήστης.).
Ψάχνοντας βρήκα ότι αυτό μπορώ να το κάνω με τη fork() αλλά δε μου την αναγνωρίζει.

Πώς μπορώ να το πετύχω;

**Εναλλακτικά, μπορώ να φτιάξω ένα πρόγραμμα που θα ανοίγει ένα άλλο -ας πούμε- 10 φορές (σχεδόν) ταυτόχρονα κ να συνεχίζει να εκτελείται;

--

προς mods:
Spoiler: εμφάνιση/απόκρυψη
Θα έκανα edit τα ποστς αλλά έχουν διαφορά >1 μήνα και θέμα άσχετο μεταξύ τους.
Γύρνα είμαι ένα άψυχο κορμί που σ' αγαπάει, αισθάνομαι στον άνεμο φτερό
Σαν μέσα σε όνειρο η ζωή με προσπερνάει, δείξε μου οίκτο μια στιγμή παρακαλώ...

#!
Κοίτα πως με κατάντησε η δική σου η αγάπη, να μη γνωρίζω από που να κρατηθώ
Στο τελευταίο της ζωής το σκαλοπάτι, Γύρνα, είμαι ένα βήμα απ' το γκρεμό...
User avatar
~~Wind~~
Gbyte level
Gbyte level
Posts: 1747
Joined: Thu Nov 30, 2006 1:07 am
Academic status: N>4
Gender:
Location: *void

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

Postby ~~Wind~~ » Mon Jan 26, 2009 5:57 pm

με fork γίνεται πολύ όμορφα σε C. Αν είχες διαβάσει Λειτουργικά θα ήξερες :smt016
Γιατί η C είναι πολύ μπροστά από την C++.-

Έτσι μπορείς να γράψεις το πρόγραμμα σου σε C :-)
H fork() αναγνωρίζεται από την C++. Δες, ένα απλό παράδειγμα:
Spoiler: εμφάνιση/απόκρυψη

Code: Select all

Script started on Wed Apr 30 12:08:13 1997
sh-2.00$ cat fork.c
/* fork.c - fork a child process */
#include <stdio.h>


void main()
{
   int fork_return;
   int count = 0;
   /* getpid() returns the process id of this process. */
   printf("Process %d about to fork a child.\n", getpid() );
   fork_return = fork();
   if( fork_return < 0)
   {
      printf("Unable to create child process, exiting.\n");
      exit(-1);
   }
   /* BOTH processes will do this! */
   system("ps");
   if( fork_return > 0)
   /* Then fork_return is the pid of the child process and I am
      the parent. Start printing a's. */
   {
      printf("Created child process %d.\n", fork_return);
      while( count++ < 800)
      {
          putchar('a');
      if(count % 80 == 0){
      putchar('\n');
      sleep(2);
      }
   }
   }
   else
   /* A 0 return tells me that I am the child. Print b's */
   {
      while(count++ < 800)
      {
         putchar('b');
      if(count % 80 == 0){
      putchar('\n');
           sleep(2);
      }
   }
    }
}
@reference


Πάμε παρακάτω. Μπορείς να το κάνεις με Threads, βέβαια η C++ δεν έχει βιβλιοθήκη με threads οπότε πρέπει να ψάξεις να βρεις μια έτοιμη
κ να ελπίζεις οτι δουλεύει σωστά, ή μπορείς να περιμένεις μέχρι το 2010 που θα βγει το νέο πρότυπο για την C++ κ μάλλον θα περιλαμβάνει.

Δε μου έρχεται κάτι άλλο τώρα, ο netharis μπορεί να ξέρει κάτι παραπάνω.. (hoho! hoho!)


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


Ο ίδιος κώδικας σε C++

Με απλά λόγια αν το fork ξεκινά μια νέα διεργασία. Αν πετύχει επιστρέφει έναν αριθμό μεγαλύτερο του 0.
Αυτός είναι το id της νέας διεργασίας. (2 διεργασίες έχουμε : 1 διεργασία αυτή που γίνεται κ καλεί το fork, κ μία ακόμα αυτή που δημιουργείται από το fork)

Ότι έχουμε κάτω από το fork το κάνουν και οι δύο διεργασίες. Έτσι αν τυπώσουμε "Hello world" αυτό θα τυπωθεί δύο φορές. Σα να είμαστε σε παράλληλο σύμπαν δλδ.

Αυτό που αλλάζει στις δύο διεργασίες είναι το fork_return. Η αρχική διεργασία το βλέπει ως το pid (process id) της νέας διεργασίας ενώ η νέα το βλέπει 0 (νομίζω :smt017 )
Έτσι αν πουμέ if ( fork_return > 0 ) τότε αυτό είναι true για την αρχική διεργασία αλλά false για την νέα.
Με αυτό τον τρόπο μπορούμε να διαχωρίσουμε τι εντολές θα συνεχίσει να κάνει η αρχική διεργασία
κ τι εντολές θα κάνει η νέα (στο else ή if ( fork_return == 0 ) ).

Τώρα όποιος θέλει να το ψάξει κι αλλό ας το κάνει. Μπορείται να βάλετε τις διεργασίες να επικοινωνούν κ να περιμένει η μία αποτελέσματα της άλλης κλπ. :smt024
Last edited by Bloody Mary on Mon Jan 26, 2009 7:47 pm, edited 3 times in total.
Reason: merged posts
ImageImage
Come to foss-aueb ...we have cookies.. yamyam~nomnomnomnomnomnomnomnom
a cookie ~ I will do science to it

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

Who is online

Users browsing this forum: No registered users and 2 guests