Definir Intervale en C

Anthony -  
 Anthony -
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

Guki
 
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
Guki
 
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   Statut Membre Dernière intervention   2
 
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
lorenzo
 
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
Guki
 
/*
	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   Statut Membre Dernière intervention   2
 
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   Statut Membre Dernière intervention  
 
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
Anthony
 
Merci tout le monde !!
0