Definir Intervale en C

Fermé
Anthony - 18 oct. 2004 à 00:11
 Anthony - 18 oct. 2004 à 13:19
Bonjour tout le monde,
c'est mon premier post sur ce forum et je suis debutant en programation:

Je voudrais savoir svp comment declarer une variable de type Int de facon que sa valeur soit comprise entre 2 entiers 100<x<150

J'utilise Randomize en fait
randomize();
printf("%d\n", rand() % x);

si je mets x=100; il m'imprime une valeur entre 0 et 99,
Comment faire pour qu'il me choisisse une valeur entre 50 et 100 par exemple.

Merci d'avance
A voir également:

5 réponses

Salut!

/*
	test.c

	public domain
*/

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

int main(void)
{
	int i;
	int x;

	for(i = 0; i < 10; i++)
	{
		loop:
		{
			x = rand();
			if((x < 0) || (x > 100))
			{
				goto loop;
			}
		}
		printf("x = %i\n", x);
	}
	return EXIT_SUCCESS;
}


Je pense que tu peux t'en inspirer. ^^
0
En plus modulable:

/*
	test.c

	public domain
*/

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

int sprand(int min, int max);

int main(void)
{
	int i;

	for(i = 0; i < 10; i++)
	{
		int x;

		x = sprand(0, 100);
		printf("x = %i\n", x);
	}
	return EXIT_SUCCESS;
}

int sprand(int min, int max)
{
	int x;

	loop:
	{
		x = rand();
		if((x < min) || (x > max))
		{
			goto loop;
		}
	}
	return x;
}


Chaque appel de sprand pourra générer un entier compris dans l'intervalle désiré.
0
bucheron Messages postés 62 Date d'inscription samedi 20 mars 2004 Statut Membre Dernière intervention 10 décembre 2004 2
18 oct. 2004 à 09:47
Whaaooo !!

Ca doit faire des années (depuis que j'ai arrêté le BASIC en CE2, à vrai dire), que je n'ai pas vu de GOTO !!

Pour paraphraser mon prof de programmation système :
"un GOTO, c'est mal !!"

En d'autre terme, le C est un langage suffisament complet pour trouver _presque_ toujours une alternative au *beurk* GOTO.

Si mes souvenir sont bon, tout le code source du noyau linux ne comporte qu'1 GOTO, c'est pour dire ...

Mais merci en tout cas pour cette minute "nostalgie" ;-)
0
si tu veux un entier entre 50 et 100
tu n as qu a faire :

int x = 50 + (rand() %51);

plus generalement si tu veux un entier entre min et max

int x = min + (rand() % (max - min + 1));
0
/*
	test.c

	public domain
*/

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

int sprand(int min, int max);

int main(void)
{
	int i;

	for(i = 0; i < 10; i++)
	{
		int x;

		x = sprand(0, 100);
		printf("x = %i\n", x);
	}
	return EXIT_SUCCESS;
}

int sprand(int min, int max)
{
	int x;

	x = rand();
	while(x < min) || (x > max))
	{
		x = rand();
	}
	return x;
}


Voilà qui fera plaisir les allergiques du goto cependant cette alternative me semble moins jolie et redondante (affectation).
0
bucheron Messages postés 62 Date d'inscription samedi 20 mars 2004 Statut Membre Dernière intervention 10 décembre 2004 2
18 oct. 2004 à 11:41
Voilà qui fera plaisir les allergiques du goto

Ce n'est pas une allergie :
"Rumour has it that the goto statement should be avoided because the program flow will jump all over the place, generating what's known as SPAGHETTI CODE!
No harm in using it in the most simplest of programs though, but don't make a habit of using it!! "
(lu sur http://www.iota-six.co.uk/c/d3_switch_break_and_goto_statements.asp)

Alors, pour que ça ne devienne pas une habitude, autant ne pas l'utiliser du tout.

cette alternative me semble moins jolie et redondante (affectation).

C'est pour cela qu'a été inventée la boucle "do ... while" !!

int sprand(int min, int max)
{
	int x;

	do {
		x = rand();
	} while(x < min) || (x > max));
	return x;
}


0
Guki > bucheron Messages postés 62 Date d'inscription samedi 20 mars 2004 Statut Membre Dernière intervention 10 décembre 2004
18 oct. 2004 à 12:02
Tient grace à toi je viens de me rendre compte que while et do while étaient différents. ^^

Le while évalue en 1er tandis que do while en dernier alors en effet la solution do while est compatible et évite la redondance d'affectation.
0

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

Posez votre question
Merci tout le monde !!
0