im taking a qbasic class and am having a very hard time on this program...here is the question:
Using the ASCII table and the CHR$ function, write a program that prints the following output using a nested for next loop:
A
AB
ABC
ABCD
ABCDE

--------------------------------------------------------------------
heres what I have so far...i keep getting a "type mismatch":

CLS
FOR Outer = 1 TO 5 STEP 1
FOR in = CHR$(65) TO CHR$(70) <------TYPE MISMATCH?????
PRINT in;
NEXT in
PRINT
NEXT Outer

what am i doing wrong? any help on this would be greatly appreciated....thanks :confused:

Dani AI

Generated

the Type mismatch came from trying to use CHR$ in the FOR header. In QBasic, a FOR counter must be numeric; CHR$ returns a string. called this out, and was right that STEP 1 is implied. The trick is: loop over numbers, then convert each number to a character only when you print or build the line.

Here is a compact pattern that stays within the assignment (nested loops + CHR$) while avoiding type issues and the need for trailing semicolons:

DEFINT A-Z
base% = ASC("A")        ' start at ASCII A
FOR row% = 1 TO 5
    line$ = ""
    FOR col% = 0 TO row% - 1
        line$ = line$ + CHR$(base% + col%)
    NEXT col%
    PRINT line$
NEXT row%

Why this works:

  • The loop counters are integers (%), so FOR/NEXT is happy.
  • We compute characters from their codes only at the point of use.
  • Building line$ then printing once per row avoids relying on PRINT ...; to stay on the same line (as demonstrated), and it is easy to adapt.

Quick tips:

  • Prefer meaningful names over in (which can read like a keyword) to reduce confusion.
  • If you ever do print one character at a time, remember PRINT expr; stays on the same line, PRINT alone moves to the next line.
  • Using ASC("A") instead of 65 avoids magic numbers and makes intent clear.

Recommended Answers

All 7 Replies

CLS
FOR Outer = 1 TO 5 STEP 1
FOR in = CHR$(65) TO CHR$(70) <------TYPE MISMATCH?????
PRINT in;
NEXT in
PRINT
NEXT Outer

what am i doing wrong? any help on this would be greatly appreciated....thanks :confused:

Well you are making it too difficult, the reason is write in front of you. CHR$(65) gives you what value?

...
Look at your ASCII Table if you don't know off hand.....

It is the Character A .

Now, look at your code. For in = CHR$(65) Stop right there!
If CHR$(65) gives a value of A and in is no doubt an integer value this is where you mismatch starts. You care comparing a Character String (albiet one character) to an Integer! So it unfortunately won't work. Can only compare like datatypes.

So some Conversion will be needed and I think you need to check your logic for this code....

Hope this helps.... If not let me know if you need more help!

I sill don't quite get it. Every time I try and switch it up to change values I get another error. I know im close but just cant figure it out. any suggestions?

first of all, you don't need STEP, because the default step value is always 1. Secondly, A FOR statement is looking for an integer. CHR$() returns a character, which is not a number. Leave the CHR$() out of the FOR header. Look at the example below.

FOR outer = 1 to 5
	FOR in = 1 to outer
		PRINT CHR$(in+64)
	NEXT in
NEXT outer

Now lets run through the code step by step. First time through, "outer" will equal 1. So the following statement would actually be "FOR in = 1 to 1". "in" will equal 1 as well. Next line "PRINT CHR$(in+64)" This will be the same as "PRINT CHR$(65)" because "in" is 1. Now the loops starts back from the top. This time, "outer" will equal 2. So therefore, the following FOR statement would really mean "FOR in = 1 to 2". So that FOR loop will run through twice. The first time "in" being 1 and the second time "in" being 2. Which would print CHR$(1+64) and CHR$(2+64). And the pattern repeats until "outer" finally equals 5. Hope this helped you a little.

I just had a problem similar to this one. But I ended up making it harder than it really was. It all clicked when I figured out FOR is looking for integers instea of characters. Here's what I did:

CLS

FOR num = 32 TO 255
PRINT CHR$(num)
NEXT num

END

It can't get more simple than that.

The code below should work if Qbasic works at all like BCX:

dim inner, outer

FOR outer = 1 to 5
FOR inner = 1 to outer
PRINT CHR$(inner + 64); ' stay on line
NEXT innner
PRINT ' new line feed
NEXT outer

The code below should work if Qbasic works at all like BCX:

dim inner, outer

FOR outer = 1 to 5
FOR inner = 1 to outer
PRINT CHR$(inner + 64); ' stay on line
NEXT innner
PRINT ' new line feed
NEXT outer

Well I do appreciate your help, but I took this class back in April and this is no longer useful to me. I got a B+........thanks anyway

WELL U AIN'T PROBABLY GONNA WATCH THIS BUT I HAVE GOT A EASIER SOLUTION:

CLS
FOR I = 65 TO 69
FOR J = 65 TO I
D$=CHR(J)
PRINT D$;
NEXT J
PRINT
NEXT I
END

SEE SIMPLE AS THAT

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.