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 :

Petit programme avec des tableaux


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Par défaut Petit programme avec des tableaux
    Bonjour à tous,

    Je n'ai jamais programmé avec des tableaux, donc je tente de traduire un algo que j'avais en "pseudo-langage". Le but est de remplir 2 tableaux T1 et T2, et de copier ces valeurs dans un tableau T3.
    J'ai fait un code, avec une fonction pour écrire le tableau T3 à la fin. Le logiciel me donne une erreur "ERROR: declare a deferred shape array with a 0 subscript" mais je n'arrive pas la résoudre… je ne pense pas que ce soit grand chose.
    Est-ce que quelqu'un pourrait m'aider pour résoudre ce petit problème ?

    Voici le 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    #include <stdlib.h>
    #include <math.h>
    #include <stdbool.h>
    #include <iostream>
    #include "ecritTableau.cpp"
     
     
    using namespace std;
     
    // variables
    int N1, N2, N3, i, j, k, y, t;
    double T1[N1];
    double T2[N2];
    double T3[N3];
     
    // Début
     
    cout << "Saisir N1 " << endl;
    cin >> N1 ;
    cout << " Saisir N2 " << endl;
    cin >> N2 ;
     
    for (i=0 ; i<=(N1-1) ; i++)
        {
            cout << "Saisir la valeur numéro " << i << " du tableau T1 : " << endl;
            cin >> T1[i] ;
        }
     
    for (j=0 ; j<=(N1-1) ; j++)
        {
            cout << "Saisir la valeur numéro " << j << " du tableau T2 : " << endl;
            cin >> T2[j] ;
        }
     
    for (k=0 ; k<=(N1-1) ; k++)
        {
           T3[k]=T1[i]; 
        }
     
    for (y=0 ; y<=(N2-1) ; y++)
        {
           T3[N1+y]=T2[y]; 
        }
    N3=N1+N2;
     
    ecritTableau(T3[], N3);
    cout << endl;
     
    //Fin
    Et voici la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    /** Fonction qui écrit un tableau */
     
    void ecritTableau (double t[],int n)
    {
        int i;
        cout << "[" ;
        for (i=0 ; i<=n ; ++i)
            cout << t[i] << ", " ;
        cout << "]";
    }
    Merci d'avance !

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 599
    Par défaut
    Bonjour,

    En face de l'erreur, tu dois avoir la ligne où elle s'est produite.
    A l’œil, ligne 13 14 et 15. Un tableau en C++ doit avoir une taille connue exactement au moment de la compilation.

    Pour des tableaux dynamiques en C++, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <vector>
     
    std :: vector<double> T1;
    puis T1.resize( N1 );
    A l'appel de la fonction ecritTableau : il faut faire ecritTableau( T3 , T3.size() )
    Dans la fonction ecritTableau() attention au : i <= n

    Je me répète : En face de l'erreur, tu dois avoir la ligne où elle s'est produite.

  3. #3
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Par défaut
    Bonjour,

    Merci pour ton aide !

    La même erreur se répète aux lignes 11, 12 et 13.
    J'ai tenté de faire comme tu m'as dit, mais #include <vector> engendre déjà une erreur…

    Concernant ma fonction, pourquoi le "i<=n" n'est-il pas bon ? A cause que i je l'utilise également dans une boucle de mon programme ?

  4. #4
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // variables
    int N1, N2, N3, i, j, k, y, t;
    double T1[N1];
    double T2[N2];
    double T3[N3];
    Comment veux-tu que le compilateur sache qelle taille il dait donner au tableaux: N1,2,3 ne sont pas initialisés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cout << "Saisir N1 " << endl;
    cin >> N1 ;
    Tu fais une double utilisation des variables N ? C'est pas interdit mais ça reste chelou.
    J'ai tenté de faire comme tu m'as dit, mais #include <vector> engendre déjà une erreur…
    Ah bon ! Sur quel compilateur bosses-tu? Il ne doit pas supporter le c++ ou l'option n'est pas activée?

  5. #5
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Par défaut
    Ah oui donc il faut que j'entre N1 et N2 avant d'initialiser mon tableau ?

    J'utilise ChIDE, je ne sais pas trop ce que ça vaut, mais on utilise ça en cours…

  6. #6
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Stéphanois57 Voir le message
    Concernant ma fonction, pourquoi le "i<=n" n'est-il pas bon ? A cause que i je l'utilise également dans une boucle de mon programme ?
    Parce qu'en C++, comme dans la majorité des langages, un tableau de taille N va des index 0 à N-1 inclus, donc N exclus.
    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.

  7. #7
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    Ah oui donc il faut que j'entre N1 et N2 avant d'initialiser mon tableau ?
    Oui. Et évite d'utiliser N1 & N2 pour remplir les tableaux ensuite. Tu vas faire des confusions en permanence
    J'utilise ChIDE, je ne sais pas trop ce que ça vaut, mais on utilise ça en cours…
    Même google ne sait pas ce que ça vaut

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par SkyZoThreaD Voir le message
    Même google ne sait pas ce que ça vaut
    https://www.softintegration.com/docs/ch/chide/

    çà ressemble un peu aux IDE des années 90
    d'ailleurs ils ne disent pas que c'est compatible avec C++14...

  9. #9
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    https://www.softintegration.com/supp...general.html#7

    Non seulement il ne semble pas supporter c++14 mais il ne semble pas être du c++ du tout !!
    Le meilleur conseil que je puisse te donner est de ne plus utiliser ce compilateur.
    Dis à ton prof que s'il veut des compilos old-school, il en existe plein.
    Celui-ci t'apprendra des choses fausses

  10. #10
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Franchement utiliser ce genre de trucs quand visual studio est gratuit pour les étudiants, ça me fait mal au coeur
    La première image sur la page d'accueil donne directement envie d'arrêter de programmer.. J'arrive même pas à savoir si c'est encore maintenu ni de quand date la dernière version. De 1990 selon cette interface
    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.

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 599
    Par défaut
    @Stéphanois57
    Le langage n'est pas du C++, c'est un semblant de C donc à éviter car tu risques à terme de confondre les langages.

    Si tu dois continuer avec cet éditeur, tu devrais pouvoir définir des tableaux dynamiques (interdit en C++ et avec d'autres limitations en C), le code devenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // demander N1 et N2
    double T1[N1];
    double T2[N1];
    double T3[N1+N2];
    Ce qui semble plus simple que ma proposition en C++, mais utilise des concepts propres à ce système antédiluvien.

  12. #12
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Par défaut
    Oui donc je vais en prendre un autre si celui-ci n'est pas bien. Seulement, les examens vont arriver, et c'est bien avec ce type de logiciel qu'on sera évalué…
    Quel logiciel avez-vous à me proposer ?

    J'ai donc procédé comme vous me l'aviez dit, en mettant les entrées N1 et N2 (oui j'ai gardé ces notations, je ne les trouve pas embrouillantes…), mais il me donne une erreur du type "WARNING: subscript value 2 greater than upper limit 1 at line 39 in file …" après avoir saisi les 2 tableaux.
    D'où ça peut venir ?

  13. #13
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 599
    Par défaut
    Citation Envoyé par Stéphanois57 Voir le message
    "WARNING: subscript value 2 greater than upper limit 1 at line 39 in file …" après avoir saisi les 2 tableaux.
    D'où ça peut venir ?
    C'est marqué dans le warning! Tu utilises la table à un indice au delà de ses limites, vérifies que tu as dimensionné les 3 tables au bonnes dimensions, et que tu ne tentes pas d'écrire avec un indice négatif ou supérieur ou égal à la taille déclarée.
    Citation Envoyé par Stéphanois57 Voir le message
    Quel logiciel avez vous à me proposer ?
    Si les examens se font sur ce langage, tu dois l'apprendre. Ça n'est certainement pas du C++, et ça ressemble à du C interprété. Ensuite je t'encourage à apprendre soit le C, soit le C++. Le C++ est plus facile pour débuter selon moi.

  14. #14
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Par défaut
    Je n'arrive pas me corriger, j'ai essayé plusieurs possibilités mais elles ne sont jamais bonnes. C'est sans doute quelque chose de grossier, mais ça ne me saute pas aux yeux…

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include <stdlib.h>
    #include <math.h>
    #include <stdbool.h>
    #include <iostream>
    #include "ecritTableau.cpp"
     
    using namespace std;
     
    // variables
    int N1, N2, N3, i, j, k, y, t;
     
    // Début
     
    cout << "Saisir N1 " << endl;
    cin >> N1 ;
    cout << " Saisir N2 " << endl;
    cin >> N2 ;
     
     
    double T1[N1];
    double T2[N2];
    double T3[N1+N2];
     
     
    for (i=0 ; i<=(N1-1) ; i++)
        {
            cout << "Saisir la valeur numéro " << i << " du tableau T1 : " << endl;
            cin >> T1[i] ;
        }
     
    for (j=0 ; j<=(N2-1) ; j++)
        {
            cout << "Saisir la valeur numéro " << j << " du tableau T2 : " << endl;
            cin >> T2[j] ;
        }
     
    for (k=0 ; k<=(N1-1) ; k++)
        {
           T3[k]=T1[i]; 
        }
     
    for (y=0 ; y<=(N2-1) ; y++)
        {
           T3[N1+y]=T2[y]; 
        }
     
     
    ecritTableau(T3[], N3);
    cout << endl;
     
    //Fin

  15. #15
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    - doit-on deviner l'erreur ?
    - #include "ecritTableau.cpp"
    - où est le main ?
    - c'est du Ch, du C interprété pour l'éducation, pas vraiment du C ni du C++
    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.

  16. #16
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 599
    Par défaut
    Tu ne vois pas l'erreur avec son numéro de ligne?

    J'ajoute une précision, combien vaut i ligne 39 ?
    Quelle est la taille du tableau T1 ?

  17. #17
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Par défaut
    Quand on arrive à la ligne 39, i vaut N1-1 non ?
    Et T1 comporte N1 valeurs. Et du coup à la ligne 39, il prend toujours la même valeur de i ?

  18. #18
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    Quand on arrive à la ligne 39, i vaut N1-1 non ?
    Et T1 comporte N1 valeurs. Et du coup à la ligne 39, il prend toujours la même valeur de i ?
    Exactement. Du coup, l'intérêt est questionable...

  19. #19
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Par défaut
    Donc pour arriver là où je le souhaite, il faudrait imbriquer 2 boucles "for" peut-être ?

  20. #20
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 599
    Par défaut
    A toi de coder, ce que tu veux.
    C'est quoi la somme de 2 tableaux? Je sais ajouter des vecteurs, des matrices, mais pas 2 tableaux de tailles différentes.
    Si T3 a les valeurs de T1 dans les indices bas et celles de T2 en fin, il n'y a pas de boucle imbriquée nécessaire.

    Au fait, la valeur de i, c'est N1. On est sorti de la boucle car le test i <= N1 - 1 est passé faux après incrémentation, donc i vaut N1 et pas N1-1, d'où le plantage!

Discussions similaires

  1. Lancer un programme avec des arguments via IE...
    Par petozak dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 24/03/2006, 11h51
  2. Réponses: 8
    Dernier message: 09/03/2006, 17h48
  3. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45
  4. [SRC] Petit programme avec BD
    Par Nico62 dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/01/2005, 20h07
  5. [Classpath][execution] executer un programme avec des jar.
    Par LoLoSS dans le forum Général Java
    Réponses: 11
    Dernier message: 26/08/2004, 11h45

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