freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

Ανάγνωση πολλών αριθμών


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [7 Μηνύματα]      Bookmarks Tags: ανάγνωση Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
ggeo1


Μέλος από: 08 Νοε 2006
Μηνύματα: 16

View users profile
ΜήνυμαΣτις: 24 Φεβ 2007 13:58    Θέμα: Ανάγνωση πολλών αριθμών Απάντηση με παράθεση  Mark this post and the followings unread

Καλησπέρα σε όλους

Είχα ξεκινήσει με τη C++ πριν κάποιους μήνες αλλά λόγω έλλειψης χρόνου δεν μπόρεσα να ασχοληθώ.Τώρα όμως επιστρέφω!Με λίγα λόγια έιμαι αρχάριος..

Το πρόβλημα που αντιμετωπίζω είναι το εξής: Ζητάω από το χρήστη να μου δώσει αριθμούς.Όχι συγκεκριμενο σύνολο αριθμών αλλά όσους θέλει.Στο τέλος θέλω να υπολογίζει το μέσο όρο αυτών των αριθμών.Εδώ είναι και το πρόβλημα.Αν έχω π.χ 3 αριθμούς δίνω :
.......
for (j=0; j<3; j++) {
}
m=(a+b+c)/j;
.....
και μου βγάζει σωστά το μέσο όρο.
Τώρα που δε δίνω όμως συγκεκριμένο σύνολο αριθμών,έχω κάνει το εξής:

#include <iostream>
#include <cstdlib>
#include <cstdio>

using namespace std;

int main()
{
float arithmoi[100];
int i=0;
float x;
// γέμισμα πίνακα
do {
cout << "Δώσε τον " << i+1 << "αριθμό ";
cin >> arithmoi[i];
x=arithmoi[i];
i++;
} while (x!=0);


// υπολογισμός μέσου όρου

float mesos;
float sum=0;
for (i=0; i<100; i++){
sum=sum +x;
}
mesos=sum/i;

cout << "Ο μέσος όρος είναι " << mesos;

return 0;
}

To πρόβλημα είναι πως μου βγάζει μέσο όρο συνέχεια το μηδέν.
Επίσης θέλω να ρωτήσω ,οι βρόγχοι είναι τόσο μπέρδεμα ή εμένα με φαίνονται έτσι?
Ακόμη,πως μπορώ να συμπεριλάβω την εντολή kbhit().Γνωρίζω ότι θέλει τη βιβλιοθήκη <conio.h> αλλά δεν την αναγνωρίζει ο μεταγλωττιστής.

Ευχαριστώ
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 24 Φεβ 2007 16:23    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

παράθεση:
To πρόβλημα είναι πως μου βγάζει μέσο όρο συνέχεια το μηδέν.


Αν κοιτάξεις πιο προσεκτικά τον κώδικα σου θα δείς το εξής:
κώδικας:
do {
...
} while (x!=0);

Οταν βγεί από το loop η μεταβλητή x είναι 0

Παρακάτω υπολογίζεις το μέσο όρο χρησημοποιώντας το x, το οποίο παραμένει 0 και δεν αλλάζει πουθενά η τιμή του.
κώδικας:
float mesos;
float sum=0;
for (i=0; i<100; i++){
sum=sum +x;
}
mesos=sum/i;

Αρα 0/100=0 (αυτός είναι ο μέσος όρος που υπολογίζεις).

Τα λάθη που θα πρότεινα να διορθώσεις είναι στα εξής σημεία:

α) Ελέγχεις αν ο αριθμός που δίνει ο χρήστης είναι το 0, προφανώς για να σταματήσεις να ζητάς άλλους αριθμούς, αλλά δεν κρατάς κάπου πόσοι είναι οι αριθμοί που έδωσε ο χρήστης. Εδωσε 1, 10, 100;
Ισως αυτό τον στόχο έχει η εντολή i++, αλλά κατόπιν το αγνοείς. Επίσης το τελευταίο νούμερο που δίνει ο χρήστης για να βγεί από το loop (το μηδέν), πρέπει να το χρησιμοποιήσεις όταν υπολογίζεις το μέσο όρο; Μάλλον όχι. Οπότε το πλήθος των αριθμών που έχει δώσει ο χρήστης όταν βγεί από το while είναι i-1.

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

γ) Δεν πρέπει να κάνεις loop μέχρι το 100 αλλά μέχρι όσο είναι το πλήθος των αριθμών που έδωσε ο χρήστης.

Για το kbhit δες το http://www.linux-sxs.org/programming/kbhit.html
Ισως σε βοηθήσει.
ggeo1


Μέλος από: 08 Νοε 2006
Μηνύματα: 16

View users profile
ΜήνυμαΣτις: 24 Φεβ 2007 17:23    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

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


παράθεση:
α) Ελέγχεις αν ο αριθμός που δίνει ο χρήστης είναι το 0, προφανώς για να σταματήσεις να ζητάς άλλους αριθμούς, αλλά δεν κρατάς κάπου πόσοι είναι οι αριθμοί που έδωσε ο χρήστης. Εδωσε 1, 10, 100;
Ισως αυτό τον στόχο έχει η εντολή i++, αλλά κατόπιν το αγνοείς. Επίσης το τελευταίο νούμερο που δίνει ο χρήστης για να βγεί από το loop (το μηδέν), πρέπει να το χρησιμοποιήσεις όταν υπολογίζεις το μέσο όρο; Μάλλον όχι. Οπότε το πλήθος των αριθμών που έχει δώσει ο χρήστης όταν βγεί από το while είναι i-1.


-- Αυτό είναι το πρόβλημα που αντιμετωπίζω.Δεν μπορώ δηλ να καταλάβω πώς θα κρατήσει τους αριθμούς που έχω δώσει.Πώς θα καταλάβει πόσους έδωσα.Εφόσον τους βάζω στον πίνακα arithmoi[100] δεν είναι αρκετό αυτό?(Δε ζητάω να μου λύσεις το πρόβλημα γράφοντάς μου τον κώδικα απλά αν γίνεται να με κατευθύνεις λίγο ακόμη)

παράθεση:
β) Παρακάτω που υπολογίζεις τον μέσο όρο (πέρα του ότι ξαναχρησιμοποιείς την μεταβλητή i για να κάνεις το loop, οπότε έχασες το πλήθος αφού δεν το αποθήκευσες κάπου), δεν χρησιμοποιείς να νούμερα που έχεις αποθηκεύσει στον πίνακα σου, αλλά μόνο το τελευταίο (που είναι μηδέν). γ) Δεν πρέπει να κάνεις loop μέχρι το 100 αλλά μέχρι όσο είναι το πλήθος των αριθμών που έδωσε ο χρήστης.



-- float mesos;
float sum=0;
int j;
for (j=0; j<(i-1); j++){
sum=sum +arithmoi[i];
}
mesos=sum/i-1;
παράθεση:
παράθεση:
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 25 Φεβ 2007 04:43    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Στον κώδικα σου κάνεις το εξής:

int i=0; //Αρχικοποιείς το i με 0
float x;
// γέμισμα πίνακα
do {
cout << "Δώσε τον " << i+1 << "αριθμό ";
cin >> arithmoi[ i ];
x=arithmoi[ i ];
i++; //Κάθε φορά που παίρνεις έναν αριθμό αυξάνεις το i, άρα το i έχει το πλήθος
} while (x!=0);

Επειδή το i έχει μετρήσει και το τελευταίο νούμερο (το 0), που έδωσες για να βγείς από το loop, το οποίο βασικά δεν το χρησιμοποιείς για να υπολογίσεις το μέσο όρο, το πλήθος των αριθμών σου είναι i-1.

Από εδώ και πέρα ο κώδικας που έχεις αρκεί -σχεδόν- (αφού για το δεύτερο loop που υπολογίζεις το μέσο όρο χρησιμοποιείς την μεταβλητή j).

παράθεση:
Δεν μπορώ δηλ να καταλάβω πώς θα κρατήσει τους αριθμούς που έχω δώσει.

Γι αυτό το λόγο χρησιμοποιείς τον πίνακα arithmoi, για να κρατάς τους αριθμούς που έχει δώσει ο χρήστης. Στο κώδικα σου έχεις
κώδικας:
cin >> arithmoi[i];

παράθεση:
Πώς θα καταλάβει πόσους έδωσα

Γι αυτό το λόγο χρησιμοποιείς την μεταβλητή i, για να μετράει πόσους έχεις δώσει. Στον κώδικα σου έχεις
κώδικας:
i++;

παράθεση:
Εφόσον τους βάζω στον πίνακα arithmoi[100] δεν είναι αρκετό αυτό?

Ναι είναι αρκετό. Αρκεί να το ξέρεις ότι τους βάζεις εκεί, και να τους διαβάζεις από εκεί όταν υπολογίζεις το μέσο όρο.

Βλέπω ότι τα διόρθωσες τα περισσότερα λάθη στον κώδικα σου, αλλά σου ξέφυγε ένα σημείο, εδώ κολλάει το "σχεδόν" που ανέφερα στην αρχή.
Κάνεις:
κώδικας:
sum=sum +arithmoi[i];

ενώ ο μετρητής σου στο loop είναι το j και όχι το i. Οπότε πρέπει να γίνει:
κώδικας:
for (j=0; j<(i-1); j++){
    sum=sum + arithmoi[j]; //οχι arithmoi[i]
}


Καλή συνέχεια.
ggeo1


Μέλος από: 08 Νοε 2006
Μηνύματα: 16

View users profile
ΜήνυμαΣτις: 26 Φεβ 2007 00:35    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Ευχαριστώ πολύ για τη βοήθεια!

Διορθώνοντας και τις γραμμές
sum=sum +arithmoi[j];
mesos=sum/j;

βγάζει πλέον τα σωστά αποτελέσματα

Εκείνο που με μπερδεύει είναι με την cin >> arithmoi[i];
Δηλ καταχωρώ τους αριθμούς στον πίνακα arithmoi με την μεταβλητή i .Η μεταβλητή αυτή δηλ είναι υπεύθυνη για το ποιούς αριθμούς καταχώρησα.
Βάζοντας στο loop την for (j=0; j<(i-1); j++) χρησιμοποιώ την j για να αντιστοιχίσω το πλήθος των αριθμών.
Πώς γίνεται να βάλω την sum=sum +arithmoi[j]; ,να βάλω δηλ την j μέσα στην arithmoi[],αφού η i είναι αυτή που κρατάει το ποιούς αριθμούς έδωσα

Ευχαριστώ
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 26 Φεβ 2007 14:32    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Θα προσπαθήσω να το πω όσο πιο απλά μπορώ, και ελπίζω να γίνω κατανοητός.

Αυτό που κάνεις είναι να ορίσεις ένα πίνακα 100 θέσεων. Μπορεί να κρατήσει μέχρι 100 πραγματικούς αριθμούς.
κώδικας:
float arithmoi[100];


Κάθε φορά που δίνει έναν αριθμό ο χρήστης, τον αποθηκεύεις στον πίνακα (arithmoi[]) όχι στο i όχι στο j ούτε πουθενά αλλού.

Δεν τον αποθηκεύεις όμως στον πίνακα έτσι γενικά κι αόριστα, αλλά σε κάποια συγκεκριμένη θέση. Την 1η την 2η, την ν-οστή.

Το ποιά θα είναι αυτή η θέση το δείχνει κάποιος δείκτης.
Στο 1ο loop σου, το ρόλο του δείκτη τον παίζει η μεταβλητή i.
κώδικας:
cin >> arithmoi[i];


Στο 2ο loop σου, το ρόλο του δείκτη τον παίζει η μεταβλητή j.
κώδικας:
sum=sum +arithmoi[j];


Κάθε φορά όμως αυτό που πας και διαβάζεις ή γράφεις είναι ο πίνακας aritmoi[]. Αυτός κρατάει τα νούμερα.

Αυτό που δεν ξέρει ο πίνακας είναι το πόσα είναι αυτά τα νούμερα.

Το πόσα είναι αυτά τα νούμερα το μετράει η μεταβλητή i στο 1ο loop (γι αυτό και δεν πρέπει να το χάσεις αυτό το νούμερο), επειδή μετά από κάθε αριθμό που δίνει ο χρήστης την αυξάνεις κατά 1.
κώδικας:
i++;


Πριν που χρησιμοποιούσες το i στο 2ο loop, αυτόματα έχασες την παλιά τιμή που είχε το i, δηλαδή το πόσα νούμερα είχε δώσει ο χρήστης. Γι αυτό πρέπει να χρησιμοποιήσεις άλλη μεταβλητή να παίξει το ρόλο του δείκτη, την j, στο 2ο loop.

Μόλις τελειώσει και το 2ο loop η μεταβλητή j έχει την ίδια τιμή με το i (όσα είναι δηλαδή τα νούμερα που έδωσε ο χρήστης).

[edit]Λάθος! Τώρα που πρόσεξα τον κώδικα, το j στο 2ο loop, πάει μέχρι το (i-1). [/edit]

Να έχεις υπόψην σου ότι οι πίνακες στη C ξεκινάνε από το 0. Ενας πίνακας 100 θέσεων πάει από 0...99

Last edited by dva_dev on 27 Φεβ 2007 02:59, edited 1 time in total
ggeo1


Μέλος από: 08 Νοε 2006
Μηνύματα: 16

View users profile
ΜήνυμαΣτις: 26 Φεβ 2007 14:58    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Εντάξει ,το κατάλαβα τώρα!

Ευχαριστώ πολύ!

Θα επανέλθω πιστεύω με νέες ερωτήσεις!
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [7 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Τώρα είναι 22 Ιαν 2017 14:07 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos