2015-10-14 1 views
1

Actuellement, je suis en cours de sciences informatiques et je ne sais pas comment convertir une note moyenne composée de 3 notes en une note en lettres. Au début, je pensais que je pouvais faire quelque chose comme:Incompatibilité de type lors de la conversion des moyennes en notes (débutant)

PRINT name$(c); TAB(6) ; USING("###.#", average(c)) 

Comme:

PRINT name$(c); TAB(6) ; USING("***something for text here***", average(c)) 

Mais après mes recherches et récurer sur internet, je suis venu avec rien. Après un certain temps, j'ai réécrit la majorité de mon code, mais cela ne fonctionne toujours pas correctement. Quelqu'un peut-il me dire ce que je peux faire pour le faire fonctionner?

Ici, il est:

dim names(20) 
dim average$(20) 
x = 0 
input "Please input Teacher's name:"; teacher$ 
rem teacher$ 
cls 
input "Input student's name:"; studentname$ 
do while studentname$ <> "" 
name$(x)=studentname$ 
rem name$(x) 
input "Input first number:"; e 
input "Input second number:"; f 
input "Input third number:"; g 
avg$=(e+f+g)/3 
average(x)= avg 
x=x+1 
cls 
input "Input the next name or press enter to finish:"; studentname$ 
loop 
print teacher$; "'s Class Report" 
for c = 1 to X 
if (avg$>89 and avg$<101) then let avg= "A" else if 
if (avg$>79 and avg$<89) then let avg= "B" else if 
if (avg$>69 and avg$<79) then let avg= "C" else if 
if (avg$>59 and avg$<69) then let avg= "D" else if 
if (avg$<59) then let avg= "F"; print names(c), TAB(6) average$(c) 
next c 
end 
+0

Vous calculez la lettre basée sur la moyenne 'avg' puis sortie' $ c) '. Faites le contraire. – GSerg

+1

Et il est facile de se confondre, donc c'est une bonne pratique de rendre vos noms de variables distincts. Vous pourriez avoir mélangé entre 'avg' et' average'. Vous pourriez le refactoriser pour être class_averages peut-être, pour le rendre plus facile à retenir. –

Répondre

0

Trois chose à noter ici. Tout d'abord, le signe dollar $ est uniquement utilisé à la fin des noms de variables contenant des valeurs de texte et non des valeurs numériques. Il est donc a$ = "hello" et i = (12+34+56)/3

Ensuite, dans la partie en entrée, vous calculez la valeur moyenne et la stockez dans la variable avg$. Ensuite, dans la boucle for-up où vous voulez imprimer les notes, vous vérifiez le même nom de variable. Cependant, vous ne définissez jamais avg$ dans cette boucle for, de sorte qu'il contiendra toujours la dernière valeur calculée. Et aussi il devrait être sans $ parce que c'est une valeur numérique. Enfin, comme Shawn Mehan l'a déjà commenté, vous devriez renommer vos variables pour mieux refléter leur utilisation. Cela éclaircira probablement une partie de la confusion. Donc, quelque chose comme dim avgpoint(20) pour les scores 0-100, et avgletter$="A" etc. pour les lettres de qualité.

donc de combiner ces choses, je voudrais changer votre code à quelque chose comme ceci:

input "Input first grade number (0-100):"; grade1 
input "Input second grade number (0-100):"; grade2 
input "Input third grade number (0-100):"; grade3 
calcavg = (grade1+grade2+grade3)/3 
avgpoint(x) = calcavg 

puis

for c = 1 to x 
    p = avgpoint(x) 
    if (p>89 and p<=101) then let avgletter$ = "A" 
    'etc.