Question débutant sur tableaux

Bonjour à tous,
Question de débutant…

Sur le modèle du cours apprendre la prog…
Je bloque sur une chose simple des tableaux au niveau syntaxe.

Je souhaiterais créer un tableau de matière comprenant pour chaque matière un tableau de notes.
Mais je voudrais commencer en demandant la saisie de l’utilisateur. Et là, je bloque.

Mon code :

var tableau:[String:[Double]] = [:]
var matiere:String = ""
var note:Double = 0.0

print("Matiere : ")
matiere = Utilisateur.saisirTexte()
print("Note : ")
note = Utilisateur.saisirReel()

var tableau:[Double] = tableau[matiere] ?? []
tableau.append(note)

Avant de passer à la suite, j’aimerai comprendre comment faire ça en Swift et ça ne fonctionne pas…
Comment ajouter ces valeurs matière et note dans le tableau?
J’ai essayé de plusieurs façons mais rien ne passe.

Merci d’avance pour votre aide et votre compréhension.

Bonjour,

Il n’y a pas tout ton code, du coup je ne vois pas la saisie et pas compris si application console ou graphique.
Pour autant, je ne structurerais pas les données comme tu le fais.
Je commencerais par cela, et y ajouterais ensuite des functions
Par exemple, je ferais ainsi.

struct uneNote: {
var matiere: String
var note: Float
}

Puis un tableau de note

struct releve {
var mesNotes: [uneNote]
}

Ensuite tu peux faire facilement pour enregistrer :

mesNotes.append(tmpSaisie)

sachant que tmpSaisie est une variable de type uneNote dans laquelle tu as mis ta saisie en alimentant
tmpSaisie.matiere et tmpSaisie.note

Voilà, j’espère que cela va te débloquer un peu.

Bonjour,

je ne suis pas un expert, mais déjà, le tableau est déclaré deux fois.
Il y a d’abord la ligne qui va créer un tableau vide

var tableau:[String:[Double]] = [:]

puis il y a

var tableau:[Double] = tableau[matiere] ?? []

ensuite, tableau.append est utilisé pour les tableaux simples.
pour un tableau clés valeurs, je ferais plutôt comme ca:

var tableau: [String: Double] = [:]
var matiere: String = «  »
var note: Double = 0.0
print("Matiere: ")
matiere = Utilisateur.saisirTexte()
print("Note: ")
note = Utilisateur.saisirReel()
tableau[matiere] = note

la ligne tableau[matiere] = note va créer une nouvelle ligne au tableau.

J’espère que cela va aider.

Merci à tous deux pour la réponse…

Je précise que je n’ai pas mis tous le code car c’est en partie du code que Maxime a donné dans son cours.

En faisant ça :

var tableau:[String:[Double]] = [:]
var matiere:String = ""
var note:Double = 0.0
    
print("Matiere : ")
matiere = Utilisateur.saisirTexte()
print("Note : ")
note = Utilisateur.saisirReel()
    
tableau[matiere] = note

j’obtiens :« Cannot assign value of type ‹ Double › to subscript of type ‹ [Double] › »
devant la ligne « tableau[matiere] = note »

Pardon j’ai oublié d’enlever les crochets autour de Double.
var tableau: [String: Double] = [:]

Chez moi, ce bout de code fonctionne.

En fait, c’est un travail pour une base de données, ton truc, d’autant que tu vas vouloir sauvegarder tout ça, trouver pour une matière donnée quelle est la meilleur note, et qui l’a eue, la moyenne de chacun sur chaque matière, la moyenne sur chaque matière de la classe, etc.

Or, comme tu t’y prends, c’est pas de la prog orientée objet. si tu définis l’utilisateur, quelles sont ses propriétés, comment les saisir, puis de la même manière ce qu’est une matière, un objet qui recueille des notes apparemment, puis ce qu’est une note, tu vas y arriver naturellement. Et n’oublie pas que tu ne peux pas donner plusieurs définitions d’une même chose. mais tu as le droit de définir différentes propriétés à un objet : comme sa méthode de saisie. Matière ne peut pas être à la fois une chaîne et une fonction, mais ce peut être un objet qui a une propriété saisie qui peut être une fonction. Et un utilisateur peut être affecté de plusieurs propriétés matière, c’est là que ça devient un tableau, etc.

Bonjour,
Merci Thomas.
Le soucis est que je voulais avoir un tableau de note pour cette matière, d’où la notation.
Je veux pouvoir entrer plusieurs note pour une matière.

Bonjour,
Merci pour la précision.
Je suis tout à fait d’accords avec toi. Mais ce bout de code est juste un exercice pour manipuler les tableaux à plusieurs dimensions. Et, du coup, ça me gêne de ne pas comprendre comment le faire :wink:

Si je comprend bien, tu veux pouvoir stocker des tableaux dans un tableau clés valeurs?
Pour chaque Matières, tu veux stocker toutes les notes dans un tableau?
Si c’est bien cela, je ne sais pas si c’est faisable comme tu veux le faire ou alors ça dépasse mes compétences.
Tu pourrais plutôt créer un tableau par matière.
Personnellement, je le traiterais avec une base de données ou même un simple fichier texte ou Excel.

Bonjour,

Le type de « tableau[matiere] » est « [Double] », c’est un Array de notes (par exemple [12.0, 10.0, 14.5])
Tu essaies de lui donner la valeur d’une note (type « Double »), donc forcément, il refuse.

Tu peux essayer:
tableau[matiere] = [note] // ce qui supprimer toutes les notes précédemment saisies pour cette matière, et les remplace par la nouvelle note

ou bien

tableau[matiere].append(note) // ce qui ajoute la nouvelle note à ton tableau de notes pour cette matière

Cordialement,
Nicolas

Je tiens à préciser que ce n’est pas un Tableau (Array), mais un Dictionnaire (Dictonary), car il y a des clés (key) assignées a des valeurs (value) dans ce que vous faites et non seulement une liste de valeur.