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

Προβλημα στην C


Anubis13

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

Δημοσ.

Καλημερα,

Θα ηθελα να γραψω ενα προγραμμα το οποιο να διαλεγει τυχαια αριθμους στο 16δικο συστημα απο το 0-F ωστε να ισχυει μια συγκεκριμενη εξισωση.

πχ α + β = 4 οπου α,β οι δυο τυχαιοι αριθμοι. Ευχαριστω

Δημοσ.
Καλημερα,

Θα ηθελα να γραψω ενα προγραμμα το οποιο να διαλεγει τυχαια αριθμους στο 16δικο συστημα απο το 0-F ωστε να ισχυει μια συγκεκριμενη εξισωση.

πχ α + β = 4 οπου α,β οι δυο τυχαιοι αριθμοι. Ευχαριστω

 

Χμμ..

Κανε μια προσπαθεια, δεν ειναι και τοσο δυσκολο.

Εαν κρινω απο αυτα που γραφεις.

α= ενας τυχεος απο 0 εως 16

β= αλλος τυχεος απο 0 εως 16

και πρεπει α τυχεος +β τυχεος = με Χ, οπου Χ το οριζεις εσυ.

Εχεις να κανεις με μαθηματικα...

εφοσον α+β = Χ , αν α εινα τυχεος ο β δεν ειναι. Ο β ειναι α-Χ , αρα θελεις απο C (νομιζω) α=rand()%16 και εισαι οκ

Δημοσ.

Eχεις δικιο:

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

int main ()
{
 int a,b,x;
 srand ( time(NULL) );
 a = rand() % 16;
 b = x -a;
}

 

Κατι τετοιο?Γινεται να παρω κατευθειαν αριθμους hex η πρεπει να γινει μετατροπη?

Θα μπορουσα να εχω καποιο Table να διαλεγω απο εκει?

πχ char Table[] = "0123456789ABCDEF";

Δημοσ.

hex,δεκαδικό,δυαδικό,8αδικό,36αδικό,... είναι τρόποι απεικόνισης και μόνο. Οι αριθμοί δεν αλλάζουν.

Δες printf με format "%x"

π.χ. printf("%x",32); τυπώνει το 32 με δεκαεξαδική μορφή

Δημοσ.

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

 

int main ()

{

int a,b,x;

srand ( time(NULL) );

a = rand() % 16;

b = x -a;

}

 

 

 

αν χ=4,a=16 => b=x-a=4-16=-12

πρέπει να βάλεις και κάποια if προφανώς

Δημοσ.

Καταλαβα..Τι γινεται ομως σε μια τετοια περιπτωση?

α + β + γ + δ + ε = 10

αν α = 8 απο την rand..Τοτε ολα τα αλλα θα βγουν απο αφαιρεσεις?

Εκτος αν καλω την rand αναδρομικα και οριζω αυτο που μου μενει απο την αφαιρεση καθε φορα ως καινουρια τιμη

Δημοσ.
Καταλαβα..Τι γινεται ομως σε μια τετοια περιπτωση?

α + β + γ + δ + ε = 10

αν α = 8 απο την rand..Τοτε ολα τα αλλα θα βγουν απο αφαιρεσεις?

 

αν α,β,γ,δ,ε από 0 έως 16 τότε

 

για το α + β + γ + δ + ε = 10

αν α=8 =>β+γ+δ+ε=2 προφανώς τα στοιχεία είναι λίγα για να προσδιοριστούν

 

άλλος τρόπος (χρονοβόρος) είναι με δοκιμές όλοι να είναι τυχαίοι

>
bool kati=false;
int a,b,c,d,e;
while(!kati){
a=rand()%16;
b=rand()%16;
c=rand()%16;
d=rand()%16;
e=rand()%16;
if(a + b+ c + d + e ==10) kati=true;
}

 

το εκανα βιαστικά δες το και πες που

Δημοσ.
αν α,β,γ,δ,ε από 0 έως 16 τότε

 

για το α + β + γ + δ + ε = 10

αν α=8 =>β+γ+δ+ε=2 προφανώς τα στοιχεία είναι λίγα για να προσδιοριστούν

 

άλλος τρόπος (χρονοβόρος) είναι με δοκιμές όλοι να είναι τυχαίοι

>
bool kati=false;
int a,b,c,d,e;
while(!kati){
a=rand()%16;
b=rand()%16;
c=rand()%16;
d=rand()%16;
e=rand()%16;
if(a + b+ c + d + e ==10) kati=true;
}

 

το εκανα βιαστικά δες το και πες που

 

Υπαρχει δυνατος συνδυασμος α = 8 β = 2 τα υπολοιπα 0

η α =8 γ = 2 και τα υπολοιπα 0

οι καποιοι απο τους α,β,γ,δ να ειναι 1 και οι αλλοι μηδεν

Δημοσ.

Μπορείς να κάνεις όλα τα στοιχεία 2 και μετά να αφαιρείς απο το ένα και να προσθέτεις σε άλλον τυχαίες τιμές

 

edit:

 

έγραψα αυτό και είναι ok.

 

>
1 
2 #include <stdio.h>
3 #include <stdlib.h>
4 
5 int main(int argc,char ** argv)
6 {
7 
8     int a[5],i;
9     srand(&a[3]);
10     for(i=0;i<5;++i) a[i] = 0;
11     for(i=0;i<10;++i) a[rand()%5]++;
12     for(i=0;i<5;++i) printf("A %d is %d\n",i,a[i]);
13 }

Δημοσ.
αν α,β,γ,δ,ε από 0 έως 16 τότε

 

για το α + β + γ + δ + ε = 10

αν α=8 =>β+γ+δ+ε=2 προφανώς τα στοιχεία είναι λίγα για να προσδιοριστούν

 

άλλος τρόπος (χρονοβόρος) είναι με δοκιμές όλοι να είναι τυχαίοι

>
bool kati=false;
int a,b,c,d,e;
while(!kati){
a=rand()%16;
b=rand()%16;
c=rand()%16;
d=rand()%16;
e=rand()%16;
if(a + b+ c + d + e ==10) kati=true;
}

 

το εκανα βιαστικά δες το και πες που

Κατι μου λεει πως δε θα τελειωσει αυτο το λοοπ ποτε.;)

[εντιτ] κατι μου λεει πως κανω λαθος

Δημοσ.

Βασικά... καλύτερα να διαβάζεται κιόλας το code

 

>
do{
   a=rand()%16;
   b=rand()%16;
   c=rand()%16;
   d=rand()%16;
   e=rand()%16;
   }
while((a + b+ c + d + e) != 10);

8 0

Το πρόβλημα με αύτο, σε σχέση με αυτό που προτείνω, είναι ότι θα πρέπει να κάνει 500-3000 iterations..

 

edit: με testing βγαίνει κάπου 1050 loops

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

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

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