Несоответствие типов при преобразовании средних значений в оценки (для начинающих)
Я сейчас учусь на уроке информатики, и я просто не знаю, как перевести среднее значение из 3 баллов в буквенное. Сначала я подумал, что могу сделать что-то вроде:
PRINT name$(c); TAB(6) ; USING("###.#", average(c))
Как:
PRINT name$(c); TAB(6) ; USING("***something for text here***", average(c))
Но после моих поисков и поисков в интернете я ничего не придумала. Через некоторое время я переписал большую часть своего кода, но он все еще не работает правильно. Может кто-нибудь сказать мне, что я могу сделать, чтобы это работало?
Вот:
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
3 ответа
Три вещи, чтобы отметить здесь.
Во-первых, знак доллара $
используется только в конце имен переменных, которые содержат текстовые значения, а не числовые значения. Так что это a$ = "hello"
а также i = (12+34+56) / 3
и т.п.
Во-вторых, во входной части вы вычисляете среднее значение и сохраняете его в переменной avg$
, Затем в цикле for, где вы хотите распечатать буквенные оценки, вы проверяете то же имя переменной. Тем не менее, вы никогда не устанавливаете avg$
внутри этого цикла for, поэтому он всегда будет содержать только последнее вычисленное значение. А также должно быть без $
потому что это числовое значение.
Наконец, как и уже прокомментировал Шон Механ, вы должны переименовать ваши переменные, чтобы лучше отражать то, для чего они используются. Это, вероятно, прояснит некоторую путаницу. Так что-то вроде dim avgpoint(20)
за 0-100 баллов и avgletter$="A"
и т.д. для оценки букв.
Чтобы объединить эти вещи, я бы изменил ваш код на что-то вроде этого:
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
а потом
for c = 1 to x
p = avgpoint(x)
if (p>89 and p<=101) then let avgletter$ = "A"
'etc.
Вот пример кода для программы отчетов об оценках:
DIM Names(20) AS STRING
DIM Average(20) AS SINGLE
INPUT "Please input Teacher's name"; Teacher$
PRINT "Enter up to 20 names, <enter> to quit:"
DO UNTIL x = 20
PRINT "Input student"; x + 1; "name";
INPUT StudentName$
IF StudentName$ = "" THEN EXIT DO
x = x + 1: Names(x) = StudentName$
INPUT "Input first number"; J
INPUT "Input second number"; K
INPUT "Input third number"; L
Average(x) = (J + K + L) / 3
LOOP
PRINT Teacher$; "'s Class Report"
FOR c = 1 TO x
SELECT CASE Average(c)
CASE 0 TO 59
Grade$ = "F"
CASE 60 TO 69
Grade$ = "D"
CASE 70 TO 79
Grade$ = "C"
CASE 80 TO 89
Grade$ = "B"
CASE ELSE
Grade$ = "A"
END SELECT
PRINT Names(c); SPC(6); Grade$
NEXT
END
Еще один пример кода программы отчетов об оценках с переменным количеством баллов:
DIM Names(20) AS STRING
DIM Average(20) AS SINGLE
INPUT "Please input Teacher's name"; Teacher$
PRINT "Enter up to 20 names, <enter> to quit:"
DO UNTIL x = 20
PRINT "Input student"; x + 1; "name";
INPUT StudentName$
IF StudentName$ = "" THEN EXIT DO
x = x + 1: Names(x) = StudentName$
y = 0 ' number of scores
z = 0 ' total of scores
PRINT "Enter scores, <enter> to quit:"
DO
PRINT "Enter score"; y + 1;
INPUT I$
IF I$ = "" THEN EXIT DO
IF VAL(I$) >= 0 AND VAL(I$) <= 100 THEN
y = y + 1
z = z + VAL(I$)
ELSE
PRINT "Value must be 0 to 100."
END IF
LOOP
IF y > 0 THEN ' avoid division by zero
Average(x) = z / y
END IF
LOOP
PRINT Teacher$; "'s Class Report"
FOR c = 1 TO x
SELECT CASE Average(c)
CASE 0 TO 59
Grade$ = "F"
CASE 60 TO 69
Grade$ = "D"
CASE 70 TO 79
Grade$ = "C"
CASE 80 TO 89
Grade$ = "B"
CASE ELSE
Grade$ = "A"
END SELECT
PRINT Names(c); SPC(6); Grade$
NEXT
END