Εργαστήριο Τεχνολογίας Λογισμικού
0 votes
255 views

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

int main()
{
    char ch, k=0, j=0;
    while (k < 2) {
        cin >> ch;
        if (ch == '*') k++;
    }
    cout << "duo asteria" << endl;
    return 0;
}

Καμία ιδέα μήπως για το τελευταίο ερώτημα;

in progintro by (820 points)
edited by | 255 views
0

Όταν λες δεν μπορείς να το πραγματοποιήσεις, εννοείς πως δεν ξέρεις πώς να το υλοποιήσεις σε κώδικα; Έχεις δοκιμάσεις κάτι και απέτυχε;

0

Ναι έχω δοκιμάσει. Έβαλα για παράδειγμα το if (k>1) j++; όπως παρακάτω:

int main()
{
char ch, k=0, j=0;
while (k < 2) {
    cin >> ch;
    if (ch == '*') k++;
    if (k>1) j++;
}
cout<<"duo asteria"<<endl;

Για να καταφέρω να πιάσω τη μέτρηση απο τη στιγμή που το k θα γίνει 1 (δηλαδή θα βρει την πρώτη φορά το άστρο). Ωστόσο, δε φαίνεται να μου κάνει δουλειά.

+1

Το πρόβλημα είναι ότι τα έχεις ορίσει όλα σαν char, ενώ τα k,j μάλλον θα έπρεπε να είναι int. Επίσης το k>1 δεν είναι η ακριβής συνθήκη που χρειάζεσαι.

1 Answer

0 votes

Έχεις δύο τρόπους να το κάνεις. Ο πρώτος είναι ευκολότερος γιατί χρειάζεται λιγότερες αλλαγές στο πρόγραμμά σου.

  1. Βάζεις έναν ακόμα μετρητή, τον οποίο αυξάνεις κάθε φορά που το k == 1. Ακριβώς αυτό προτείνεις στο σχόλιό σου, αλλά η συνθήκη σου είναι λάθος. Στο τέλος, η τιμή αυτού του μετρητή είναι το πλήθος των ενδιάμεσων χαρακτήρων (συν ένα για τον πρώτο αστερίσκο).

  2. Αλλάζεις το πρόγραμμά σου ώστε να διαβάζει μέχρι να βρει τον πρώτο αστερίσκο. Εκεί σταματάς και αρχίζεις να διαβάζεις χαρακτήρες, μετρώντας τους, μέχρι να βρεις το δεύτερο αστερίσκο. Εκεί σταματάς οριστικά.

by (9.5k points)
0

Ευχαριστώ θερμά κ. Παπασπύρου. Θα το ξανακοιτάξω όπως μου το είπατε να βρω τη λύση. Μια ακόμα απορία προέκυψε. Στο παρακάτω πρόγραμμα (άσκηση του βιβλίου) θέλω να μπορώ να ελέγχω εαν ο αριθμός που κάθε φορά δίνω με τη cin είναι μεγαλύτερος απο τον προηγούμενο που έδωσα αλλιως να τον απορρίπτει:

int main() {

int a[100], i;
bool ok;
for (i = 0; i < 100; i++) {
    ok = false;
    while (!ok) {
        cin >> a[i];
        if (a[i] >= a[i-1]) {
            ok = true;
        }
        else cout << "la8os ari8mos" << endl;
        cin >> a[i+1];
    }
}
return 0;

}

Δοκίμασα να βάλω και (a[i+1] >= a[i]), αλλά, είτε με τον ένα τρόπο είτε με τον άλλο το πρόγραμμα δεν ελέγχει αν ο επόμενος χαρακτήρας που θα δώσω είναι μεγαλύτερος. Που έχω κάνει πατάτα;

Σας ευχαριστώ

301 questions

289 answers

288 comments

770 users