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

Ασκήσεις C


dimihouse

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

Δημοσ.

Αν κάποιος έχει να προτείνει πιο βέλτιστη λύση ας τη γράψει να τη δω και εγώ :)

 

μπορείς να το κάνεις έτσι

>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
srand(time(NULL));
int temp; //ορισμός βοηθητικής παραμέτρου
temp = 2*(rand()%50+1); //rand()%(50-1+1)+1 //το υπολογίζουμε από 1 ως 50 και...πολλαπλασιάζωντας με 2--->(2 έως 100)
printf("%d \n",temp);
getchar(); // σε περίπτωση που σου εξαφανίζεται η κονσόλα
return 0;
}

 

---------- Προσθήκη στις 10:38 ---------- Προηγούμενο μήνυμα στις 10:06 ----------

 

όσο για την τράπουλα ένας άλλος τρόπος είναι

 

>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int main(){
   int i,j;
char deck[52][30]={};
char cards[][30]={"ace of ","two of ","three of ","four of ","five of ","six of ",
               "seven of ","eight of ","nine of ","ten of ","knave of","queen of ","king of "};
char suit[][30]={"spades.","diamonds.","hearts.","clubs."};
srand(time(NULL));
int randomCard=rand()%52+1;
//create deck
int position=0;
for (i=0;i<13;i++)
 for (j=0;j<4;j++){
     strcat(deck[position],cards[i]);
     strcat(deck[position++],suit[j]);
   }

printf("\n%s",deck[randomCard]);
getchar();
return 0;
}

  • Απαντ. 43
  • Δημ.
  • Τελ. απάντηση
Δημοσ.

οκ αντέγραψέτα, αλλά μετά κάτσε να τα μάθεις, θάχεις πρόβλημα στη συνέχεια. Είναι τεράστιο κενο σωστα?

Δημοσ.
οχι στο Τμήμα Εφαρμοσμένων Μαθηματικών

 

---------- Προσθήκη στις 09:43 ---------- Προηγούμενο μήνυμα στις 07:19 ----------

 

μετά από 2+ ώρες......χωρίς να ξέρω καν πως λειτουργεί η rand και πρώτη φορά βλέπω την time.h κατάφερα να κάνω αυτό

 

>
#include <stdio.h>
#include <time.h>

int main()
{
srand(time(NULL));
int i,k,h;
h=0;
k=0;

while (k>=0 && h>=0){

i = rand()%2+1;
switch (i){
case 1:printf("korona\n");
k=k+1;
h=0; break;

case 2:printf("gramata\n");
h=h+1;
k=0; break; }
if (k==3) break;
if (h==3) break;
}
} 

 

ευχάριστο τα παιδιά που βάλανε τις προηγούμενες

 

 

 

το σωστό είναι

>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int i,k,throws=0;
       srand(time(NULL));
k=0;//korones

   while (k<3){
       throws++;
       i = rand()%2+1;
       switch (i){
           case 1:printf("korona\n");
                   k=k+1;
                   break;
           case 2:printf("gramata\n");
                   k=0;
                   break;
       }
   }
   printf("\n finally it took %d throws!!!",throws);
   getchar();
}

Δημοσ.

ωραίος και ο πίνακας χαρακτήρων. Το μόνο που με χαλάει ελαφρώς είναι η διπλή for. Το πρόβλημα βέβαια εδώ είναι μικρής τάξης απλά με τη διπλή for έχεις κόστος γύρω στο Ν*Μ, πες N^2, ενώ με τον άλλο τρόπο Ν+Μ σχεδόν 0.

Δημοσ.
ωραίος και ο πίνακας χαρακτήρων. Το μόνο που με χαλάει ελαφρώς είναι η διπλή for. Το πρόβλημα βέβαια εδώ είναι μικρής τάξης απλά με τη διπλή for έχεις κόστος γύρω στο Ν*Μ, πες N^2, ενώ με τον άλλο τρόπο Ν+Μ σχεδόν 0.

 

-Ν*Μ=13*4 << Ν^2=13*13 δεν είναι το ίδιο

 

-αν ψάχνεις βέτιστη λύση από πλευράς κόστους

τότε βάλε καρφωτό τον πίνακα deck και να βγάλεις τις for.

 

-βέβαια αν έπρεπε να τραβήξεις 20 φύλλα το κόστος παραμένει Ν*Μ=52

ενώ στο δικό σου 20*(Ν+Μ)=20*(17)=340.

 

φιλικά

virxen75

Δημοσ.

>#include <stdio.h>
#include <time.h>
#include <stdlib.h>
main()
{
srand(time(NULL));
int a,b,apotxr,answer_choice,counter = 0,i;     
     
     
     
printf("welcome to the math quiz\n");

               for(i = 0;;i++){
                 a       = rand() % 20 + 1;
                 b       = rand() % 20 + 1;
                         
                 
                 if((a +  <=20){
                     printf("%d+%d =",a,;
                     scanf("%d",&apotxr);
                         if(apotxr == (a + ){
                             counter        = counter   + 1; /*gia na stamatisei stis 5 swstes to programa*/ 
                             answer_choice = rand() % 4 + 1;
                                           switch( answer_choice ){
                                                   case 1:
                                                        printf("%d\n",apotxr); 
                                                        printf("SWSTA!!!!!! \n");
                                                        if(counter == 5)
                                                        exit(1);
                                                        break;
                                                   case 2:
                                                        printf("%d\n",apotxr); 
                                                        printf("Auti einai i apantisi\n");
                                                        if(counter == 5)
                                                        exit(1);
                                                        break;
                                                   case 3:
                                                        printf("%d\n",apotxr); 
                                                        printf("you got it\n");
                                                        if(counter == 5)
                                                        exit(1);
                                                        break;
                                                   case 4:
                                                        printf("%d\n",apotxr); 
                                                        printf("thats correct\n");
                                                        if(counter == 5)
                                                        exit(1);
                                                        break;
                                                        }
                         }
                 }
               }
 system("PAUSE");	
 return 0;
}

 

 

Δεν ειναι 100% σωστο σαν προγραμμα(καπου στον counter πρεπει να εχει προβλημα).

Δημοσ.
-Ν*Μ=13*4 << Ν^2=13*13 δεν είναι το ίδιο

 

-αν ψάχνεις βέτιστη λύση από πλευράς κόστους

τότε βάλε καρφωτό τον πίνακα deck και να βγάλεις τις for.

 

-βέβαια αν έπρεπε να τραβήξεις 20 φύλλα το κόστος παραμένει Ν*Μ=52

ενώ στο δικό σου 20*(Ν+Μ)=20*(17)=340.

 

φιλικά

virxen75

 

Σωστός δεν το σκέφτηκα καθόλου. Έχω φάει πακέτα με διπλές for και αγχώνομαι όταν βλέπω. GJ++

 

---------- Προσθήκη στις 21:33 ---------- Προηγούμενο μήνυμα στις 21:29 ----------

 

>for(i = 0;;i++)

 

Λείπει η συνθήκη τερματισμού

αν θες πχ 10 επαναλήψεις πρέπει να γίνει

>for(i = 0;i<10;i++)

Δημοσ.
Σωστός δεν το σκέφτηκα καθόλου. Έχω φάει πακέτα με διπλές for και αγχώνομαι όταν βλέπω. GJ++

 

---------- Προσθήκη στις 21:33 ---------- Προηγούμενο μήνυμα στις 21:29 ----------

 

 

Λείπει η συνθήκη τερματισμού

αν θες πχ 10 επαναλήψεις πρέπει να γίνει

>for(i = 0;i<10;i++)

 

Επίτηδες δεν έβαλα συνθήκη τερματισμού.Αν έβαζα δε θα γινόταν 5 φορές το quiz.Γι αυτό έβαλα την counter.

Δημοσ.
Επίτηδες δεν έβαλα συνθήκη τερματισμού.Αν έβαζα δε θα γινόταν 5 φορές το quiz.Γι αυτό έβαλα την counter.

 

διαβάζετε πιο προσεκτικά τις ασκήσεις που λύνετε.

η συγκεκριμμένη αναφέρει ενδεικτικά το 5 αλλά λέει δηλώστε

το πλήθος των ερωτήσεων με #define ώστε να μπορεί να αλλάζει εύκολα.

 

π.χ.

#define N 5

Δημοσ.
διαβάζετε πιο προσεκτικά τις ασκήσεις που λύνετε.

η συγκεκριμμένη αναφέρει ενδεικτικά το 5 αλλά λέει δηλώστε

το πλήθος των ερωτήσεων με #define ώστε να μπορεί να αλλάζει εύκολα.

 

π.χ.

#define N 5

 

Καλά δεν είναι και το τραγικό λάθος.αντί για 5 στις if(counter == 5)θα βάλει N και μαζί με τα #include θα βάλει ένα #define N 5.

Δημοσ.

μία απλή λύση για το math quiz

 

>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 5 

int main(){
   char praxeis[]={'+','-'};
   int praxi=0,number1=0,number2=0,result=0,answer=0;
   int count=0;
           srand(time(NULL));
printf("\n welcome to math quiz !\n");
   for (int i=0;i<N;i++){
       answer=0;
       result=0;
       count=0;
       praxi=rand()%2;
       while (result>20 || result<1){
           number1=rand()%20+1;
           number2=rand()%20+1;
           if (praxeis[praxi]=='+') 
               result=number1+number2;
           else
               result=number1-number2;
       }
       printf(" what is %d %c %d ?",number1,praxeis[praxi],number2);
       while(answer!=result && count<3){
           count++;
           scanf("%d",&answer);
           if (answer!=result && count<3){
               printf(" That's incorrect.Try a different answer:");
           }         
       }
       if (answer!=result){
           printf(" No, the answer is %d\n",result);
       }else printf(" That's the answer!\n");

   }
   
   getchar();    getchar();
return 0;    
}

Δημοσ.

και το τελευταίο με τα πολλαπλά μηνύματα επιτυχίας

 

>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 5 

int main(){
   char praxeis[]={'+','-'};
   char messages[][30]={"correct!\n","that's the answer!\n","you got it.The answer is %d!\n","Well done!\n"};
   int praxi=0,number1=0,number2=0,result=0,answer=0;
   int count=0;
   int pio=0;
           srand(time(NULL));
printf("\n welcome to math quiz !\n");
   for (int i=0;i<N;i++){
       answer=0;
       result=0;
       count=0;
       praxi=rand()%2;
       pio=rand()%4;
       while (result>20 || result<1){
           number1=rand()%20+1;
           number2=rand()%20+1;
           if (praxeis[praxi]=='+') 
               result=number1+number2;
           else
               result=number1-number2;
       }
       printf(" what is %d %c %d ?",number1,praxeis[praxi],number2);
       while(answer!=result && count<3){
           count++;
           scanf("%d",&answer);
           if (answer!=result && count<3){
               printf(" That's incorrect.Try a different answer:");
           }         
       }
       if (answer!=result){
           printf(" No, the answer is %d\n",result);
       }else printf(messages[pio],result);

   }
   
   getchar();    getchar();
return 0;    
}

 

 

Υ.Γ.

τις έλυσα επειδή είδα ότι κάποιοι ασχολήθηκαν ,αλλιώς δεν θα το έκανα.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

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