Aide pour débutant en C [Fermé]

Signaler
Messages postés
4
Date d'inscription
jeudi 24 novembre 2016
Statut
Membre
Dernière intervention
27 novembre 2016
-
Messages postés
4
Date d'inscription
jeudi 24 novembre 2016
Statut
Membre
Dernière intervention
27 novembre 2016
-
Bonjour, depuis plusieurs jours je cherche à comprendre comment faire en sorte de crée un programme qui compte combien de nombres de Fibonacci jai, entre deux nombre que je donne en entrée de jeux.

1 réponse

Messages postés
491
Date d'inscription
samedi 13 juin 2015
Statut
Membre
Dernière intervention
19 février 2021
84
Après avoir regardé sur internet de quoi il s'agissait traduire en C l'Algorithme récursif naïf serait l'approche la plus facile en vu de la complexité que les autres algorithmes et expressions à l'écriture du codage (surtout pour un débutant) pourraient soumettre.

De la part d'un deuxième débutant en C utiliser abusivement les conditions if/else et do/while seraient certes longs à taper mais rendrait l'allure général du programme plus lisible et moins agressif.
Ne surtout pas rester dans la fonction main et diviser le programme sur d'autres pages pour alléger la chose.

Si vous êtes à l'aise avec les pointeurs ça pourrait alléger la longueur, mais au risque de se perdre dans la construction générale.

Quoi qu'il en soit, ce projet va vous demander beaucoup de réflexion sur papier


Malgré la maigreur des conseils j'espère avoir ouvert une voie, bonne chance pour la suite.
Messages postés
4
Date d'inscription
jeudi 24 novembre 2016
Statut
Membre
Dernière intervention
27 novembre 2016
>
Messages postés
491
Date d'inscription
samedi 13 juin 2015
Statut
Membre
Dernière intervention
19 février 2021

Please enter 2 positive numbers (1-99999):1234
5678
         1234    1235    1236    1237    1238    1239    1240    1241    1242
 5678       3       3       3       3       3       3       3       3       3
 5679       3       3       3       3       3       3       3       3       3
 5680       3       3       3       3       3       3       3       3       3
 5681       3       3       3       3       3       3       3       3       3
 5682       3       3       3       3       3       3       3       3       3
 5683       3       3       3       3       3       3       3       3       3
 5684       3       3       3       3       3       3       3       3       3
 5685       3       3       3       3       3       3       3       3       3
 5686       3       3       3       3       3       3       3       3       3
 5687       3       3       3       3       3       3       3       3       3
Enter your choice:</gras>


<gras>
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

void main()
{
	int num3, num4, flag3=1,i=1,j=1;
	while (flag3) {
		flag3 = 0;
		printf("Please enter 2 positive numbers (1-99999)");
		scanf("%d %d", &num3, &num4);
		if (num3 > 99999 || num3 < 1 || num4>9999 || num4 < 1)
		{
			printf("wrong input, try again.\n");
			flag3 = 1;
		}

	}
	for (i = num3; i <= num3 + 8; i++) {
		for (j = num4; j <= num4 + 9; j++)
			printf("%5d\t", );


	}

	
}
Messages postés
491
Date d'inscription
samedi 13 juin 2015
Statut
Membre
Dernière intervention
19 février 2021
84 >
Messages postés
4
Date d'inscription
jeudi 24 novembre 2016
Statut
Membre
Dernière intervention
27 novembre 2016

Je vous laisse entre vous, ce n'est plus d'un niveau de mon ressors.

Au plaisir d'avoir aidé,
bonne fin de journée
Messages postés
5491
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 avril 2021
932
il faudrait que tu fasses ta fonction qui calcule la suite de Fibonacci et qui retourne le nombre de nombres de Fibonacci entre les deux entiers, pour afficher la valeur dans ton tableau.

si tu sais calculer la suite, il n'y a pas vraiment de difficulté, car il suffit de contrôler si le nombre en cours est bien compris dans l'intervalle, pour incrémenter le compteur, et sortir de la fonction quand le nombre en cours dépasse la borne supérieure en retournant la valeur du compteur.

si tu es limité à 1-99999, tu peux sans doutes utiliser des
int
pour stocker tes valeurs, mais, théoriquement, tu devrais vérifier que tu ne dépasses pas la capacité maximale supérieure d'un
int
, car le standard du C définit qu'il peut être au minimum de 32767 (en théorie, par exemple sur mon implémentation de gcc sur Linux Debian i386,
INT_MAX
vaut dans mon cas : 2147483647).

tu dois alors vérifier, avant d'effectuer un calcul, que tu ne vas pas dépasser.

http://www.cplusplus.com/reference/climits/

sinon, la suite augmentant assez rapidement, avec du C standard, tu peux utiliser
unsigned long long int
, qui a des limites bien supérieures (selon le C99, la limite minimale est 18446744073709551615 selon ce standard).


Dal
Messages postés
5491
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 avril 2021
932
@naohag : pour éviter de recalculer toute la suite à chaque fois que tu incrémentes les valeurs, tu pourrais la calculer une première fois de 0, et conserver les deux valeurs consécutives de la suite précédant le premier nombre de ton intervalle, afin de ne recalculer la suite qu'à partir de là les prochaines fois.

cependant, sur des machines récentes, la suite se calcule assez rapidement, surtout avec des limites 1-99999, alors ce travail additionnel n'en vaut peut-être pas la peine.

n'hésite pas à demander si tu ne comprends pas quelque chose, et à poster ton code si tu as un problème.

@lmc-3 : pas de problème, n'hésite pas à intervenir :-)


Dal
Messages postés
4
Date d'inscription
jeudi 24 novembre 2016
Statut
Membre
Dernière intervention
27 novembre 2016

Merci pour votre temps, j'ai finalement reussi l'exercise avec l'aide d'un ami

#include<stdio.h>

void main()
{
	int num3, num4, num31, num41, flag3 = 1, f = 1, k = 0, c = 1, a = 0, b = 1, x;
	while (flag3) {
		flag3 = 0;
		printf("Please enter 2 positive numbers (1-99999)");
		scanf("%d", &num3);
		scanf("%d", &num4);
		num31 = num3;
		num41 = num4;
		if (num3 > 99999 || num3 < 1 || num4>9999 || num4 < 1) {
			printf("wrong input, try again.\n");
			flag3 = 1;
		}
		
		if (num3 >= 1 && num3 <= 99999 && num4 >= 1 && num4 <= 99999) {

			printf("\t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%d \t%d \n\n%d", num3, num3 + 1, num3 + 2, num3 + 3, num3 + 4, num3 + 5, num3 + 6, num3 + 7, num3 + 8, num4);

			while (f) {
				do {
					c = a + b;
					a = b;
					b = c;
					c = a + b;
					while ((a <= num31 || a <= num4) && (a >= num31 || a >= num4)) {
						c = a + b;
						a = b;
						b = c;
						c = a + b;
						k++;
					}
					if (a > num31 && a > num4) {
						printf("\t%d", k);
						k = 0;
						a = 0;
						b = 1;
						num31++;
					
					}
				} while (num31 < num3 + 9);
				if (num4 > num41 + 7) {
					f = 0;
				}

				num4++;
				printf("\n\n%d", num4);

				num31 = num3;
			}
		}
	}
}


Si jamais ca peut aider quelqu'un!