Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
passing data
#1
i am having trouble passing data read in to a 3d aray to a sub, it will not pass any info, i first did the program with a 2d array and no subs, and it works and i got an A on it. But the passing data is bugging me. here is the sub,
the data is in the main and is read in to the array in the main.


Sub BILL(teacher$, student$, SCORES, GRADE$, NAME$)
Dim teacher$(3), students$(3, 5), SCORES(3, 5, 3) ' students$ 1 dim and scores 2 dim
For Page = 1 To 1
Next
For ROW = 1 To 5 'READ ROW 1-5
Sum = 0 ' Initalizes sum
For COL = 1 To 3 'READ COL 1-3 GRADES
Sum = Sum + SCORES(Page, ROW, COL) 'ADD GRADES
Next COL ' Bottom of col
average = Sum / 3 'CALC AVG GRADE
If average >= 90 Then ' IF statement 'CONV % TO LETTER GRADE
GRADE$ = "A"
ElseIf average >= 80 Then GRADE$ = "B"
ElseIf average >= 70 Then GRADE$ = "C"
ElseIf average >= 60 Then GRADE$ = "D"
ElseIf average < 60 Then GRADE$ = "F"
End If ' The end of IF
Print students$(Page, ROW); Tab(20); ' Moves cursor w/;
Print USING; "##%"; average;
Print Tab(40); GRADE$
Sum = 0 ' Initalizes sum
Next ROW ' Bottom of Row
' *********************** CLASS AVERAGE FOR TEST 1 ***************
For Page = 1 To 1
Next
For ROW = 1 To 5 ' READ ROW 1-5
For COL = 1 To 1 'READ COL 1 GRADES
Sum = Sum + SCORES(Page, ROW, 1) 'ADD COL 1 GRADES
Next COL ' Bottom of col
Next ROW
aveGrade = Sum / 5 'CALC AVG GRADE
Format$ = "\ \ ##.##%"
Print
Print USING; Format$; "Test 1 class average is"; aveGrade
' ********************** CLASS AVERAGE FOR TEST 2 **************
For Page = 1 To 1
Next
Sum = 0 ' Initalizes sum
For ROW = 1 To 5 'READ ROW 1-5

For COL = 2 To 2 'READ COL 2 GRADES
Sum = Sum + SCORES(Page, ROW, 2) 'ADD COL 2 GRADES
Next COL ' Bottom of col
Next ROW
aveGrade = Sum / 5 ' CALC AVG GRADE
Print USING; Format$; "Test 2 class average is"; aveGrade
' ********************** CLASS AVERAGE FOR TEST 3 ***************
For Page = 1 To 1
Next
Sum = 0 ' Initalizes sum
For ROW = 1 To 5 'READ ROW 1-5

For COL = 3 To 3 'READ COL 3 GRADES
Sum = Sum + SCORES(Page, ROW, 3) 'ADD COL 3 GRADES
Next COL ' Bottom of col
Next ROW
aveGrade = Sum / 5 ' CALC AVG GRADE
Print USING; Format$; "Test 3 class average is"; aveGrade


End Sub
Reply
#2
In sub/function declaration you must set arrays too!

Declare Sub BILL(teacher$, student$, SCORES, GRADE$, NAME$)
Dim teacher$(3), students$(3, 5), SCORES(3, 5, 3)

should be smth like:
Declare Sub BILL(teacher$(), student$(), SCORES(), GRADE$, NAME$)

and when passing data then you call it like:
BILL Teacher$(), Student$(), Scoores(), Grade$, Name$


Though if you'd have posted whole source I'd be able to help you better, couse I'm not sure I understand what exactly are you trying to do.
[/code]
url]http://fbide.sourceforge.net/[/url]
Reply
#3
here is part of the main

DECLARE SUB SHARON (teacher$, student$, SCORES!, GRADE$, NAME$)
DECLARE SUB BILL (teacher$, student$, SCORES!, GRADE$, NAME$)
DECLARE SUB MAGGIE (teacher$, student$, SCORES!

Dim teacher$(3), students$(3, 5), SCORES(3, 5, 3) ' students$ 1 dim and scores 2 dim
' **************** Read data into arrays ************************
For Page = 1 To 3
READ teacher$(Page)
Next
For Page = 1 To 3
For ROW = 1 To 5

READ students$(Page, ROW) ' Counter for 1 to 5
Next
Next
For Page = 1 To 3
For ROW = 1 To 5

For COL = 1 To 3 ' Col first for Read
READ SCORES(Page, ROW, COL)
Next COL
Next ROW ' Continues to row 2-5
Next Page
' ***************** Input teacheres name ************************

DO WHILE LOOP$ <> "N" 'LOOP WHILE NOT = TO N

Cls
INPUT "Please enter your name: "; NAME$ 'INPUT NAME
NAME$ = UCase$(NAME$) 'CHANG TO UPPERCASE
Cls
Page = 0
For Page = 1 To 3
If teacher$ = NAME$ Then
Page = UBound(teacher$)
End If
Next
Print "This is "; NAME$; "' s math class"
Print
' ***************** Calculate average for a student ******************
If NAME$ = "BILL SMITH" Then
Call BILL(teacher$, student$, SCORES, GRADE$, NAME$)
ElseIf NAME$ = "MAGGIE JOHNSTON" Then
Call MAGGIE(teacher$, student$, SCORES, GRADE$, NAME$)
ElseIf NAME$ = "SHARON JONES" Then
Call SHARON(teacher$, student$, SCORES, GRADE$, NAME$)
Else: Print "NAME NOT IN DATA BASE" ' ERROR WHEN WRONG NAME
End If
INPUT "", ANYKEY
'*** IF USER INPUTS N THEN PROGRAM ENDS, Y AND IT LOOPS BACK TO START
INPUT " ARE THERE ANY MORE CLASS GRADE'S NEEDED(Y/N)"; LOOP$
LOOP$ = UCASE$(LOOP$) 'MAKES INPUT UPPER CASE
Loop ' LOOP
End




' ********************** DATA ****************************
Data "BILL SMITH", "MAGGIE JOHNSTON", "SHARON JONES"
Data "Mike Martin", "Joe Largo", "Linda Trape", "Marty Eles", "Jerry Johnson"
Data "Tom Jones", "Bill Wilson", "Paul Thomas", "Joe Smythe", "Jim Crump"
Data "Bob Thompson", "John Dahl", "Steve Wilson", "Chuck Barry", "Bob Jones"
Data 80, 70, 55
Data 100, 84, 95
Data 55, 85, 85
Data 90, 95, 92
Data 80, 79, 82
Data 76, 87, 98
Data 77, 76, 100
Data 88, 76, 98
Data 88, 66, 65
Data 77, 78, 98
Data 87, 99, 78
Data 88, 67, 89
Data 78, 66, 99
Data 78, 77, 95
Data 79, 69, 98

Sub BILL(teacher$, student$, SCORES, GRADE$, NAME$)
Dim teacher$(3), students$(3, 5), SCORES(3, 5, 3) ' students$ 1 dim and scores 2 dim
For Page = 1 To 1
Next
For ROW = 1 To 5 'READ ROW 1-5
Sum = 0 ' Initalizes sum
For COL = 1 To 3 'READ COL 1-3 GRADES
Sum = Sum + SCORES(Page, ROW, COL) 'ADD GRADES
Next COL ' Bottom of col
average = Sum / 3 'CALC AVG GRADE
If average >= 90 Then ' IF statement 'CONV % TO LETTER GRADE
GRADE$ = "A"
ElseIf average >= 80 Then GRADE$ = "B"
ElseIf average >= 70 Then GRADE$ = "C"
ElseIf average >= 60 Then GRADE$ = "D"
ElseIf average < 60 Then GRADE$ = "F"
End If ' The end of IF
Print students$(Page, ROW); Tab(20); ' Moves cursor w/;
Print USING; "##%"; average;
Print Tab(40); GRADE$
Sum = 0 ' Initalizes sum
Next ROW ' Bottom of Row
' *********************** CLASS AVERAGE FOR TEST 1 ***************
For Page = 1 To 1
Next
For ROW = 1 To 5 ' READ ROW 1-5
For COL = 1 To 1 'READ COL 1 GRADES
Sum = Sum + SCORES(Page, ROW, 1) 'ADD COL 1 GRADES
Next COL ' Bottom of col
Next ROW
aveGrade = Sum / 5 'CALC AVG GRADE
Format$ = "\ \ ##.##%"
Print
Print USING; Format$; "Test 1 class average is"; aveGrade
' ********************** CLASS AVERAGE FOR TEST 2 **************
For Page = 1 To 1
Next
Sum = 0 ' Initalizes sum
For ROW = 1 To 5 'READ ROW 1-5

For COL = 2 To 2 'READ COL 2 GRADES
Sum = Sum + SCORES(Page, ROW, 2) 'ADD COL 2 GRADES
Next COL ' Bottom of col
Next ROW
aveGrade = Sum / 5 ' CALC AVG GRADE
Print USING; Format$; "Test 2 class average is"; aveGrade
' ********************** CLASS AVERAGE FOR TEST 3 ***************
For Page = 1 To 1
Next
Sum = 0 ' Initalizes sum
For ROW = 1 To 5 'READ ROW 1-5

For COL = 3 To 3 'READ COL 3 GRADES
Sum = Sum + SCORES(Page, ROW, 3) 'ADD COL 3 GRADES
Next COL ' Bottom of col
Next ROW
aveGrade = Sum / 5 ' CALC AVG GRADE
Print USING; Format$; "Test 3 class average is"; aveGrade


End Sub

Sub MAGGIE(teacher$, student$, SCORES, GRADE$, NAME$)
Dim teacher$(3), students$(3, 5), SCORES(3, 5, 3)

For Page = 2 To 2
Next
For Page = 2 To 2
Next
For ROW = 1 To 5 'READ ROW 6-10
Sum = 0 ' Initalizes sum
For COL = 1 To 3 'READ COL 1-3 GRADES
Sum = Sum + SCORES(Page, ROW, COL) 'ADD GRADES
Next COL ' Bottom of col
average = Sum / 3 ' CALC AVG GRADE
If average >= 90 Then ' IF statement 'CONV % TO LETTER GRADE
GRADE$ = "A"
ElseIf average >= 80 Then GRADE$ = "B"
ElseIf average >= 70 Then GRADE$ = "C"
ElseIf average >= 60 Then GRADE$ = "D"
ElseIf average < 60 Then GRADE$ = "F"
End If ' The end of IF
Print students$(Page, ROW); Tab(20); ' Moves cursor w/;
Print USING; "##%"; average;
Print Tab(40); GRADE$
Next ROW ' Bottom of Row
Print
Print
' *********************** CLASS AVERAGE FOR TEST 1 ***************
For Page = 2 To 2
Next
Sum = 0
For ROW = 1 To 5 'READ ROW 6-10
For COL = 1 To 1 'READ COL 1 GRADES
Sum = Sum + SCORES(Page, ROW, 1) 'ADD COL 1 GRADES
Next COL ' Bottom of col
Next ROW
aveGrade = Sum / 5 'CALC AVG GRADE
Format$ = "\ \ ##.##%"
Print
Print USING; Format$; "Test 1 class average is"; aveGrade
' ********************** CLASS AVERAGE FOR TEST 2 ***************
For Page = 2 To 2
Next
Sum = 0 ' Initalizes sum
For ROW = 1 To 5 'READ ROW 6-10

For COL = 2 To 2 'READ COL 2 GRADES
Sum = Sum + SCORES(Page, ROW, 2) 'ADD COL 2 GRADES
Next COL ' Bottom of col
Next ROW
aveGrade = Sum / 5 'CALC AVG GRADE
Print USING; Format$; "Test 2 class average is"; aveGrade
' ********************** CLASS AVERAGE FOR TEST 3 ***************
For Page = 2 To 2
Next
Sum = 0 ' Initalizes sum
For ROW = 1 To 5 'READ ROW 6-10

For COL = 3 To 3 'READ COL 3 GRADES
Sum = Sum + SCORES(Page, ROW, 3) 'ADD COL 3 GRADES
Next COL ' Bottom of col
Next ROW
aveGrade = Sum / 5 'CALC AVG GRADE
Print USING; Format$; "Test 3 class average is"; aveGrade


End Sub

Sub SHARON(teacher$, student$, SCORES, GRADE$, NAME$)
Dim teacher$(3), students$(3, 5), SCORES(3, 5, 3)

For Page = 3 To 3
Next
For ROW = 1 To 5 'READ ROW 11-15
Sum = 0 ' Initalizes sum
For COL = 1 To 3 'READ COL 1-3
Sum = Sum + SCORES(Page, ROW, COL)
Next COL ' Bottom of col
average = Sum / 3 'CALC AVG GRADE
If average >= 90 Then ' IF statement 'CONV % TO GRADE LETTER
GRADE$ = "A"
ElseIf average >= 80 Then GRADE$ = "B"
ElseIf average >= 70 Then GRADE$ = "C"
ElseIf average >= 60 Then GRADE$ = "D"
ElseIf average < 60 Then GRADE$ = "F"
End If ' The end of IF
Print students$(Page, ROW); Tab(20); ' Moves cursor w/;
Print USING; "##%"; average;
Print Tab(40); GRADE$
Next ROW ' Bottom of Row

' *********************** CLASS AVERAGE FOR TEST 1 ***************
For Page = 3 To 3
Next
Sum = 0
For ROW = 1 To 5 'READ ROW 11-15
For COL = 1 To 1 'READ COL 1 GRADES
Sum = Sum + SCORES(Page, ROW, 1) 'ADD COL 1 GRADES
Next COL ' Bottom of col
Next ROW
aveGrade = Sum / 5 'CALC AVG GRADES
Format$ = "\ \ ##.##%"
Print
Print USING; Format$; "Test 1 class average is"; aveGrade
' ********************** CLASS AVERAGE FOR TEST 2 ***************
For PAQGE = 3 To 3
Next
Sum = 0 ' Initalizes sum
For ROW = 1 To 5 'READ ROW 11-15

For COL = 2 To 2 'READ COL 2 GRADES
Sum = Sum + SCORES(Page, ROW, 2) 'ADDS COL 2 GRADES
Next COL ' Bottom of col
Next ROW
aveGrade = Sum / 5 'CALC AVG GRADE
Print USING; Format$; "Test 2 class average is"; aveGrade
' ********************** CLASS AVERAGE FOR TEST 3 ***************
For Page = 3 To 3
Next
Sum = 0 ' Initalizes sum
For ROW = 1 To 5 'READ ROW 11-15

For COL = 3 To 3 'READ COL 3 GRADES
Sum = Sum + SCORES(Page, ROW, 3) 'ADDS COL 3 GRADES
Next COL ' Bottom of col
Next ROW 'GRADES/ 5 FOR AVG
aveGrade = Sum / 5
Print USING; Format$; "Test 3 class average is"; aveGrade 'PRINT AVG GRADE


End Sub

here is what the out put should look like and does when using no subs and only a 2 dim array.

This is Bill Smith’s math class

Mike Martin 68% D
Joe Largo 93% A
Linda Trape 75% C
Marty Eles 92% A
Jerry Johnson 80% B

Test 1 class average is 81.00%
Test 2 class average is 82.60%
Test 3 class average is 81.80%

but this is what i get with subs

This is Bill Smith’s math class

0% F
0% F
0% F 0% F
0% F

Test 1 class average is 0.00%
Test 2 class average is 0.00%
Test 3 class average is 0.00%
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)