Jump to content



C++ Help!!!


JdCZT

Recommended Posts

Δημοσιεύτηκε

Παιδες φαινομενικα ειναι ΠΟΛΥ απλο αλλα μετα απο τοσες ωρες ασκησεων λαλησα και δεν μπορω πλεον να σκεφτω...Με λιγα λογια το προγραμμα υποτειθεται οτι πρεπει να δεχεται χαρακτηρες συνεχεια μεχρι το πρωτο '*' απο το οποιο και μετα θα μετραει το πληθος των επομενων χαρακτηρων μεχρι να βρει το δευτερο '*'...οπου και θα εκτυπωνει αυτοματα το πληθος που προηγουμενως μετρησε...(χωρις να παταει ο χρηστης Enter....δλδ με το που θα βλεπει το δευτερο'*'----->Θανατος.)

#include<stdio.h>

int main (void)

{

int a,g;

char x;

printf("dwse sunexeia xaraktires:");

a=0;

do

{

scanf("%c",&x);

if(x='*')

{

g=0;

do

{

scanf("%c",&x);

g++;

}while(x!='*');

a++;

}

}

while(a!=2);

printf("mesolavisan : %d grammata", g);

return 0;

}

Στο παραπανω κομματι κωδικα γινονται ολα καλα αλλα μετα το δευτερο '*' πρεπει ο χρηστης να πατησει Enter για να του δωσει το αποτελεσμα...Ετσι οπως το σκεφτομαι μαλλον για καποιο λογο δεν "βλεπει" τον περιορισμο της εξωτερικης do-while....Οσοι πιστοι προσελθετε...

Ευχαριστω προκαταβολικα παιδες... :innocent:

dokimi_3ask.rar

με την getc θα πρεπει να το κανεις μου φενεται για να μην θελει enter........

Με gets , getche και getchar.... oλα θελουν enter. :drool: Τι μπορει να φταιει...

Με μια πρόχειρη ματιά θα έλεγα ότι το if(x='*') είναι ανάθεση τιμής στο x και έπρεπε να είναι if(x == '*'). Επίσης, το a πρέπει να το αυξήσεις 2 φορές για να βγει από την πρώτη do while ενώ η λογική σου θέλει μόνο μία. Κατά τ' άλλα αν γίνεται να χρησιμοποιείς το code tag code.gif για να μας δείχνεις τον κώδικα ώστε να είναι πιο ευανάγνωστος. :)

edit:

Κάπως έτσι θα πρότεινα να το γράψεις (αν θες φυσικά) και εξηγώ γιατί:

  1. Οι μεταβλητές σου καλό είναι να έχουν λογικά ονόματα, ώστε να μπορεί να το καταλάβει ο καθένας οποιοδήποτε μέρος του κώδικα και να διαβάζει. (βλ characters για το πλήθος χαρακτήρων)
  2. Όταν θέλεις μία λογική συνθήκη και όχι πλήθος βημάτων για να βγεις από μια while καλό είναι να χρησιμοποιείς boolean μεταβλητές των οποίων την τιμή θα αλλάζεις όταν θέλεις να βγεις (βλ endProgram)
  3. Με την δεύτερη do while που χρησιμοποιούσες, ουσιαστικά αν ο χρήστης μετά το πρώτο * πατούσε καπάκι και το δεύτερο, εσύ θα μετρούσες 1 χαρακτήρα αφού θα την εκτελούσες τουλάχιστον μία φορά, ενώ δεν το θέλεις αυτό.

Νομίζω ότι ο παρακάτω κώδικας θα παίξει, αλλά δεν τον έχω δοκιμάσει, καθώς έχω καιρό να γράψω σε c και δεν έχω και κάποιον compiler εδω.

#include<stdio.h>
int main (void) {
int characters = 0;
char input;
bool endProgram = false;

printf("dwse sunexeia xaraktires:");
do {
scanf("%c", &input);
if(input == '*') {
scanf("%c", &input);
while(input != '*') {
characters++;
scanf("%c", &input);
}
endProgram = true; //finished what the program should do after the second *, can now exit do while
}
} while(!endProgram);
printf("mesolavisan : %d grammata", characters);
return 0;
}

Eυχαριστω παιδες για το ενδιαφερον....Σωστες οι παρατηρησεις θα φροντισω σε επομενα προγραμματα να γραφω ποιο κατανοητες μεταβλητες.Ετρεξα το κομματι κωδικα που εδωσες αλλα και παλι μετα το δευτερο '*' δεν πηγαινει στην printf,αλλα συνεχιζει να δεχεται χαρακτηρες μεχρι να πατησει ο χρηστης ENTER οπου και τερματιζει τελειως το cmd...κατι τετοια κουλα μου κανει με οποιο τροπο γραφω το κωδικα... :ph34r: που θα μ παει...Αν σκεφτειτε τιποτε αλλο καλοδεχουμενο....

μα δεν χρεισιμοποιεις την getche ή getch.........

Οντως με getche() δουλεψε...Ειμαι σιγουρος οτι την ειχα δοκιμασει αλλα πανω στη κουλαμαρα μου κατι δεν μου εβγαζε σωστα και την εγκατελειψα...Ευχαριστω παιδες για τη βοηθεια...θα επανερθω δρυμητερος... :suicide:

Αν καταλαβα καλα σου κλεινει το cmd αποτομα.Δοκιμασε να βαλεις στο τελος της main() ή πριν απο το return 0; αυτη την εντολη: system("pause"); και κανε και #include <stdlib.h>

Αν καταλαβα καλα σου κλεινει το cmd αποτομα.Δοκιμασε να βαλεις στο τελος της main() ή πριν απο το return 0; αυτη την εντολη: system("pause"); και κανε και #include <stdlib.h>

Καλα καταλαβες....Ειναι ενα θεμα που εχω καιρο τωρα και δεν καταλαβαινω το λογο...θα το δοκιμασω αν και εγω για να αποφυγω αυτο το αποτομο κλεισιμο εβαζα μια scanf και στην ουσια επρεπε να πατησεις ενα οποιοδηποτε πληκτρο και μετα Enter για να τερματισει το προγραμμα.

Αν κανεις compile και console run σε windows τοτε εφοσον χρησιμοποιησεις την getchar μπορεις λογικα να το τερματισεις με EOF δηλαδη Ctrl+Z (για linux ειναι Ctrl+D)

Θα στο τερματιζει ετσι χωρις να φευγει το παραθυρο.. Πρεπει να βαλεις συνθηκη βεβαια εφοσον λαβει εντολη EOF να μην συνεχισει.. (αν πολυλογω και τα εχεις δοκιμασει ηδη αυτα ή δεν ειναι χρησιμα, τα γραφω απλα να υπαρχουν στο forum :) )

Share the knowledge...Οχι δεν το ηξερα

Λοιπον παιδες καινουριο ποιο ευκολο απο το προηγουμενο.Ενα προγραμμα που υπολογιζει το επομενο υψος βαση του προηγουμενου.Το προηγουμενο ειναι h0 και το επομενο h1 με αρχικη τιμη h0=0.96;Eπισης εχω μια μεταβλητη c1 και τι διαφορα χρονου DT οπου τα εισαγει ο χρηστης.Aκομα εχω μια μεταβλητη x την οποια χρησιμοποιω για να υπολογιζω το πληθος των επαναληψεων που ειναι υποπολλαπλασια του 300 ετσι ωστε για παραδειγμα ο ελεγχος να γινεται παντα σε ενα βαθος χρονου 300 δευτερολεπτων.πχ αν DT=2 x=300/2=150.... 150 επαναληψεις με διαφορα χρονου 2 δευτερολεπτων....συνολο μετρησης 300 δευτερολεπτα.

Το προβλημα:

Δουλευει μονο με αρνητικες τιμες στο c1...Αμα του δωσω θετικες--->Κινεζικα

Μηπως χανω κατι στην printf;;;

Μηπως υπαρχει καποιος περιορισμος σε double μεταβλητες >0 που μου διαφευγει :hm:

Μηπως εχω μπερδεψει τις βουρτσες με τις....μεταβλητες και δεν ξερω τι γραφω...οποια βοηθεια δεκτη...Και παλι ευχαριστω προκαταβολικα

#include<stdio.h>
#include<math.h>
int main (void)
{
int i,x;
double h0=0.96,h1,c1,DT;
printf("Dwse ti stathera C1 kai ti diafora xronou DT:\n");
scanf("%lf",&c1);
scanf("%lf",&DT);
x=300/(int)DT;
printf("Gia c1 : %0.2lf kai DT : %0.2lf , to ypsos einai h: \n",c1,DT);
for(i=1;i<=x;i++)
{
h1=-c1*sqrt(h0)*DT+h0;
printf("%0.2f %d \n",h1,i);
h0=h1;
}
printf("Press any key and ENTER to exit.");
scanf("%lf",&c1);
return 0;
}

Ypologismos_ypsous_me_metavlito_vima.rar

Δουλευει μονο με αρνητικες τιμες στο c1...Αμα του δωσω θετικες--->Κινεζικα

Μηπως χανω κατι στην printf;;;

#include<stdio.h>
#include<math.h>
int main (void)
{
int i,x;
double h0=0.96,h1,c1,DT;
printf("Dwse ti stathera C1 kai ti diafora xronou DT:\n");
scanf("%lf",&c1);
scanf("%lf",&DT);
x=300/(int)DT;
printf("Gia c1 : %0.2lf kai DT : %0.2lf , to ypsos einai h: \n",c1,DT);
for(i=1;i<=x;i++)
{
h1=-c1*sqrt(h0)*DT+h0;
[COLOR=Red][B]^[/B][/COLOR]

printf("%0.2f %d \n",h1,i);
h0=h1;
}
printf("Press any key and ENTER to exit.");
scanf("%lf",&c1);
return 0;
}

Βγάλε το μείον...

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.