Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα ,

 

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

 

Εδώ ο κώδικας.

#include <iostream>
using namespace std;

int main()
{
    int x;
    int i;
    int counter1=0;
    int counter2=0;
    int counter3=0;
    double result1=1;
    double result2=1;
    double result3=1;
    double num[x];
    cout<<"dose to plithos twn arithmwn"<<endl;
    cin>>x;
    for (i=0;i<x;i++)
    {
        cin>>num[i];
        if (num[i]<-10)
        {
        counter1++;
        result1=result1*num[i];
        }
        else if (-10<=num[i]<10)
        {
        counter2++;
        result2=result2*num[i];
        }
        else
        {
        counter3++;
        result3=result3*num[i];
        }
    }
    cout<<"To plithos twn arithmwn stin 1i katigoria einai"<<counter1<<endl;
    cout<<"To plithos twn arithmwn stin 2i katigoria einai"<<counter2<<endl;
    cout<<"To plithos twn arithmwn stin 3i katigoria einai"<<counter3<<endl;
    cout<<"To ginomeno twn arithmwn stin 1i katigoria einai"<<result1<<endl;
    cout<<"To ginomeno twn arithmwn stin 2i katigoria einai"<<result2<<endl;
    cout<<"To ginomeno twn arithmwn stin 3i katigoria einai"<<result3<<endl;

    system ("pause");
    return 0;
}
Δημοσ.

Έχεις λαθος οταν προσπαθεις να κανεις double num[x]...To x δεν το εχεις κανει inialize..

Μπορεις να το κανεις ετσι αν θες:


#include <iostream>
using namespace std;

int main() {
    int x;
    int i;
    int counter1 = 0;
    int counter2 = 0;
    int counter3 = 0;
    double result1 = 1;
    double result2 = 1;
    double result3 = 1;
    cout << "dose to plithos twn arithmwn" << endl;
    cin>>x;
    double num[x];

    for (i = 0; i < x; i++) {
        cin >> num[i];
        if (num[i]<-10) {
            counter1++;
            result1 = result1 * num[i];
        } else if (-10 <= num[i] < 10) {
            counter2++;
            result2 = result2 * num[i];
        } else {
            counter3++;
            result3 = result3 * num[i];
        }
    }
    cout << "To plithos twn arithmwn stin 1i katigoria einai" << counter1 << endl;
    cout << "To plithos twn arithmwn stin 2i katigoria einai" << counter2 << endl;
    cout << "To plithos twn arithmwn stin 3i katigoria einai" << counter3 << endl;
    cout << "To ginomeno twn arithmwn stin 1i katigoria einai" << result1 << endl;
    cout << "To ginomeno twn arithmwn stin 2i katigoria einai" << result2 << endl;
    cout << "To ginomeno twn arithmwn stin 3i katigoria einai" << result3 << endl;

    system("pause");
    return 0;
}
Δημοσ.

<p>

Το double num[x] είναι λάθος. Δες κάποιον container (array ίσως).<br />

<br />

Γιατι ειναι λαθος;;; Δεν εννοεί ενα πίνακα double? προς φυγή παρεξηγήσεων.... Δεν το γνωρίζω.... Απορία.... Και απο την στιγμη που δεν εχει ορίσει κάποιο χώρο που θα εχει ο πίνακας δεν θα έπρεπε να βγάζει λαθος; Δηλαδη να ξερει να κρατήσει χ θέσεις;</p>

  • Moderators
Δημοσ.

Την ώρα που θα γίνει compile το πρόγραμμα η τιμή του x δεν είναι γνωστή. Η δυναμική δέσμευση δε γίνεται έτσι. Γι' αυτό σου πρότεινα να χρησιμοποιήσεις std::array, θα είναι πιο εύκολο να κάνεις αυτό που θες.

 

 

 

Έχεις λαθος οταν προσπαθεις να κανεις double num[x]...To x δεν το εχεις κανει inialize..

Μπορεις να το κανεις ετσι αν θες:

#include <iostream>
using namespace std;

int main() {
int x;
int i;
int counter1 = 0;
int counter2 = 0;
int counter3 = 0;
double result1 = 1;
double result2 = 1;
double result3 = 1;
cout << "dose to plithos twn arithmwn" << endl;
cin>>x;
double num[x];

for (i = 0; i < x; i++) {
cin >> num;
if (num<-10) {
counter1++;
result1 = result1 * num;
} else if (-10 <= num < 10) {
counter2++;
result2 = result2 * num;
} else {
counter3++;
result3 = result3 * num;
}
}
cout << "To plithos twn arithmwn stin 1i katigoria einai" << counter1 << endl;
cout << "To plithos twn arithmwn stin 2i katigoria einai" << counter2 << endl;
cout << "To plithos twn arithmwn stin 3i katigoria einai" << counter3 << endl;
cout << "To ginomeno twn arithmwn stin 1i katigoria einai" << result1 << endl;
cout << "To ginomeno twn arithmwn stin 2i katigoria einai" << result2 << endl;
cout << "To ginomeno twn arithmwn stin 3i katigoria einai" << result3 << endl;

system("pause");
return 0;
}

 

 


Αυτό είναι ιδιαίτερα επικίνδυνο. Τι θα γίνει αν εγώ δε δώσω αριθμό;

Δημοσ.

Την ώρα που θα γίνει compile το πρόγραμμα η τιμή του x δεν είναι γνωστή. Η δυναμική δέσμευση δε γίνεται έτσι. Γι' αυτό σου πρότεινα να χρησιμοποιήσεις std::array, θα είναι πιο εύκολο να κάνεις αυτό που θες.

 

 

 

Αυτό είναι ιδιαίτερα επικίνδυνο. Τι θα γίνει αν εγώ δε δώσω αριθμό;

Προφανώς είναι επικίνδυνο αλλά απο ότι έχω καταλάβει το πρόγραμμα είναι σχετικά απλό και δεν τίθεται θέμα για αν ο χρήστης δώσει λάθος input η καθόλου...Τότε πρέπει να ψάξει σε κάτι που πρότειενες παραπάνω..

Δημοσ.

Όντως είναι για απλή χρήση. Αν κατάλαβα καλά απλά άλλαξες την σειρά που κάνουμε το cin @nikos;

 

Επίσης αυτό που δεν καταλαβαίνω είναι γιατί στο dev-c μου τρέχει κανονικά ενώ στο visual μου βγάζει λάθος στον πίνακα.

 

Ευχαριστώ πολύ όλους για τις απαντήσεις σας.

Δημοσ.

Όντως είναι για απλή χρήση. Αν κατάλαβα καλά απλά άλλαξες την σειρά που κάνουμε το cin @nikos;

 

Επίσης αυτό που δεν καταλαβαίνω είναι γιατί στο dev-c μου τρέχει κανονικά ενώ στο visual μου βγάζει λάθος στον πίνακα.

 

Ευχαριστώ πολύ όλους για τις απαντήσεις σας.

ναι..γτ ετσι οπως το ειχες εσύ το x δεν του έχεις δώσει καποια τιμή...

οπότε πρώτα διαβαζεις την τιμή και μετα δημιουργείς το πίνακα σου...

Εξαρτάται απο το compiler...Επίσης γτ μαλλον το dev-c πιστευει οτι υπάρχει τιμη πιαθανότατα καποιο garbage.

  • Like 1
Δημοσ.

Το double num[x] είναι λάθος (δεν κάνει compile) σε όλες τις εκδόσεις του προτύπου της C++. Οι λόγοι είναι ιδιαίτερα τεχνικοί και ταυτόχρονα κλασικοί με την έννοια ότι έχει συζητηθεί νομίζω αρκετές φορές. Δηλαδή θεωρητικά αυτό το πρόγραμμα δεν είναι C++ και ούτε ποτέ μπορεί να γίνει αν δε χρησιμοποιηθεί δυναμική διαχείριση μνήμης με τον ένα ή τον άλλο τρόπο.

 

Στην πράξη τώρα, ο gcc υποστηρίζει αυτή τη δυνατότητα σαν extension στη γλώσσα. Ο MSVC κάνει αυτό που λέει το πρότυπο και αρνείται.

 

Υπόψιν ότι ακόμα και στον gcc η δήλωση του double num[x] πριν δοθεί τιμή στο x όπως είπαν τα παιδιά είναι έξτρα (και μοιραίο όπως έτυχε να αποδειχτεί) λάθος.

Δημοσ.

Πέρα από τα "τεχνικά" θέματα. Ετσι όπως το έχεις γράψει, δεν θέλει πίνακα.

 

σωστός. δική μου χαζομάρα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...