Derniers sujets
Qui est en ligne ?
Il y a en tout 3 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 3 Invités :: 1 Moteur de rechercheAucun
Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion
Statistiques
Nous avons 241 membres enregistrésL'utilisateur enregistré le plus récent est ben_frog
Nos membres ont posté un total de 8921 messages dans 811 sujets
[PROBLEME] Commande input et générateur aléatoire
+2
didierv
TotoShampoin
6 participants
Forum Oric :: Forums :: Forum Public :: Programmation en C
Page 1 sur 1
[PROBLEME] Commande input et générateur aléatoire
Bonjour les oriciens
Voilà... J'ai deux problèmes.
Le premier est que je n'arrive pas à utiliser de commande similaire au INPUT du basic.
J'ai essayé scanf, mais j'ai eu cette erreur :
Mon deuxième problème est que je n'arrive pas à avoir un générateur aléatoire qui marche.
La fonction rand fonctionne, mais la fonction srand ne marche pas. De fait, j'obtiens toujours le même résultat.
J'aimerais avoir de l'aide dans les deux problèmes.
Merci d'avance ^^
Voilà... J'ai deux problèmes.
Le premier est que je n'arrive pas à utiliser de commande similaire au INPUT du basic.
J'ai essayé scanf, mais j'ai eu cette erreur :
- Code:
E:\osdk_1_11\0- Projets\Caractères
Assembling
scanbuf reserve 256
E:\osdk_1_11\0- Projets\CaractÞres\scanf.s(8): 1de2:Syntax error
fieldcount db 0
E:\osdk_1_11\0- Projets\CaractÞres\sscanf.s(53): 1e48:Syntax error
numberscan dw 0
E:\osdk_1_11\0- Projets\CaractÞres\sscanf.s(166): 1f17:Syntax error
signscan db 0
E:\osdk_1_11\0- Projets\CaractÞres\sscanf.s(167): 1f17:Label defined error
Break after 4 errors
ERROR : Build failed.
Appuyez sur une touche pour continuer...
Mon deuxième problème est que je n'arrive pas à avoir un générateur aléatoire qui marche.
La fonction rand fonctionne, mais la fonction srand ne marche pas. De fait, j'obtiens toujours le même résultat.
J'aimerais avoir de l'aide dans les deux problèmes.
Merci d'avance ^^
- Un message pour Jede, mais tout le monde devrait le savoir:
- Un message pour toi Jede : Avec mon père, on a inspecté la commande clock(), et on a vu que ça lit juste la valeur des adresses 276 et 277. En fait, cette zone mémoire n'est active qu'en basic, donc cette commande n'est d'aucune utilité :/
_________________
Bonjour c:
TotoShampoin- Messages : 78
Date d'inscription : 16/08/2017
Age : 23
Localisation : Lagny Sur Marne
Re: [PROBLEME] Commande input et générateur aléatoire
toto a écrit:Mon deuxième problème est que je n'arrive pas à avoir un générateur aléatoire qui marche.
La fonction rand fonctionne, mais la fonction srand ne marche pas. De fait, j'obtiens toujours le même résultat.
voir le ceo-mag 241 page 16, je pense que tu devrais trouver des pistes
_________________
DidierV - CEO Mag
alias coco.oric sur Defence-Force
Re: [PROBLEME] Commande input et générateur aléatoire
Bonjour TotoShampoin
first problem is already fixed by Dbug - take a look HERE.
About the 'srand': in OSDK use 'srandom' instead to set the seed for the generator.
than the value of VIA's T1 is used as seed.
I hope this helps .
first problem is already fixed by Dbug - take a look HERE.
About the 'srand': in OSDK use 'srandom' instead to set the seed for the generator.
- Code:
getchar();
srandom(deek(0x304));
printf("random : %d\n", random());
than the value of VIA's T1 is used as seed.
I hope this helps .
iss- Messages : 112
Date d'inscription : 30/10/2014
Re: [PROBLEME] Commande input et générateur aléatoire
iss a écrit:Bonjour TotoShampoin
first problem is already fixed by Dbug - take a look HERE.
About the 'srand': in OSDK use 'srandom' instead to set the seed for the generator.Here the 'getchar' is used to make the process true random depending on how fast the user press a key,
- Code:
getchar();
srandom(deek(0x304));
printf("random : %d\n", random());
than the value of VIA's T1 is used as seed.
I hope this helps .
Thank you so much!!!!!!!!!!!!!!!
Mais maintenant, j'ai un autre problème.
En fait, je cherche à faire un programme qui mélange les cartes... Donc j'ai un tableau qui correspond au jeu de cartes (de 0 à 51), et le programme est une boucle qui échange deux cartes choisies aléatoirement. Voilà le programme :
- Code:
void shuffle()
{
for(i=0;i<128;i++)
{
nb1 = random() % 52;
nb2 = random() % 52;
card1 = cards[nb1];
card2 = cards[nb2];
cards[nb1] = card2;
cards[nb2] = card1;
}
}
Mais quand le programme s'exécute, il crash après le mélange :/
J'ai commis une erreur quelque part?
_________________
Bonjour c:
TotoShampoin- Messages : 78
Date d'inscription : 16/08/2017
Age : 23
Localisation : Lagny Sur Marne
Re: [PROBLEME] Commande input et générateur aléatoire
Une chose est sûre, le code op 32 n'existe pas en 6502
Je n'ai jamais utilisé le C pour Oric, mais est-ce qu'il ne manque pas une instruction de sortie tout simplement, ou un symbole de fin d'instruction qqpart ?
Je n'ai jamais utilisé le C pour Oric, mais est-ce qu'il ne manque pas une instruction de sortie tout simplement, ou un symbole de fin d'instruction qqpart ?
Symoon- Messages : 779
Date d'inscription : 26/04/2014
Re: [PROBLEME] Commande input et générateur aléatoire
Symoon a écrit:Une chose est sûre, le code op 32 n'existe pas en 6502
Je n'ai jamais utilisé le C pour Oric, mais est-ce qu'il ne manque pas une instruction de sortie tout simplement, ou un symbole de fin d'instruction qqpart ?
Bin je crois pas ._.
Je vais envoyer tout le code
- Code:
#include <lib.h>
void printCard(int x, int y, int number, int color);
void eraseCard(int x, int y);
void CG_DEFCHAR();
void AdvancedPrint();
#define TREFLE 1
#define CARREAU 2
#define COEUR 3
#define PIQUE 4
#define VALET 11
#define DAME 12
#define ROI 13
#define AS 1
#define VIDE 0
#define FLIP 5
#define NOCARD 0
int i,j,k;
int nb1, nb2, card1, card2;
int cards[52];
void prepare()
{
for(i=0;i<52;i++)
cards[i] = i;
}
void shuffle()
{
for(i=0;i<128;i++)
{
nb1 = random() % 52;
nb2 = random() % 52;
card1 = cards[nb1];
card2 = cards[nb2];
cards[nb1] = card2;
cards[nb2] = card1;
}
}
void main()
{
CG_DEFCHAR();
cls();
AdvancedPrint(9,9,"Appuyez sur une touche");
getchar();
srandom(deek(0x304));
AdvancedPrint(9,9," MELANGE DES CARTES ");
prepare(); shuffle();
cls();
//Affichage de la carte
poke(0xBB80+1*40+1,9);
for(i=2;i<8;i++){
poke(0xBB80+i*40+1,8);
poke(0xBB80+i*40+2,4);
}
for(i=8;i<23;i++){
poke(0xBB80+i*40+1,9);
}
for(i=23;i<28;i++){
poke(0xBB80+i*40+1,8);
}
printCard( 2, 9,NOCARD,VIDE);
for(j=0;j<64;j++)
for(i=0;i<=255;i++);
for(k=0;k<52;k++)
{
printCard( 2, 9,NOCARD,FLIP);
for(j=0;j<5;j++)
{
for(i=0;i<=255;i++);
}
printCard( 2, 9, cards[k]%13 +1,cards[k]/13 +1);
for(j=0;j<64;j++)
{
for(i=0;i<=255;i++);
}
}
}
_________________
Bonjour c:
TotoShampoin- Messages : 78
Date d'inscription : 16/08/2017
Age : 23
Localisation : Lagny Sur Marne
Re: [PROBLEME] Commande input et générateur aléatoire
I'm not sure where is the problem. I have 2 suspects - something like overflow somewhere or something related to SEDORIC.
Try this code for shuffle:
Actually this is the 'standard' way to make shuffle, the code is faster but it can to be optimized more .
Try this code for shuffle:
- Code:
static char i, nb1, nb2, card1, card2, cards[52];
static void shuffle(void)
{
for(i=0;i<52;i++)
{
nb1 = i;
nb2 = random() % 52;
card1 = cards[nb1];
card2 = cards[nb2];
cards[nb1] = card2;
cards[nb2] = card1;
}
}
Actually this is the 'standard' way to make shuffle, the code is faster but it can to be optimized more .
iss- Messages : 112
Date d'inscription : 30/10/2014
Re: [PROBLEME] Commande input et générateur aléatoire
iss a écrit:I'm not sure where is the problem. I have 2 suspects - something like overflow somewhere or something related to SEDORIC.
Try this code for shuffle:
- Code:
static char i, nb1, nb2, card1, card2, cards[52];
static void shuffle(void)
{
for(i=0;i<52;i++)
{
nb1 = i;
nb2 = random() % 52;
card1 = cards[nb1];
card2 = cards[nb2];
cards[nb1] = card2;
cards[nb2] = card1;
}
}
Actually this is the 'standard' way to make shuffle, the code is faster but it can to be optimized more .
I had tried to shuffle with a smaller amount of time, but the problem is the same :/
I feel like it happens AFTER the shuffle.
I tried to change the program so it simply prints the values instead of plotting the cards, and the problem is the same. So I have a suspicion about the cls, but there's no reason :/
_________________
Bonjour c:
TotoShampoin- Messages : 78
Date d'inscription : 16/08/2017
Age : 23
Localisation : Lagny Sur Marne
Re: [PROBLEME] Commande input et générateur aléatoire
Pour le cls(), je ne pense pas que ce soit lui le problème, il y en a un au début du main(), à moins que ça ne plante dès le début.
Ce que tu peux faire, c'est ajouter des
Ca permettra de limiter les recherches.
Tu peux aussi en ajouter régulièrement dans main() du genre
Peut-être un problème de débordement de la pile du 6502.
Après il restera la bonne vieille séance de debug avec le moniteur de Oricutron, en compilant le programme avec l'opton --add-source pour pouvoir s'y retrouver dans le code assembleur.
Ce que tu peux faire, c'est ajouter des
- Code:
printf("debut fonction xxx...")
- Code:
printf("fin fonction xxx\n")
Ca permettra de limiter les recherches.
Tu peux aussi en ajouter régulièrement dans main() du genre
- Code:
printf("avant xxx\n")
Peut-être un problème de débordement de la pile du 6502.
Après il restera la bonne vieille séance de debug avec le moniteur de Oricutron, en compilant le programme avec l'opton --add-source pour pouvoir s'y retrouver dans le code assembleur.
assinie- Messages : 271
Date d'inscription : 09/02/2014
Re: [PROBLEME] Commande input et générateur aléatoire
Il y a aussi l'option -Ln fichier.sym pour générer un fichier de symboles utilisable par Oricutron (option -s fichier.sym pour le charger ou commande sl fichier.sym à partir du moniteur de Oricutron).
assinie- Messages : 271
Date d'inscription : 09/02/2014
Re: [PROBLEME] Commande input et générateur aléatoire
assinie a écrit:Pour le cls(), je ne pense pas que ce soit lui le problème, il y en a un au début du main(), à moins que ça ne plante dès le début.
Ce que tu peux faire, c'est ajouter deset
- Code:
printf("debut fonction xxx...")
au début et à la fin de chacune de tes fonctions pour voir laquelle pose éventuellement problème.
- Code:
printf("fin fonction xxx\n")
Ca permettra de limiter les recherches.
Tu peux aussi en ajouter régulièrement dans main() du genrepour avoir une trace de ce qu'il se passe.
- Code:
printf("avant xxx\n")
Peut-être un problème de débordement de la pile du 6502.
Après il restera la bonne vieille séance de debug avec le moniteur de Oricutron, en compilant le programme avec l'opton --add-source pour pouvoir s'y retrouver dans le code assembleur.
Judicieux. Je m'y colle.
*Plus tard*
J'ai compris le problème!!
Juste à côté du CLS (la première carte donc), il y a un roi de la couleur 1350 (qui n'existe donc pas)
Donc ça crash parce qu'il sort de la zone mémoire prévue.
Les autres cartes n'ont pas bougé, donc ça veut dire que c'est le mélange qui a mal tourné, et j'ai du mal à comprendre comment.
D'ailleurs, en faisant le test plusieurs fois, j'ai vite remarqué que d'autres cartes sortent, mais toujours la première, et toujours des valeurs aberrantes
_________________
Bonjour c:
TotoShampoin- Messages : 78
Date d'inscription : 16/08/2017
Age : 23
Localisation : Lagny Sur Marne
Re: [PROBLEME] Commande input et générateur aléatoire
Pour shuffle(), je suppose que tu utilises le code que tu as publié au début, mais pour random() tu utilises quoi?
assinie- Messages : 271
Date d'inscription : 09/02/2014
Re: [PROBLEME] Commande input et générateur aléatoire
SOLUTION TROUVEE :
random() % MAX
^ c'est ce qui ne marchait pas.
Il a fallut faire un modulo APRES le random, sur une variable à l'écart
random() % MAX
^ c'est ce qui ne marchait pas.
Il a fallut faire un modulo APRES le random, sur une variable à l'écart
_________________
Bonjour c:
TotoShampoin- Messages : 78
Date d'inscription : 16/08/2017
Age : 23
Localisation : Lagny Sur Marne
Re: [PROBLEME] Commande input et générateur aléatoire
Si tu es sous ISDK, tu dois commenter la dernière ligne du (#define rand() ... ) du fichier lib.h
c:OSDK\include\lib.h
c:OSDK\include\lib.h
Ladywasky- Messages : 240
Date d'inscription : 25/08/2018
Age : 53
Sujets similaires
» BASIC - Tirage au sort aléatoire - fonction RND()
» problème de compilation c OSDK 1.14
» [sujet Public] - le Ceo-Mag
» Problème avec dxa
» Problème d'horloge
» problème de compilation c OSDK 1.14
» [sujet Public] - le Ceo-Mag
» Problème avec dxa
» Problème d'horloge
Forum Oric :: Forums :: Forum Public :: Programmation en C
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|
Jeu 21 Mar 2024 - 8:51 par Dom50
» carte mère Oric (re)tracée
Mar 5 Mar 2024 - 18:54 par kenneth
» Meurtre à Grande Vitesse
Dim 25 Fév 2024 - 5:09 par Iurius
» ORIC-1 sur LE BON COIN
Ven 23 Fév 2024 - 23:01 par Mcar
» ORIC ATMOS sur LE BON COIN
Dim 4 Fév 2024 - 12:06 par kiwilevrai
» Problème d'affichage des couleurs avec un Oric Atmos
Sam 27 Jan 2024 - 1:26 par pierbail
» Bienvenue dans le Forum des Oriciens
Mar 9 Jan 2024 - 12:33 par Dom50
» Rencontre avec Laurant Weill, co-fondateur de Loriciel, et mon garçon de 12 ans
Ven 29 Déc 2023 - 14:13 par Arcade-des-Monts
» Bonnes fêtes
Mar 26 Déc 2023 - 10:21 par Dom50
» Murders in Venice / Meutres à Venise
Sam 18 Nov 2023 - 22:44 par retroric
» Un clavier PS/2 pour tester un ORIC
Dim 27 Aoû 2023 - 9:49 par Voyageur
» Disquette 3" Sedoric
Mar 1 Aoû 2023 - 14:22 par AtomeX
» faire un 6502 avec des phototransistor
Dim 16 Juil 2023 - 17:26 par Voyageur
» Oricutron linux et DSK
Jeu 29 Juin 2023 - 18:34 par Voyageur
» No Problem !
Dim 25 Juin 2023 - 17:53 par Voyageur