begin process at 2012 05 27 16:19:16
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > FIBO, CALCULE DE LA SUITE DE FIBONACCI AVEC SUPORT DES GRAND NOMBRES (+DE 200 000 CHIFFRES) (PORTABLE)

FIBO, CALCULE DE LA SUITE DE FIBONACCI AVEC SUPORT DES GRAND NOMBRES (+DE 200 000 CHIFFRES) (PORTABLE)


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Niveau :Débutant Date de création :26/06/2004 Date de mise à jour :12/01/2005 19:08:16 Vu / téléchargé :6 551 / 121

Auteur : aerith

Ecrire un message privé
Site perso
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
j'ai vu sur ce site quelqu'un qui avais fait sa donc j'ai eu envie de tester.
je trouve l'optimisation pas mal :p
pour le compiler avec gcc utilisiser gcc fibo.c -o fibo... -O3
pour le lancer, c'est en console si vous l'executer sans parametre vous aurez l'aide

tout est dit dans la capture


Source

  • //###################################################################
  • //# #
  • //# fichier : fibo.c version : V1.1 #
  • //# projet : fibo date : 04/07/2004 #
  • //# par : aerith et Thaeron #
  • //# #
  • //# calcule de grand nombre avec la suite de fibonaci #
  • //# #
  • //###################################################################
  • #include <stdio.h>
  • #include <time.h> //clock()
  • #include <stdlib.h> //malloc()
  • long atol(const char *nbr)
  • {
  • unsigned long total = 0;
  • while (*nbr)
  • total = 10 * total + (*nbr++ - '0');
  • return total;
  • }
  • int main(int argc, char* argv[])
  • {
  • FILE *Fichier;
  • unsigned long Iteration, Taille, i = 1, Pos, Somme, Retenue = 0;
  • unsigned long *Nombre1, *Nombre2, *Cur1, *Cur2;
  • char *Data;
  • clock_t Temp = clock();
  • if(argc >= 2)
  • {
  • Iteration = atol(argv[1]);
  • Taille = atol(argv[2]);
  • }
  • else
  • {
  • printf("\nCalcul de la suite de fibonacci avec support des grands nombres\n");
  • printf("Par aerith et Thaeron\tVersion 1.1\n\n");
  • printf("Syntax : fibo <Iteration> <Buffer>\n");
  • printf(" <Iteration>\t : Nombre d'iteration dans la suite\n");
  • printf(" <Buffer>\t : Taille du buffer stockant le nombre\n\n");
  • printf("Cree un fichier fibo.txt\n");
  • return 0;
  • }
  • Nombre1 = malloc(Taille * 8);
  • Nombre2 = malloc(Taille * 8);
  • Fichier = fopen("fibo.txt", "w");
  • for(Pos = 0; Pos < Taille; Nombre1[Pos] = Nombre2[Pos++] = 0);
  • *Nombre2 = 1;
  • // iteration dans la suite
  • do
  • {
  • // addition de grand nombre
  • Pos = 0;
  • Cur1 = Nombre1;
  • Cur2 = Nombre2;
  • do
  • {
  • Pos++;
  • // addition de nombres a 9 chiffre
  • Somme = Retenue + *Cur1 + *Cur2;
  • *Cur1++ = *Cur2;
  • Retenue = 0;
  • if(Somme >= 1000000000) // si resulatat a 10 chiffre
  • {
  • Somme -= 1000000000; // on retire le 10eme et pose la retenue
  • Retenue = 1;
  • }
  • *Cur2 = Somme;
  • }
  • while((Pos < Taille) && *(Cur2++));
  • // procedure de verification de debordement buffer
  • if((Pos == Taille) && Retenue)
  • {
  • printf("Buffer overflow, iteration %i\nExecuter en %i ms \n", i, clock() - Temp);
  • return -1;
  • }
  • }
  • while(++i < Iteration);
  • fprintf(Fichier,"Nombre case : %i\n", Pos);
  • printf( "Nombre case : %i\n", Pos);
  • // sauvegarde le dernier nombre dans un fichier
  • Data = malloc(Pos*10+1)+(Pos*10+1);
  • *Data-- = 0;
  • do
  • {
  • *Data-- = ' ';
  • // conversion de unsigned long en char, ecrit de droite a gauche
  • for(i = 0; i < 9; i++)
  • {
  • *Data-- = (char)((*Nombre2 % 10) + '0');
  • *Nombre2 /= 10;
  • }
  • Nombre2++;
  • }
  • while(--Pos > 0);
  • fprintf(Fichier,"Iteration : %i\n%s\nExecuter en %i ms\n", Iteration, Data, clock() - Temp);
  • printf( "Iteration : %i\n%s\nExecuter en %i ms\n", Iteration, Data, clock() - Temp);
  • free(Data);
  • free(Nombre1);
  • free(Nombre2);
  • fclose(Fichier);
  • return 1;
  • }
//###################################################################
//#																	#
//# fichier	: fibo.c							version : V1.1		#
//# projet	: fibo 								date :	04/07/2004	#
//# par		: aerith et Thaeron										#
//#																	#
//# calcule de grand nombre avec la suite de fibonaci				#
//#																	#
//###################################################################

#include	<stdio.h>
#include	<time.h>		//clock()
#include	<stdlib.h>		//malloc()

long   atol(const char *nbr)
{
    unsigned long    total = 0;
    while (*nbr)
        total = 10 * total + (*nbr++ - '0');
    return total;
}

int main(int argc, char* argv[])
{
	FILE			*Fichier;
	unsigned long	Iteration, Taille, i = 1, Pos, Somme, Retenue = 0;
	unsigned long	*Nombre1, *Nombre2, *Cur1, *Cur2;
	char			*Data;
	clock_t			Temp = clock();

	if(argc >= 2)
	{
		Iteration = atol(argv[1]);
		Taille = atol(argv[2]);
	}
	else
	{
		printf("\nCalcul de la suite de fibonacci avec support des grands nombres\n");
		printf("Par aerith et Thaeron\tVersion 1.1\n\n");
		printf("Syntax : fibo <Iteration> <Buffer>\n");
		printf("  <Iteration>\t : Nombre d'iteration dans la suite\n");
		printf("  <Buffer>\t : Taille du buffer stockant le nombre\n\n");
		printf("Cree un fichier fibo.txt\n");
		return 0;
	}

	Nombre1 = malloc(Taille * 8);
	Nombre2 = malloc(Taille * 8);
	
	Fichier = fopen("fibo.txt", "w");

	for(Pos = 0; Pos < Taille; Nombre1[Pos] = Nombre2[Pos++] = 0);
	*Nombre2 = 1;

	// iteration dans la suite
	do
	{
		// addition de grand nombre
		Pos = 0; 
		Cur1 = Nombre1;
		Cur2 = Nombre2;
		do
		{
 		    Pos++;
			// addition de nombres a 9 chiffre
			Somme = Retenue + *Cur1 + *Cur2;
			*Cur1++ = *Cur2;
			Retenue = 0;
			if(Somme >= 1000000000)		// si resulatat a 10 chiffre
			{
				Somme -= 1000000000;	// on retire le 10eme et pose la retenue
				Retenue = 1;
			}
			*Cur2 = Somme;
		}
		while((Pos < Taille) && *(Cur2++));

		// procedure de verification de debordement buffer
		if((Pos == Taille) && Retenue)
		{
			printf("Buffer overflow, iteration %i\nExecuter en %i ms \n", i, clock() - Temp);
			return -1;
		}
	}
	while(++i < Iteration);

	fprintf(Fichier,"Nombre case : %i\n", Pos);
  	printf(			"Nombre case : %i\n", Pos);

	// sauvegarde le dernier nombre dans un fichier
	Data = malloc(Pos*10+1)+(Pos*10+1);
	*Data-- = 0;
  	do
	{
		*Data-- = ' ';
  		// conversion de unsigned long en char, ecrit de droite a gauche
		for(i = 0; i < 9; i++)
		{
			*Data-- = (char)((*Nombre2 % 10) + '0');
			*Nombre2 /= 10;
		}
		Nombre2++;
	}
	while(--Pos > 0);
	
	fprintf(Fichier,"Iteration : %i\n%s\nExecuter en %i ms\n", Iteration, Data, clock() - Temp);
  	printf(			"Iteration : %i\n%s\nExecuter en %i ms\n", Iteration, Data, clock() - Temp);

  	free(Data);
  	free(Nombre1);
  	free(Nombre2);
  	fclose(Fichier);
	return 1;
}

 Conclusion

Thaeron ma orienter vers les pointeur pour l'additionneur =)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • fibo.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 949 octets
  • fibo.exeTélécharger ce fichier [Réservé aux membres club]25 643 octets

Télécharger le zip


 Historique

13 juillet 2004 23:36:27 :
maintenant vous avez reelement l'iteration demander plus rapide reste quelque bug sur la taille du buffer, meter plus grand si marche pas reste un bug d'affichage lors de la conversion
12 janvier 2005 19:08:17 :
.

 Sources du même auteur

Source avec Zip Source avec une capture PROPA [SDL]
Source avec Zip Source avec une capture TEXT SDL
Source avec Zip Source avec une capture SERVEUR METEO, IHM EVOLUEE (VC6, CONSOLE WINDOWS, SOCK, THRE...
SUITE LOGIQUE (PORTABLE)
Source avec Zip Source avec une capture GESTION ACCESS, PROJET FORMATION, CONSOLE WINDOWS

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

Commentaires et avis

Commentaire de LordBob le 26/06/2004 13:04:20

en fait c'est quoi la suite de fibonacie?

Commentaire de MoDDiB le 26/06/2004 13:10:47

Les nombres premiers de 2 à 1000 je crois

Commentaire de vecchio56 le 26/06/2004 14:28:23 administrateur CS

vous plaisantez j'espère???
u(n+2) = u(n) + u(n+1)

Commentaire de Urgo le 26/06/2004 16:16:38

lol

Apprenez à écrire "fibonacci" aussi

Commentaire de BruNews le 26/06/2004 19:05:54 administrateur CS

Salut,

fais donc un upgrade de ta source avec FIBONACCI ecrit comme il se doit. Dans l'etat actuel, elle ne sortira jamais si qlqun fait une recherche sur ce theme.

BruNews, Admin CS, MVP Visual C++

Commentaire de Hylvenir le 26/06/2004 21:21:15

Salut,
tu as un exemple de ton programme pour des valeurs triviales ?
Je n'arrive pas à trouver fibonacci dans totut ce qui est affiché ou dans le fichier.

ex: fibo 5 10

Iteration : 5

Executer en 0 ms
Nombre case : 1, Taille nombre : 9

Commentaire de Hylvenir le 27/06/2004 02:05:01

J'ai l'impression qu'il y a un pb avec ton source mais je n'arrive pas à trouver quoi...

as-tu valider tes résultats pour 499 (500 pour toi) par exemple ?

http://sources.wikipedia.org/wiki/Fibonacci_Numbers

Mon programme ne calcule pas la même chose pour 99999 (100000 pour toi) alors je trouve le bon résultat pour 499 (500 pour toi)
Si tu es intéressé je peux toujours te la passer pour comparer.

Commentaire de aerith le 03/07/2004 18:51:42

a ouai, y a donc un bug, je taff la dessus

Commentaire de CrazyNowan le 14/06/2010 04:43:40

En considérent la suite comme une ELRH, on résout le n-ième terme à l'aide de cette formule :
http://upload.wikimedia.org/math/3/d/0/3d0e62d6f0eb21015186116cf3fe0b24.png

Evidemment, on risque une légère erreur de précision due aux calculs en virgule flottante...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales