Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RESISTANCE EQUIVALANTE DE RESISTANCES EN SERIE OU PARALLELE


Information sur la source

Catégorie :Application Classé sous : resistance, allocation, memoire Niveau : Débutant Date de création : 26/06/2008 Vu : 3 556

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

Alors voila, c'est mon tout premier code, il permet de choisir le nombre de resistances puis de calculer la resistance equivalante de toutes ce resistances qu'elles soient en serie ou en parallele dites moi ce que vous en pensez
 

Source

  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <math.h> //Permet de recuperer la partie decimale de la resistance equivalante
  • #include <string.h> // permet de convertir une varriable numerique en chaine de caractere
  • void main ()
  • {
  • while (1) // boucle infinie pour que le programme ne se quitte pas tout seul
  • {
  • // on declare les varriables
  • char ctype = 0 ; // Caractere taper par l'utilisateur pour l'appel des fonctions
  • char caff_resultat [20] ; // Chaine contenant le resultat dont les zeros inutiles de la partie decimale ont été tronqués
  • int inbresistor = 0 ; // Nombre de resistances
  • int ilong ; // longueur de la chaine "caff_resultat" pour pouvoir tronquer les zeros superflux
  • double Req = 0 ; // Resistance equivalante
  • double dAd = 0 ; // inverse de la resistance euivalante
  • double dec = 0 ; // parite decimale de la resistance equivalante
  • double ent = 0 ; // partie entiere de la resistance equivalante
  • // on declare les tableau pour allocation dynamique
  • double *resistor ; // tableau contenant les valeur des resistances
  • double *G ; // tableau contenant les inverses des resistances
  • // On boucle pour que l'utilisateur ne puisse appuyer que sur les touches predifinies
  • while ( ctype != '1' ) // on sort de la boucle si l'utilisateur appui sur "1"
  • {
  • if ( ctype == '2' )
  • { break ; } // on sort de la boucle si l'utilisateur appui sur "2"
  • if ( ctype == 'Q' )
  • { exit (-1) ; } // on quitte le programme si l'utilisateur appui sur "Q"
  • system ("cls") ;
  • printf ( "1 : Resistances en serie.\n\n2 : resistances en parallele. \n\nQ : quiter le programme. " );
  • scanf( "%s", &ctype ) ;
  • }
  • if ( ctype == '1' )
  • {
  • system ("cls") ;
  • printf ( "vous avez selectionner des resistances en serie.\n\n" ) ;
  • printf ( "combien de resistances avez vous?\n\n " ) ;
  • scanf ( "%d", &inbresistor ) ;
  • }
  • else if ( ctype == '2' )
  • {
  • system ("cls") ;
  • printf ( "vous avez selectionner des resistances en parallele.\n\n" ) ;
  • printf ( "combien de resistances avez vous?\n\n " ) ;
  • scanf ( "%d", &inbresistor ) ;
  • }
  • if ( inbresistor == 1 ) // avec cette condition on evite les aberances comme demander la resistance equivalante a une seul resistance ;)
  • {
  • system ("cls") ;
  • printf ( "vous avez demander un calcul pour une seule resistance\n\n.....vous etes un idiot...\n\n" ) ;
  • system ("pause") ;
  • exit (-1) ;
  • }
  • //////////////////////////////////////////////////////////////////////
  • // On initialise les tableau en leur alouant de la memoire //
  • // la memoire allouer depend directement de la taille du tableau //
  • // par exemple la valeur d'une resistance est sur un type double //
  • // donc on allou comme memoire la taille d'un double multiplié //
  • // par le nombre de valeur a entrer dans le tableau //
  • //////////////////////////////////////////////////////////////////////
  • resistor = ( double*) malloc (sizeof (double) * inbresistor ) ;
  • G = (double*) malloc (sizeof (double) * inbresistor ) ;
  • // on recupere dans cette boucle la valeur de chaque resistance
  • for ( int i = 1; i <= inbresistor; i++ )
  • {
  • printf ( "veuillez entrer la valeur de la resistance R%d. \n\n", i ) ;
  • scanf ( "%lf", &resistor [i - 1] ) ;
  • if ( resistor [i - 1] <= 0 ) // cette condition permet de se proteger d'une division par zero au moment du calcule la la resistance equivalante
  • {
  • system ("cls") ;
  • printf ( "vous avez choisi une resistance de nulle ou negative\n\n...vous etes un idiot...\n\n" ) ;
  • system ("pause") ;
  • exit (-1) ;
  • }
  • }
  • // On calcule la resistante equivalante pour des resistances en serie
  • if ( ctype == '1' )
  • {
  • for ( int i = 1; i <= inbresistor; i++ )
  • {
  • Req = Req + resistor [i - 1] ; // n'oublier pas le -1 car le tableau à un index 0,
  • // le numero de resistance 1 corespond a l'index 0 du tableau
  • // donc le numero n corespond a l'index "n-1" ;)
  • }
  • }
  • // On calcule la resistante equivalante pour des resistances en parallele
  • else if ( ctype == '2' )
  • {
  • for ( int i = 1; i <= inbresistor; i++ )
  • {
  • G [i - 1] = 1/resistor [i - 1] ;
  • dAd = dAd + G [i - 1] ;
  • }
  • Req = 1/dAd ;
  • }
  • dec = modf ( Req, &ent ) ; // on recupere la partie decimale de la resistance equivalante
  • if ( dec == 0 ) // si elle est nulle alors on affiche que la partie entiere
  • {
  • system ("cls") ;
  • printf ("\n\nLa resistance equivalante est Req = %.0lf .\n\n", Req ); // ex : si Req = 22 on lira 22 et non pas 22.000000 ;)
  • }
  • else
  • {
  • sprintf (caff_resultat, "%lf", Req ) ; // ici on converti la valeur Req en chaine de caractere caff_resultat
  • ilong = strlen (caff_resultat) ; //ilong recupere le nombre de caractere present dans la chaine
  • for (int j = ilong - 1; j > 0; j--) // on tronque les zero inutile de la partie decimale
  • {
  • if ( caff_resultat [j] == '0' )
  • {
  • caff_resultat [j] = '\0';
  • }
  • else
  • {
  • break ;
  • }
  • }
  • system ("cls") ;
  • printf ("\n\nLa resistance equivalante est Req = %s .\n\n", caff_resultat ) ; // donc si la Req = 22.15 en affichan la chaine tronquée on lira 22.15 et non pas 22.150000
  • }
  • // ne pas oublier de liberer la memoire allouée
  • free (resistor) ;
  • free (G) ;
  • system ("pause") ; // petite pause avant le rebouclage au debut du code
  • }
  • }
#include <stdio.h>
#include <stdlib.h>
#include <math.h>    //Permet de recuperer la partie decimale de la resistance equivalante
#include <string.h>  // permet de convertir une varriable numerique en chaine de caractere




void main ()
{

	while (1) // boucle infinie pour que le programme ne se quitte pas tout seul
	{

	// on declare les varriables

	char ctype = 0 ;			// Caractere taper par l'utilisateur pour l'appel des fonctions
	char caff_resultat [20] ;	// Chaine contenant le resultat dont les zeros inutiles de la partie decimale ont été tronqués

	int inbresistor = 0 ;		// Nombre de resistances
	int ilong ;					// longueur de la chaine "caff_resultat" pour pouvoir tronquer les zeros superflux

	double Req = 0 ;			// Resistance equivalante
	double dAd = 0 ;			// inverse de la resistance euivalante
	double dec = 0 ;			// parite decimale de la resistance equivalante
	double ent = 0 ;			// partie entiere de la resistance equivalante

	// on declare les tableau pour allocation dynamique

	double *resistor ; // tableau contenant les valeur des resistances
	double *G ;		   // tableau contenant les inverses des resistances


		// On boucle pour que l'utilisateur ne puisse appuyer que sur les touches predifinies

		while ( ctype != '1' )	// on sort de la boucle si l'utilisateur appui sur "1"
		{	
			if ( ctype == '2' )
			{ break ; }			// on sort de la boucle si l'utilisateur appui sur "2"
			if ( ctype == 'Q' )
			{ exit (-1) ; }		// on quitte le programme si l'utilisateur appui sur "Q"

			system ("cls") ;

			printf ( "1 : Resistances en serie.\n\n2 : resistances en parallele. \n\nQ : quiter le programme. " );

			scanf( "%s", &ctype ) ;
		}
		
		if ( ctype == '1' )

		{
			system ("cls") ;
			printf ( "vous avez selectionner des resistances en serie.\n\n" ) ;
			printf ( "combien de resistances avez vous?\n\n " ) ;

			scanf ( "%d", &inbresistor ) ;
		}

		else if ( ctype == '2' )

		{
			system ("cls") ;
			printf ( "vous avez selectionner des resistances en parallele.\n\n" ) ;
			printf ( "combien de resistances avez vous?\n\n " ) ;

			scanf ( "%d", &inbresistor ) ;
		}

		if ( inbresistor == 1 )	// avec cette condition on evite les aberances comme demander la resistance equivalante a une seul resistance ;)
		{
			system ("cls") ;

			printf ( "vous avez demander un calcul pour une seule resistance\n\n.....vous etes un idiot...\n\n" ) ;
		
			system ("pause") ;

			exit (-1) ;
		}

		//////////////////////////////////////////////////////////////////////
		// On initialise les tableau en leur alouant de la memoire			//
		// la memoire allouer depend directement de la taille du tableau	//
		// par exemple la valeur d'une resistance est sur un type double	//
		// donc on allou comme memoire la taille d'un double multiplié		//
		// par le nombre de valeur a entrer dans le tableau					//
		//////////////////////////////////////////////////////////////////////

		resistor = ( double*) malloc (sizeof (double) * inbresistor ) ; 
		G = (double*) malloc (sizeof (double) * inbresistor ) ;


		// on recupere dans cette boucle la valeur de chaque resistance

		for ( int i = 1; i <= inbresistor; i++ )

		{
			printf ( "veuillez entrer la valeur de la resistance R%d. \n\n", i ) ; 

			scanf ( "%lf", &resistor [i - 1] ) ;

			if ( resistor [i - 1] <= 0 ) // cette condition permet de se proteger d'une division par zero au moment du calcule la la resistance equivalante
			{
				system ("cls") ;

				printf ( "vous avez choisi une resistance de nulle ou negative\n\n...vous etes un idiot...\n\n" ) ;

				system ("pause") ;

				exit (-1) ;
			}
		}

		// On calcule la resistante equivalante pour des resistances en serie

		if ( ctype == '1' )
		{
			for ( int i = 1; i <= inbresistor; i++ )
			{
				Req = Req + resistor [i - 1] ; // n'oublier pas le -1 car le tableau à un index 0,
											   // le numero de resistance 1 corespond a l'index 0 du tableau
											   // donc le numero n corespond a l'index "n-1" ;)
			
			}
		
		}

		// On calcule la resistante equivalante pour des resistances en parallele

		else if ( ctype == '2' )
		{
			for ( int i = 1; i <= inbresistor; i++ )
			{
				G [i - 1] = 1/resistor [i - 1] ;

				dAd = dAd + G [i - 1] ;
			
			}
		
			Req = 1/dAd ;
		}

		dec = modf ( Req, &ent ) ;	// on recupere la partie decimale de la resistance equivalante

		if ( dec == 0 )				// si elle est nulle alors on affiche que la partie entiere
		{
			system ("cls") ;

			printf ("\n\nLa resistance equivalante est Req = %.0lf .\n\n", Req ); // ex : si Req = 22 on lira 22 et non pas 22.000000 ;)
		}
		else
		{

			sprintf (caff_resultat, "%lf", Req ) ; // ici on converti la valeur Req en chaine de caractere caff_resultat

			ilong = strlen (caff_resultat) ; //ilong recupere le nombre de caractere present dans la chaine

			for (int j = ilong - 1; j > 0; j--)	// on tronque les zero inutile de la partie decimale
			{
				if ( caff_resultat [j] == '0' )
				{
					caff_resultat [j] = '\0';
				}

				else
				{
					break ;
				}
			}
			system ("cls") ;

			printf ("\n\nLa resistance equivalante est Req = %s .\n\n", caff_resultat ) ;	// donc si la Req = 22.15 en affichan la chaine tronquée on lira 22.15 et non pas 22.150000
		
		}

		// ne pas oublier de liberer la memoire allouée

		free (resistor) ;
		free (G) ;

		system ("pause") ;	// petite pause avant le rebouclage au debut du code

	}


}

Conclusion

j'attends vos commentaires ou critiques
 

Commentaires et avis

signaler à un administrateur
Commentaire de BruNews le 26/06/2008 14:48:07 administrateur CS

Si tu indexais l'itérateur à 0, tu écrirais simplement:
for(int i = 0; i < inbresistor; i++) resistor[i]....plus besoin de '-1' partout.

signaler à un administrateur
Commentaire de kle500 le 27/06/2008 15:42:14

salut que c'est long mais bon
cela est plus rapide de le faire avec une calculatrice programmable
pour les r//
rx = 1/(1/r1 + 1/r2 + 1/r3 +.....)

jack

signaler à un administrateur
Commentaire de Nicoschmeii le 30/06/2008 09:37:42 6/10

Oui je suis d'accord avec kle500, il devrait y avoir moyen de réduire un peu le code.

Dommage qu'il n'y a pas la possibilité d'associer des résistance en parallèle ET en série, sinon l'intérêt est assez limité.

Ca ne commencerait à devenir intéressant qu'avec un GUI où on associerait les résistance par drag and drop, et là l'avantage du programme apparaîtrait: on a plus besoin de savoir si tel ou tel résistance est en série ou en parallèle, le logiciel le trouve pour nous ^^

C'est clair que c'est beaucoup plus compliqué.

L'application actuelle, je lui met quand même un 6/10, parce que c'est pour niveau Débutant et que les calculs ne sont pas faux.

signaler à un administrateur
Commentaire de verdy_p le 06/07/2008 03:22:40

et pourquoi ne pas plutôt créer un analyseur de formule, dans laquelle on aurait un opérateur supplémentaire pour les résistanes en parallèle? Les résistances en série étant notées avec l'opérateur diadique "+", celles en parallèle notées avec l'opérateur diadique "!" (qui aurait alors une priorité opératoire intermédiaire entre addition/soustraction et multiplication/division).
Exemple: "42 ! 42" = 1/(1/42+1/42) = 21
Du coup on peut faire des formules plus compliquées, où sont notées uniquement les parenthèses nécessaires:
(10 + 10) ! 100 = 20 ! 100 = 2 * 10 ! 100 = (10 + 10) ! 100 = 1 / (1/(10 + 10) + 1/100)
On voit l'intérêt de l'opérateur "parallèle", il simplifie nettement les formules.
Pas besoin d'opérateur spécifique pour la mise en série.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Allocation memoire [ par youga ] Bonjour je fais un programme de filtrage d'images en C sur VisualDSP++. J'ai donc une matrice d'entrée et je dois absolument pouvoir determiner l'add projet allocation efficace de memoire [ par gildaso ] Salut &#224; tous! Alors voila je suis en licence d'informatique et j'ai un projet &#224; rendre&nbsp;&nbsp;pour la mi-mai.Ce projet consiste &#224; i allocation efficace de memoire [ par gildaso ] Salut &#224; tous! Alors voila je suis en licence d'informatique et j'ai un projet &#224; rendre&nbsp;&nbsp;pour la mi-mai.Ce projet consiste &#224; i [ c ] Allocation memoire [ par Titi035 ] Bonjour, Je recherche quel serait le meilleur allocateur m&#233;moire pour mon appli embarqu&#233;e. J'ai 10 Mo de RAM + flash &#224; g&#233;r fonction malloc [ par Trollien ] Salut,j'aurai une question concernant le fonctionnement de l'allocation de memoire en c.Si j'alloue de la memoire avec la fonction malloc(...), est ce allocation de memoire [ par tcok ] salut a tousje voudrais juste savoir quelle est la difference entre LocalAlloc et GlobalAlloc car je dois resever un gros espace en memoire et je me d allocation memoire qui echoue, mais pourquoi?? [ par Seomaz ] Bonjour,je pense que le titre est assez explicite...mais je détaille quand même:lors d'une allocation dynamique (avec l'operateur new), je me retrouve Erreur (0x80000003) - L'exception Point d'arrêt [ par nuxaly ] Bonjour, j'ai un probleme de memoire. j'essaye d'executer mon programme c++ sous visual c++ et un erreur s'affiche le voila : "L'exception Point d probleme d'allocation [ par littledrummer ] bonjour à tous.J'ai un petit souci avec une allocation mémoire lorsque j'execute le code suivant:string nomfichier="";cin&gt;&gt;nomfichier;<fon


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.