IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

double complex


Sujet :

C

  1. #1
    Nouveau membre du Club Avatar de Youyayouyou
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Points : 26
    Points
    26
    Par défaut double complex
    Bonsoir,

    Je suis en train de manipuler les nombres complexes en C; j'ai donc importé la librairie <complex.h> pour utiliser "double complex". Voici un petit exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double complex z = 2.0 + 1.0*I;
    et là la variable z est souligné en rouge et il m'affiche :
    ';' attendu
    Pourquoi et comment faire pour résoudre le problème?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonsoir
    Citation Envoyé par Youyayouyou Voir le message
    et là la variable z est souligné en rouge et il m'affiche : ';' attendu.

    Pourquoi et comment faire pour résoudre le problème?
    Il faudrait le code complet pour être sûr mais à mon avis, il y a une erreur sur la ligne d'avant. C'est un comportement habituel du compilateur quand il part dans les choux. Si la ligne "n" est mal écrite ou incomplète, il continue à tenter l'évaluation sur la ligne "n+1". Et une fois qu'il est bien planté sans remède possible, il indique alors la ligne sur laquelle il se trouve, soit la "n+1" (voire la n+2 ou n+3 ou n+4 s'il a réussi à aller jusque là).

    Ou alors (autre hypothèse), la librairie complex n'accepte pas la déclaration avec initialisation. Autrement dit, interdit d'écrire ça en une fois. Donc remplacer double complex z = 2.0 + 1.0*I; par double complex z; z = 2.0 + 1.0*I;.
    J'aimerais d'ailleurs bien savoir d'où elle vient cette librairie (histoire de voir sa doc). Parce que cette syntaxe 2.0 + 1.0*I; me semble étrange. Ben oui, comment le compilateur fait-il la différence avec int I=123; float z; z = 2.0 + 1.0*I; ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Nouveau membre du Club Avatar de Youyayouyou
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Voici une partie de mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // Déclaration de la fonction:
    double iter (double complex c);
     
     
    // Définition de la fonction: 
    double iter (double complex c) {
     
    	double complex z0 = 0.0 + 0.0*I;
    	double complex S[MAX];
    	S[0] = z0;
     
    	for (int i = 0; i < 200; i++) {
    		S[i+1] = S[i]*S[i] + c;
    }
    .
    .
    .
    }
    Vous avez raison je crois : dès que j'ai commenté la déclaration de la fonction et sa définition, le soulignage a disparu! Mais je ne sais pas du coup comment faire?

    Je suis très débutante en C et cette librairie c'est notre enseignant qui nous l'a écrite dans les consignes de son exercice. J'en ai aucune idée je suis désolée

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    L'erreur semble être juste avant le code que tu indiques, il faudrait toutes les lignes jusqu'à celle de l'erreur. Ça semble dû à une accolade fermante qui manquerait.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Programmeur des cavernes
    Inscrit en
    Août 2017
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Programmeur des cavernes
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 364
    Points : 1 240
    Points
    1 240
    Par défaut
    Je pense que voir le contenu du fichier complex.h ne serait pas inutile non plus. C n'est pas C++, et en C une ligne comme :

    me semble pour le moins curieuse.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Youyayouyou Voir le message
    cette librairie c'est notre enseignant qui nous l'a écrite dans les consignes de son exercice. J'en ai aucune idée je suis désolée
    Il vous l'a "écrite" (sous-entendu "codée") ?
    Ou bien plus probablement il vous l'a donnée (sous-entendu pécho quelque part sur le web dans la foultitude des codes offerts) ?
    Si c'est le second cas (qui me semble pour moi le plus probable), again j'aimerais bien savoir d'où elle vient. Remarque si c'est votre prof qui l'a codée, j'aimerais quand-même avoir son source histoire de comprendre comment on s'en sert. Il n'y a que comme ça qu'on pourra t'aider.

    Et attention aux indentations dans tes codes, il faut indenter correctement sinon ça nuit à sa lisibilité.

    Citation Envoyé par Jamatronic Voir le message
    Je pense que voir le contenu du fichier complex.h ne serait pas inutile non plus. C n'est pas C++, et en C une ligne comme :

    me semble pour le moins curieuse.
    Hé oui, moi aussi. Comme je l'ai dit, même si "z" est un objet (ou une structure qui est l'ersatz C de ce qui peut être un objet en POO), je ne vois pas comment le compilateur comprend qu'il s'agit d'un découpage en "réel + img" et non une simple opération mathématique standard.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Nouveau membre du Club Avatar de Youyayouyou
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Il vous l'a "écrite" (sous-entendu "codée") ? .
    Par "écrite" je veux dire écrite dans les consignes du TD donné (pas dans un code); voilà ce que le prof nous a écrit exactement:
    "On rappelle que les variables complexes sont définies dans le fichier d’en-tête de système complex.h. On note aussi que le type correspondant aux valeurs complexes en précision double est double complex et que l’unité imaginaire est représentée par le symbole I"

    Et attention aux indentations dans tes codes, il faut indenter correctement sinon ça nuit à sa lisibilité.
    Merci pour votre conseil!

    Merci quand même pour vos réponses et votre aide!

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Youyayouyou Voir le message
    "On rappelle que les variables complexes sont définies dans le fichier d’en-tête de système complex.h. On note aussi que le type correspondant aux valeurs complexes en précision double est double complex et que l’unité imaginaire est représentée par le symbole I"
    Ok. Et cette écriture z=0.0 + 0.0*I elle a été donnée par le prof aussi ?
    Tu voudrais pas nous le montrer ce "complex.h" qu'on puisse le tester de notre côté ???

    Vérifie aussi les lignes avant ta fonction. Comme le dit dalfab, il se peut qu'il y ait une accolade ou parenthèse fermante non présente. Pour vérifier, il te suffit d'écrire int toto; juste au dessus de // Déclaration de la fonction. Si le compilo plante à cet endroit (alors que cette instruction de définition de variable globale est manifestement correcte), ça veut dire que c'est ça.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Tu as oublié le #include <complex.h> en début de fichier


    Citation Envoyé par Sve@r Voir le message
    Il vous l'a "écrite" (sous-entendu "codée") ?
    Il ne l'a pas écrite puisque c'est dans la norme C99 (avec 1 extension C89)

    Complex floating types et Imaginary floating types (<- liens cppreference.com en anglais)

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par foetus Voir le message
    Tu as oublié le #include <complex.h> en début de fichier
    Non, dans son premier post elle dit qu'elle l'a mis. Là c'est juste une partie du code.

    Citation Envoyé par foetus Voir le message
    Il ne l'a pas écrite puisque c'est dans la norme C99 (avec 1 extension C89)

    Complex floating types et Imaginary floating types (<- liens cppreference.com en anglais)
    Zut, lui je connaissais pas. C'est ça quand on ne développe plus en C

    Ok, donc ce code compile sans souci.
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdio.h>
    #include <complex.h>
     
    // Déclaration de la fonction:
    double iter (double complex c);
     
    // Définition de la fonction: 
    #define MAX 10
    double iter (double complex c) {
     
    	double complex z0 = 0.0 + 0.0*I;
    	double complex S[MAX];
    	S[0] = z0;
     
    	for (int i = 1; i < MAX; i++) {
    		S[i] = S[i-1]*S[i-1] + c;
    	}
    }
     
    int main() {
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Nouveau membre du Club Avatar de Youyayouyou
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ok. Et cette écriture z=0.0 + 0.0*I elle a été donnée par le prof aussi ?
    Non ça je l'ai trouvée sur internet


    Citation Envoyé par Sve@r Voir le message
    Tu voudrais pas nous le montrer ce "complex.h" qu'on puisse le tester de notre côté ???
    Je ne sais pas comment faire?

    Citation Envoyé par Sve@r Voir le message
    Vérifie aussi les lignes avant ta fonction. Comme le dit dalfab, il se peut qu'il y ait une accolade ou parenthèse fermante non présente.
    Ok voici tout mon code du coup:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    // Importation des librairies
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<complex.h>
    #define MAX 200 
     
    // Question 01:
     
    // Déclaration de la fonction:
    double iter(double complex c);
     
     
    // Définition de la fonction: 
    double iter (double complex c) {
     
    	double complex z0 = 0.0 + 0.0*I;
    	double complex S[MAX];
    	S[0] = z0;
     
    	for (int i = 0; i < 200; i++) {
    		S[i+1] = S[i]*S[i] + c;
     
    		if (cabs(S[i]) > 2)
    			return i;
    		else
    			return 201;
    	}
     
    }
     
     
    // Appel de la fonction:
    int main() {
     
    	printf(iter(1.0 + 0.0*I)); //exemple
            return 0;
     
    }

  12. #12
    Nouveau membre du Club Avatar de Youyayouyou
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Non, dans son premier post elle dit qu'elle l'a mis. Là c'est juste une partie du code.
    Oui je l'ai bien mise

    Citation Envoyé par Sve@r Voir le message
    Ok, donc ce code compile sans souci.
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdio.h>
    #include <complex.h>
     
    // Déclaration de la fonction:
    double iter (double complex c);
     
    // Définition de la fonction: 
    #define MAX 10
    double iter (double complex c) {
     
    	double complex z0 = 0.0 + 0.0*I;
    	double complex S[MAX];
    	S[0] = z0;
     
    	for (int i = 1; i < MAX; i++) {
    		S[i] = S[i-1]*S[i-1] + c;
    	}
    }
     
    int main() {
    }
    J'ai toujours le soulignage

  13. #13
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Indépendamment du soulignement, Il faut surtout voir ce qu'indique le compilateur au moment de la compilation. Chez nous il n'y a pas d'erreur.

  14. #14
    Nouveau membre du Club Avatar de Youyayouyou
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Voilà ce qu'il m'affiche:

    Nom : pb mandel.JPG
Affichages : 557
Taille : 21,3 Ko

    Quand je fais non il m'affiche ça:

    Nom : pb 1.JPG
Affichages : 550
Taille : 43,5 Ko
    Nom : pb2.JPG
Affichages : 542
Taille : 32,3 Ko

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Youyayouyou Voir le message
    Ok voici tout mon code du coup:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    // Importation des librairies
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<complex.h>
    #define MAX 200 
     
    // Question 01:
     
    // Déclaration de la fonction:
    double iter(double complex c);
     
     
    // Définition de la fonction: 
    double iter (double complex c) {
     
    	double complex z0 = 0.0 + 0.0*I;
    	double complex S[MAX];
    	S[0] = z0;
     
    	for (int i = 0; i < 200; i++) {
    		S[i+1] = S[i]*S[i] + c;
     
    		if (cabs(S[i]) > 2)
    			return i;
    		else
    			return 201;
    	}
     
    }
     
    // Appel de la fonction:
    int main() {
     
    	printf(iter(1.0 + 0.0*I)); //exemple
            return 0;
    }
    Plusieurs erreurs
    1. tu utilises MAX pour définir ton tableau mais tu boucles jusqu'à 200. Et si MAX vaut 10 (comme dans mon exemple) ?
    2. tu boucles de 0 à 199 (je présume que MAX vaut 200) et tu tapes sur S[i+1] => quand i vaudra 199, tu taperas sur S[200] ce qui est hors tableau (les indices d'un tableau de n vont de 0 à n-1). Regarde comment moi j'ai écrit cette boucle...
    3. quoi qu'il arrive, tu retournes une valeur à la première itération => on peut alors se demander à quoi sert la boucle
    4. printf() veut une chaine en premier paramètre => printf("%f\n", iter(1.0 + 0.0*I))


    Indépendamment de ces soucis, et mis à part cabs() qui n'est pas connu chez moi, ton code compile. Je sens que le souci pourrait venir de Visual Studio qui pourrait ne pas connaitre "complex". Ou alors qui aurait été paramétré pour compiler du C++ tandis que tu lui donnes du C (bien que très ressemblants, et que l'un ait été créé sur la base de l'autre, ces deux langages ne sont pas les mêmes et un code C ne compilera pas forcément en C++).

    On pourrait te conseiller de changer de compilateur. Tu peux en trouver de très bons et gratuits comme MinGW. Ou mieux, avant d'installer n'importe quoi sur ta machine, tenter un compilateur online. Par exemple sur celui-ci j'ai copié ton code qui a compilé...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Nouveau membre du Club Avatar de Youyayouyou
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Plusieurs erreurs
    1. tu utilises MAX pour définir ton tableau mais tu boucles jusqu'à 200. Et si MAX vaut 10 (comme dans mon exemple) ?
    2. tu boucles de 0 à 199 (je présume que MAX vaut 200) et tu tapes sur S[i+1] => quand i vaudra 199, tu taperas sur S[200] ce qui est hors tableau (les indices d'un tableau de n vont de 0 à n-1). Regarde comment moi j'ai écrit cette boucle...
    3. quoi qu'il arrive, tu retournes une valeur à la première itération => on peut alors se demander à quoi sert la boucle
    4. printf() veut une chaine en premier paramètre => printf("%f\n", iter(1.0 + 0.0*I))
    Merci pour vos remarques: je n'ai pas fait attention à tous ces détails, je me suis surtout concentrée sur le soulignement.

    cabs est normalement utilisée pour calculer le module d’une variable complexe, elle est définie dans la librairie complex.h.

    Citation Envoyé par Sve@r Voir le message
    Je sens que le souci pourrait venir de Visual Studio qui pourrait ne pas connaitre "complex". Ou alors qui aurait été paramétré pour compiler du C++ tandis que tu lui donnes du C (bien que très ressemblants, et que l'un ait été créé sur la base de l'autre, ces deux langages ne sont pas les mêmes et un code C ne compilera pas forcément en C++).

    On pourrait te conseiller de changer de compilateur. Tu peux en trouver de très bons et gratuits comme MinGW. Ou mieux, avant d'installer n'importe quoi sur ta machine, tenter un compilateur online. Par exemple sur celui-ci j'ai copié ton code qui a compilé...
    C'est noté!! Je comprends très bien

    Vraiment je vous remercie tous infiniment c'est gentil de votre part merci pour votre aide et pour le temps que vous m'avez consacré!!

  17. #17
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Youyayouyou Voir le message
    cabs est normalement utilisée pour calculer le module d’une variable complexe, elle est définie dans la librairie complex.h.
    Moui je m'en doutais que ça avait un lien avec un calcul de complexe. Mais bizarrement mon compilo ne la connait pas.

    Bon, j'ai compilé ton code (enfin un peu corrigé) sur le compilo online de https://repl.it/languages/c et ça a fonctionné et donné un résultat

    Le code en question
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    // Importation des librairies
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <complex.h>
    #define MAX					(200)
     
    // Question 01:
     
    // Déclaration de la fonction:
    int iter(double complex);
     
    // Définition de la fonction: 
    int iter (double complex c) {
     
    	double complex z0 = 0.0 + 0.0*I;
    	double complex S[MAX];
    	S[0] = z0;
     
    	for (int i = 1; i < MAX; i++) {
    		S[i] = S[i-1]*S[i-1] + c;
     
    		if (cabs(S[i]) > 2)
    			return i;
    	}
    	return 0;	// Ou bien return MAX, au choix
     
    }
     
    // Appel de la fonction:
    int main() {
     
    	printf("%d\n", iter(1.0 + 0.0*I)); //exemple
    	return 0;
     
    }

    Alors ce qui change:
    • pas besoin de nommer les paramètres dans les déclarations de fonctions
    • MAX puisqu'il existe je m'en sers
    • la boucle de recherche ne travaille plus sur i+1 par rapport à i mais sur i par rapport à i-1 et pour ça commence à 1 (faudra peut-être ajuster cabs(S[i]) à ce propos ainsi que le return i).
    • la fonction de recherche ne renvoie la valeur "echec" (pour moi c'est 0 plus parlant que 201) que si elle n'a rien trouvé
    • la fonction recherche, renvoyant quoi qu'il arrive un int, n'a pas besoin d'être double
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Je n'ai jamais utilisé ce truc et je comprends pas comment ça peut fonctionner en C.
    Dans mon header complex.h, sur VS2019, il apparaît clairement des structures avec 2 membres.
    I est également défini comme une instance de cette structure avec pour membres 0 et 1.
    Donc cette ligne double complex z0 = 0.0 + 0.0*I; veut multiplier 0 à une structure, puis ajouter 0 au résultat.
    Mais vu qu'il n'y a pas de surcharge d'opérateur en C...
    Je lis qu'il s'agit d'un type specifier. double complex va s'étendre en double _Complex ou équivalent, et ça doit déclencher un peu de magie avec.
    Donc ce doit être un truc spécifique, je lis C99, et VS fait avant tout du C++ et supporte uniquement ce qui l'intéresse/est nécessaire du C.
    Il semble avoir un support potable du C89, très peu du C99.
    À supposer que tu utilises bien VS, les erreurs décrites match ce que je constate, mais tu ne l'indiques jamais...

    Voilà comment j'ai du modifier le programme pour le compiler avec vs2019
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    // Importation des librairies
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<complex.h>
    #define MAX 200 
     
    // Question 01:
     
    // Déclaration de la fonction:
    double iter(_Dcomplex c);
     
     
    // Définition de la fonction: 
    double iter(_Dcomplex c) {
     
    	_Dcomplex z0 = _DCOMPLEX_(0.0, 0.0);
    	_Dcomplex S[MAX];
    	S[0] = z0;
     
    	for (int i = 0; i < 200; i++)
    	{
    		S[i + 1] = _Cmulcc(S[i], S[i]);
    		S[i + 1]._Val[0] += creal(c);
    		S[i + 1]._Val[1] += cimag(c);
     
    		if (cabs(S[i]) > 2)
    			return i;
    		else
    			return 201;
    	}
     
    }
     
    // Appel de la fonction:
    int main() {
     
    	printf("%lf", iter(_DCOMPLEX_(1.0, 0.0))); //exemple
    	return 0;
    }
    Le programme compile, mais il est toujours incorrect.

    Enfin vu que c'est un cours, tu devrais commencer par aller parler avec ton professeur, qui pourrait te dire quels outils utiliser, ou du moins ceux que lui utilise et fonctionnent.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  19. #19
    Nouveau membre du Club Avatar de Youyayouyou
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bon, j'ai compilé ton code (enfin un peu corrigé) sur le compilo online de https://repl.it/languages/c et ça a fonctionné et donné un résultat
    Merci beaucoup pour votre aide!

  20. #20
    Nouveau membre du Club Avatar de Youyayouyou
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Enfin vu que c'est un cours, tu devrais commencer par aller parler avec ton professeur, qui pourrait te dire quels outils utiliser, ou du moins ceux que lui utilise et fonctionnent.
    J'essayerai de contacter le prof évidemment. Mais puisque ce sont des exercices, je dois les faire sans aide pour le moment (on n'a pas eu de cours sur ça non plus donc je dois me débrouiller ...)

    Citation Envoyé par Bousk Voir le message
    Voilà comment j'ai du modifier le programme pour le compiler avec vs2019
    Merci beaucoup pour vos efforts!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Double binding sur objet complex
    Par babass77 dans le forum Flex
    Réponses: 5
    Dernier message: 29/04/2011, 10h08
  2. Réponses: 2
    Dernier message: 30/12/2010, 17h02
  3. Réponses: 0
    Dernier message: 17/08/2010, 17h23
  4. Optimisation multiplication complexe : problème de retour de valeur en double
    Par Antonin08 dans le forum x86 32-bits / 64-bits
    Réponses: 8
    Dernier message: 06/06/2008, 08h52
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo