[C] suite supercroissante aléatoire

Cow_B Messages postés 41 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 5 avril 2006 - 13 janv. 2004 à 01:18
Cow_B Messages postés 41 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 5 avril 2006 - 23 janv. 2004 à 21:59
Salut vous tous, je vous expose mon souci :
je cherche à faire un programme qui me fourni une suite aléatoire supercroissante d'entier (un suite supercroissante est une suite dont le terme i est superieur à la somme de tous les terme précédents). Je dosi avoir une suite de 32 éléments. Or avec des longs ca pose un problème car je sors toujours de l'intervalle des longs.... En fait il faudrait ke je puisse passer à 64 bits.

Auriez vous une idée de comment je peux faire ?

MERCI !!! :) :)

Cow-B
-----------------------------------------------
C'est au pied du mur.... qu'on voit le mieux le mur
-----------------------------------------------
A voir également:

17 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 janv. 2004 à 07:12
Passe à 64 bits tiens
0
Cow_B Messages postés 41 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 5 avril 2006
13 janv. 2004 à 12:17
Oui, ca je c bien.... mais comment ?????? je suis un gros débutant....

Cow-B
-----------------------------------------------
C'est au pied du mur.... qu'on voit le mieux le mur
-----------------------------------------------
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 janv. 2004 à 12:20
__int64 sous VC++
0
Cow_B Messages postés 41 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 5 avril 2006
13 janv. 2004 à 12:42
J'ai essayé avec ca, mais y a un truc ki couille apparement...
tout semble se passer comme si il ne reconnaissait pas le __int 64 lors de l'utilisation du programme... Pour info je travaille sur .NET

Merci encore pour les infos :)

Cow-B
-----------------------------------------------
C'est au pied du mur.... qu'on voit le mieux le mur
-----------------------------------------------
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 janv. 2004 à 16:36
si tu l'écris en 2 mots c'est normal. Sinon tu peux créer une classe Int64, qui contiendra 2 entiers.
0
Cow_B Messages postés 41 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 5 avril 2006
13 janv. 2004 à 17:12
oups.... je te rassure, sur mon source je l'ai marker en un seul... mais ca marche pas kan meme... j'envoie d'ailleurs le source :


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

void main()
{
    __int64 somme=0, k=0;
    int i, oui =-1;
    __int64 a[32];

    srand( (unsigned)time( NULL ) );
    while (oui != 1)
    {
        do
        {
            somme=0;
            for(i=0 ; i<32 ; i++)
            {
 // Il faut vérifier qu'il sagit bien d'une suite supercroissante
                do
                {
// On fait un random sur k pour avoir un k 
// aléatoire compris entre 1 et 5.
                    k=rand()%5;
                 }while (k<=0);
                 a[i] = rand()%k+somme+1;
                 somme += a[i];
             }
        }while ((a[30]>100000000));
// Dépasser ces valeurs pour ces éléments nous fait sortir de l'intervalle des long
    for(i=0 ; i<32 ; i++)
    {
        printf("L\\'element %2ld est : %11ld\\n",i+1, a[i]);
    }
    printf("\\nCette suite vous convient-elle ? : oui(1) ou non(2)");
    fflush(stdin);
    scanf("%ld",&oui);
    printf("\\nla somme 111 est de : %ld", somme);
    }
}


Cow-B
-----------------------------------------------
C'est au pied du mur.... qu'on voit le mieux le mur
-----------------------------------------------
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 janv. 2004 à 18:02
bizarre, moi il compile tres bien
0
Cow_B Messages postés 41 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 5 avril 2006
13 janv. 2004 à 18:57
Moi aussi il compile ss pb, mais lors de l'utilisation, c des intke g... pas des __int64... d'où kestion....

En meme temps j'utilise .NET et pas VC++. Ca vient peut etre de là.... bref si kkun voit...

En tt cas, merci vecchio56 et aux autres aussi ;)

Cow-B
-----------------------------------------------
C'est au pied du mur.... qu'on voit le mieux le mur
-----------------------------------------------
0
Cow_B Messages postés 41 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 5 avril 2006
13 janv. 2004 à 19:23
Kel est le format kil faut utiliser pour mes printf ??? juskà présent j'utilisais des %ld... peut etre ke mon problème vient uniquement de là..

Cow-B
-----------------------------------------------
C'est au pied du mur.... qu'on voit le mieux le mur
-----------------------------------------------
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 janv. 2004 à 21:14
avec printf en effet ca va etre difficile je crois
je te propose d'utiliser les E/S de C++:

__int64 i = 4294967326;
std::cout << i;

marche tres bien

si tu veux faire ca en C tu récupère deux entiers sur 32 bits grace aux décalages à partir du __int64 et tu codes toi meme l'addition
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 janv. 2004 à 21:36
#include <stdio.h>

int longueur(unsigned __int64 i)
{
int l = 1;
while(i /= 10)
++l;
return l;
}

void format_int64(unsigned __int64 i, char* res)
{
int l = longueur(i);
res[l] = 0;
do
{
res[--l] = (int)(i % 10) + '0';
} while(i /= 10);
}

int _tmain(int argc, _TCHAR* argv[])
{
unsigned __int64 i = 18046744073709551615;
char res[30];
format_int64(i, res);
printf(res);
return 0;
}
0
Cow_B Messages postés 41 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 5 avril 2006
13 janv. 2004 à 22:18
Euh....

Va pas falloir le prendre mal, mais je crois ke g rien compris....

En soit, je connai tous les terme ke tu emploi, mais la sauce final, je la comprend pô...

Cow-B
-----------------------------------------------
C'est au pied du mur.... qu'on voit le mieux le mur
-----------------------------------------------
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 janv. 2004 à 22:24
- longeur retourne la longueur de l'entier (par exemple: 1000 -> 4)

- format_int64 sert a imprimer un __int64 non signé dans une chaines de caractères pour pouvoir ensuit l'afficher à l'écran, rien de tres compliquer je pense

Si tu veux tu peux utiliser une classe que j'ai faite et qui permet de manipuler des entiers aussi grands que l'on veut, tu peux la récupérer ici:
http://www.cppfrance.com/code.aspx?ID=19105
0
Cow_B Messages postés 41 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 5 avril 2006
13 janv. 2004 à 22:43
J'ai trouvé comment faire (enfin, une amie m'a aidée :) ), en fait il y a juste besoin de jouer sur le format.... à la place de mettre %ld il fallait mettre %I64 !!!!

Et maintenant ca marche du tonnerre !!!!! Je garde kan meme tes 2 solutions de coté.. je sens ke ca pourra resservir ! ;)

En tout cas, MERCI beaucoup !!!!!!!!!!!!!!!!!!!!!

Cow-B
-----------------------------------------------
C'est au pied du mur.... qu'on voit le mieux le mur
-----------------------------------------------
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 janv. 2004 à 22:46
merci de l'info, je n'arrivais pas non plus a trouver quel format utiliser
0
BornBanane Messages postés 10 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 février 2004
23 janv. 2004 à 21:18
tient moi aussi je veux faire une suite super croissante j'avais entendu parler du __int64 mais pas du %i64 .
Hors j'ai teste %i64 et ca me fait comme si je fesait %i puis ca ecrit 64 !

donc je comprend pas trop : j'utilise Visual Studio 6 et Dev-c ++

si vous pouviez m'eclairez !

merci d'avance !
0
Cow_B Messages postés 41 Date d'inscription mardi 13 janvier 2004 Statut Membre Dernière intervention 5 avril 2006
23 janv. 2004 à 21:59
Yop

Essaye avec un i majuscule : %I64

ou sinon essaye avec un unsigned __int64 et dc pr ton format : %I64u

Cow-B
-----------------------------------------------
C'est au pied du mur.... qu'on voit le mieux le mur
-----------------------------------------------
0
Rejoignez-nous