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

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

Δημοσ.

Φίλοι μου είμαι ΗΜΜΥ 1ο εξάμηνο και προσπαθώ να βγάλω αυτό:

 

Γράψτε ένα πρόγραμμα σε C το οποίο θα δέχεται ως είσοδο από το πληκτρολόγιο το βάρος ενός ατόμου σε κιλά
και το ύψος του σε μέτρα. Το πρόγραμμά σας θα πρέπει να ελέγχει για τυχόν λανθασμένες τιμές εισόδου και
συγκεκριμένα για αρνητικές ή μηδενικές τιμές. Στη συνέχεια το πρόγραμμά σας θα πρέπει να υπολογίζει τον ΔΜΣ
του ατόμου. Έχοντας υπολογίσει το ΔΜΣ το πρόγραμμά σας θα πρέπει να κατατάσσει το άτομο σε μια από τις
ακόλουθες κατηγορίες εκτυπώνοντας το κατάλληλο μήνυμα στην οθόνη. Συγκεκριμένα:
  εάν ο ΔΜΣ είναι <= 20 το άτομο κατατάσσεται στην κατηγορίας underweight και εκτυπώνεται το
μήνυμα “Underweight” την οθόνη.
  Εάν ο ΔΜΣ είναι > 20 και <= 25 το άτομο κατατάσσεται στην κατηγορίας normal και εκτυπώνεται το
μήνυμα “Normal” την οθόνη.
  Εάν ο ΔΜΣ είναι > 25 και <= 30 το άτομο κατατάσσεται στην κατηγορίας overweight και εκτυπώνεται
το μήνυμα “Overweight” την οθόνη.
  Εάν ο ΔΜΣ είναι > 30 το άτομο κατατάσσεται στην κατηγορίας obese και εκτυπώνεται το μήνυμα
“Obese” την οθόνη.
 
Το πρόγραμμά μου είναι αυτό:
 
#include <stdio.h>
 
int main(void)
{
int height, weight, category;
float dms=0;
 
Printf ("Give height in meters");
Scanf ("%d", &height);
Printf ("Give weight in kg");
Scanf ("%d", &weight);
 
If ((weight<=0)||(height<=0))
category=0;
Else
dms=weight/(height^2);
 
If ((dms>0)&&(dms<=20))
category=1;
Else if ((dms>20)&&(dms<=25))
category=2;
Else if ((dms>25)&&(dms<=30))
category=3;
Else if (dms>30)
category=4;
 
If (category==0)
Printf ("\n Wrong details");
Else if (category==1)
Printf ("\n Underweight");
Else if (category==2)
Printf ("\n Normal");
Else if (category==3)
Printf ("\n Overweight");
Else if (category==4)
Printf ("\n Obese");
}

 

Το τρέχω στο codeblocks και μου βγάζει γύρω στα 10 error.. Όποις γνωρίζει ας βοηθήσει..

  • Moderators
Δημοσ.

scanf, printf, else δεν ξεκινάνε με κεφαλαίο. Επίσης, δοκίμασες να διαβάσεις τι errors σου βγάζει;

  • Like 5
Δημοσ.

Δεν έχεις ιδέα ποσο ευκολη ειναι αυτη η άσκηση για το επιπεδο του πολυτεχνειου. Θα αγριέψει το παιχνιδι ακομα εισαι αρχη!!!

 /* Ένας τροπος ενδεικτικα για να αποφυγει κάποιος τις αρνητικές τιμές στην εισοδο. */

printf("Dwse enan thetiko arithmo gia upsos h oti allo ... ");  // OUT OF THE LOOP 
 
do 
{
printf("Mh egkurh timh try again ...");
scanf("%d" , &variable);
} while ( variable < 0); // Skip negative values
 

Μπορεις να φτιάξεις μια συνάρτηση η οποια θα κανει τον υπολογισμο που θες και θα επιστρέφει το αποτελεσμα το οποιο μετα θα ελέγχεις και αναλογα την τιμή του θα γινεται και η καταταξη αν το ατομο ειναι τελικά φυσιολογικό ή πανω απο τα κανονικά αναλογα τι λεει η εκφωνηση. 


scanf, printf, else δεν ξεκινάνε με κεφαλαίο. Επίσης, δοκίμασες να διαβάσεις τι errors σου βγάζει;

 

Λογικά αυτα τα συντακτικά θα ειναι τα σφάλματα.Τα λογικά θα τα δει αμα το τρέξει μονος του :P

Δημοσ.

Φίλε μου...

 

Τα errors σου λένε τι λάθος έχεις. Για αυτό είναι εκεί, για να σου λένε τι λάθος έχεις. Δες τα errors και διόρθωσέ τα. 

Δημοσ.

Μου φαίνεται τελείως τραγικό να ψάχνει ΗΜΜΥ εδώ πέρα για λύση τέτοιας άσκησης. Και μου θυμίζει την απορία που είχα στο πρώτο εξάμηνο του ΗΜΜΥ, πώς γίνεται άτομα που το "έχουν" με το διάβασμα και πέρασαν ΗΜΜΥ να μην την παλεύουν με τον προγραμματισμό ή τουλάχιστον να κάτσουν να διαβάσουν τα 2-3 πρώτα κεφάλαια από το οποιοδήποτε βιβλίο για C.

Δημοσ.

Μου φαίνεται τελείως τραγικό να ψάχνει ΗΜΜΥ εδώ πέρα για λύση τέτοιας άσκησης. Και μου θυμίζει την απορία που είχα στο πρώτο εξάμηνο του ΗΜΜΥ, πώς γίνεται άτομα που το "έχουν" με το διάβασμα και πέρασαν ΗΜΜΥ να μην την παλεύουν με τον προγραμματισμό ή τουλάχιστον να κάτσουν να διαβάσουν τα 2-3 πρώτα κεφάλαια από το οποιοδήποτε βιβλίο για C.

ολοι απο καπου ξεκινάμε φίλε.Κανεις δεν γεννηθηκε ξερόλας.Η C στην αρχη ειναι περιεργη γλωσσα μεχρι να καταλαβεις πως δηλωνεις τα βασικα στοιχεια.Απο εναν φοιητη ΤΕΙ αυτα που ειχε και 10 στο εργαστηριο

  • Like 2
Δημοσ.

ολοι απο καπου ξεκινάμε φίλε.Κανεις δεν γεννηθηκε ξερόλας.Η C στην αρχη ειναι περιεργη γλωσσα μεχρι να καταλαβεις πως δηλωνεις τα βασικα στοιχεια.Απο εναν φοιητη ΤΕΙ αυτα που ειχε και 10 στο εργαστηριο

 

 

Βρε μαζί σου. Αλλά ο συγκεκριμένος δεν έχει απορία "πως κάνω αυτό στη C" αλλά "κάτι έκανα, δεν ξέρω τι, δεν καταλαβαίνω τίποτα". 

 

 

Εκτός και εάν το "διαβάζω το error" το κατατάσσεις στα skills related με την C. 

  • Like 2
Δημοσ.

ολοι απο καπου ξεκινάμε φίλε.Κανεις δεν γεννηθηκε ξερόλας.Η C στην αρχη ειναι περιεργη γλωσσα μεχρι να καταλαβεις πως δηλωνεις τα βασικα στοιχεια.Απο εναν φοιητη ΤΕΙ αυτα που ειχε και 10 στο εργαστηριο

Δεν περιμένω από κανέναν να ξέρει C πριν πάει στη σχολή, αλλά να κάνει μια προσπάθεια και μόνος του. Όχι να μη διαβάζει καν τι λάθη του βγάζει ο compiler, και να μπαίνει κατευθείαν εδώ για να ρωτήσει. 

Δημοσ.

Φίλε καλημέρα !

Μπράβο, το πρόγραμμα που έφτιαξες έχει ελάχιστα λάθη. Εκανα πολύ λίγες διορθώσεις. Το βασικό λάθος είναι ότι (σχεδόν) όλες οι εντολές στη C γράφονται με μικρά. Έτσι δεν είναι σωστό να γράφεις Printf, Scanf κλπ.
Επίσης επειδή ειδικά το ύψος αλλα και το βάρος ενδεχομένως να είναι και δεκαδικοί, καλύτερα να τα δηλώνεις float αντί του int.
Επίσης αν μια μεταβλητή είναι float, μέσα στο scanf() που τη διαβάζει βάζουμε %f κι όχι %d.

Και πάλι μπράβο γι' αυτο που έφτιαξες,
Ακολουθεί η διορθωμένη έκδοση
Φιλικά,
Ο Άσπρος Γάτος

#include <stdio.h>
 
int main(void)
{
float height, weight, category;
float dms=0;
 
printf ("Give height in meters");
scanf ("%f", &height);
printf ("Give weight in kg");
scanf ("%f", &weight);
 
if ((weight<=0)||(height<=0))
category=0;
else
dms=weight/(height*height);
 
if ((dms>0)&&(dms<=20))
category=1;
else if ((dms>20)&&(dms<=25))
category=2;
else if ((dms>25)&&(dms<=30))
category=3;
else if (dms>30)
category=4;
 
if (category==0)
printf ("\n Wrong details");
else if (category==1)
printf ("\n Underweight");
else if (category==2)
printf ("\n Normal");
else if (category==3)
printf ("\n Overweight");
else if (category==4)
printf ("\n Obese");
}

Δημοσ.

Καθιστε ρε σεις η category τι ρολο παιζει? και γιατι να ξανα βάζεις if else? ας το δωσει απευθειας για εκτυπωση.

 
#include <stdio.h>
 
int main(void)
{
float height, weight;
float dms=0;
 
do {
printf ("Give height in meters & weight in kg(only positive numbers): ");
scanf ("%f%f", &height, &weight);
} while((weight<=0)||(height<=0));
 
dms=weight/(height*height);
 
if ((dms>0)&&(dms<=20))
printf ("\n Underweight");
else if ((dms>20)&&(dms<=25))
printf ("\n Normal");
else if ((dms>25)&&(dms<=30))
printf ("\n Overweight");
else if (dms>30)
printf ("\n Obese");
else
printf("Wrong Details.");
 
return 0;
}
Δημοσ.

float height, weight;

float dms=0;

Το bmi (dms στον κώδικα σου), δεν χρειάζεται αρχικοποίηση αφού θα πάρει τιμή πιο κάτω που υπολογίζεται.

dms=weight/(height*height);
Αν δεν απατώμαι, μόνο οι μετρητές χρειάζονται αρχικοποίηση.

Επίσης μπορείς να τις δηλώσεις μαζί, εκτός αν ξεχωρίζεις στις δηλώσεις σου τις αρχικοποιημένες μεταβλητές.

float height , weight , dms=0;
 

 

 else
printf("Wrong Details.");

 

Δεν νομίζεις πως είναι περιττό, αφού το while δεν θα τον αφήσει να δώσει λάθος είσοδο;

 

Τέλος προς τον thread starter,

καλό είναι να μάθεις να χρησιμοποιείς τα { brackets } στις συνθήκες των δομών ελέγχου/επανάληψης κτλ.

Παρ'όλο που μια σειρά κώδικα δεν θέλει brackets, μάθε να βάζεις από τώρα τα brackets γιατί αύριο μεθαύριο θα σου γίνει συνήθειο, και σε μεγαλύτερα block εντολών και θα φας τα μάτια σου με το debug.

 

Φιλικά πάντα.

  • Like 1
Δημοσ.

Αν δεν απατώμαι, μόνο οι μετρητές χρειάζονται αρχικοποίηση.

 

Μετρητές; Τι τύπος μεταβλητής είναι; Νέος; Δηλαδή: counter a = 0; ?

  • Like 1
Δημοσ. (επεξεργασμένο)

Το bmi (dms στον κώδικα σου), δεν χρειάζεται αρχικοποίηση αφού θα πάρει τιμή πιο κάτω που υπολογίζεται.

dms=weight/(height*height);
Αν δεν απατώμαι, μόνο οι μετρητές χρειάζονται αρχικοποίηση.

Επίσης μπορείς να τις δηλώσεις μαζί, εκτός αν ξεχωρίζεις στις δηλώσεις σου τις αρχικοποιημένες μεταβλητές.

float height , weight , dms=0;
 

Δεν νομίζεις πως είναι περιττό, αφού το while δεν θα τον αφήσει να δώσει λάθος είσοδο;

 

Τέλος προς τον thread starter,

καλό είναι να μάθεις να χρησιμοποιείς τα { brackets } στις συνθήκες των δομών ελέγχου/επανάληψης κτλ.

Παρ'όλο που μια σειρά κώδικα δεν θέλει brackets, μάθε να βάζεις από τώρα τα brackets γιατί αύριο μεθαύριο θα σου γίνει συνήθειο, και σε μεγαλύτερα block εντολών και θα φας τα μάτια σου με το debug.

 

Φιλικά πάντα.

 

 

Ναι έχεις δικιο για το τελευταιο else. Για τις μεταβλητές μπορεις να τις δηλώσεις σε μια γραμμή με το κομμα σαν διαχωριστή. Ωστόσο χάνεις την ευκαιρια να βάλεις σχολια διπλα απο κάθεμια μεταβλητή.Οποτε αν θες οπωσδηποτε σχολιο διπλα απο καθεμια το κάνεις σε ξεχωριστή γραμμη ειναι καθαρα θέμα επιλογής.

 

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

 

ΥΓ Δεν ειναι δικος μου ο κώδικας.

 

Δεν αλλάζει κανεις συντονιστης τον τίτλο? να βάλει εργασια στον δεικτη μαζας σωματος στην C αμα μπει κανεις και έχει παρομοιο προβλημα και θελει να δει μια λυση να έρθει κατευθειαν στο θρέντ μην ανοιγει καινουργιο.

Επεξ/σία από DDevil
Δημοσ.

Μετρητές; Τι τύπος μεταβλητής είναι; Νέος; Δηλαδή: counter a = 0; ?

Ή δεν κατάλαβες οτι εννοώ μεταβλητές που χρησιμοποιούνται ως μετρητές ή είχες όρεξη για ειρωνία.

Either way δεν θα κάτσω να στο αναλύσω. Το σημαντικό είναι να καταλάβει ο thread starter αυτά που θέλει.

  • Like 1
Δημοσ.

Ή δεν κατάλαβες οτι εννοώ μεταβλητές που χρησιμοποιούνται ως μετρητές ή είχες όρεξη για ειρωνία.

Either way δεν θα κάτσω να στο αναλύσω. Το σημαντικό είναι να καταλάβει ο thread starter αυτά που θέλει.

 

Και τι τύπος μεταβλητής είναι αυτός; 

 

Αυτό που δεν καταλαβαίνεις εσύ είναι πως "μετρητές" ΔΕΝ υπάρχει. Χώρια ότι είναι λάθος να ονομάζεις "counter" ή "metritis" μία μεταβλητή (εκτός και εάν όντως είναι context wise σωστό να ονομάσεις counter την μεταβλητή), το να λες "μεταβλητή μετρητής" είναι... άσε καλύτερα. 

 

Οπότε, either way, την επόμενη φορά φρόντισε να μάθεις και κάτι πριν αρπαχτείς. 

 

 

Και για να έχουμε καλό ερώτημα, δώσε μου ένα snipet μία μεταβλητή "μετρητής". Να δω επιτέλους τι είναι αυτό!

 

Ελπίζω να μην εννοείς τις μεταβλητές που χρησιμοποιούνται στο for loop ή σε κάθε loop... ελπίζω δηλαδή γιατί είναι κρίμα για εσένα να λες τέτοια από την μία και από την άλλη να απαντάς έτσι. 

  • Like 1

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

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

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

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

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

Σύνδεση

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

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