PDA

Ver la versión completa : Ayuda!! con qbasic



ivanuhry
27-11-2008, 23:19
Hola mi nombre es Iván y soy nuevo en el foro.
estoy en la secundaria y estamos aprendiendo programacion por medio del qbasic, y estoy bastante perdido.
necesitaria si alguien puede hacerme como sería un programa en el cual, el usuario ingresaría 10 valores, y estos imprimirlos en pantalla de mayor a menor, menor a mayor e indicar el numero de pares. esto me seria de gran ayuda, para saber como hacerlo.
Muchas Gracias
Iván

juanvarp
03-12-2008, 13:52
hola ,yo antes programaba mucho en qbasic, esta tarde te hago el programa, y te lo envio, dame por privado tu correo.
saludos

hystd
03-12-2008, 14:53
juanvarp, no se responden las cosas por privado.

Uff, yo no recuerdo ya el qbasic... que tiempos!!! bueno intentaré ayudarte...

Primero debes definirte un array (vector), de 10 elementos, que será en donde almacenes cada valor que ingrese el usuario... si mal no recuerdo sería algo así como:

DIM valores (1 TO 10)

Ahora para cada uno de los elementos, guardas el valor que introduzca el usuario. Creo recordar que era con INPUT. Puedes hacerlo uno a uno, aunque lo correcto es utilizar un bucle (menos lineas de código y más elegante):

FOR i=1 TO 10
INPUT "", valores(i)
NEXT

Con ésto ya tendrías el vector inicializado a todos los valores que introduzca el usuario.

Ahora quedaría simplemente hacer un algoritmo de ordenación. Te recomiendo usar un método directo, puesto que éstos, a pesar de tener cotas de complejidad O(n^2), se comportan mejor que los métodos rápidos, (Como MergeSort, con cota O(n*log n)), cuando el número de elementos a ordenar es pequeño.

Puesto que se trata de 10 elementos, yo me decantaría por selección o inserción. Y más concretamente por éste último si es que buscas eficiencia.

Echale un vistazo a esos algoritmos, y sólo sería cuestión de traducirlo a QBasic.

Una vez ordenado, haces un bucle que recorra el vector y lo muestre por pantalla desde 1 hasta 10. Con ésto mostrarás los resultados de menor a mayor. Si haces lo mismo pero en sentido inverso 8desde 10 hasta 1, los mostrarás de mayor a menor.

Si buscamos eficiencia, en vez de tener que recorrer el array dos veces (sin contar las pasadas mientras se ordena), puedes hacer que en el mismo bucle se muestre la posición i, y la posición N-i+1. Si aún así, buscas una mejora, puedes aprovechar el mismo algoritmo de ordenación y mostrar el elemento que ya está en su posición.

Un saludo.

juanvarp
04-12-2008, 11:35
REM borramos la pantalla
REM con screen 12 ponemos la pantalla con letras peque¤as
REM puedes usar simplemente cls si lo deseas
SCREEN 12

REM creamos la zona de memoria donde guardar los 10 valores
DIM datos(10)



REM pedimos al uauario que ingrese los valores
FOR c = 0 TO 9
INPUT "introduzca datos "; datos(c)
NEXT c


REM calculamos de menor a mayor
REM primero miramos cual es el mayor ,
REM una vez averiguado cambiamos su posicion por la del numero menor,
REM damos las pasadas necesarias hasta tenrlos todos calculados


elmayor = 0

FOR c2 = 0 TO 8
FOR c = c2 + 1 TO 9
IF datos(c2) > datos(c) THEN elmayor = datos(c2): datos(c2) = datos(c): datos(c) = elmayor

NEXT c
NEXT c2

CLS

PRINT " DE MENOR A MAYOR"
PRINT "=================="

FOR t = 0 TO 9
PRINT datos(t)
NEXT t

PRINT " DE MAYOR A MENOR"
PRINT "=================="

FOR t = 9 TO 0 STEP -1
PRINT datos(t)
NEXT t

PRINT "LOS PARES SON"
PRINT "============="
FOR t = 0 TO 9
a = datos(t) MOD (2)
IF a = 0 THEN PRINT datos(t)
NEXT t

ivanuhry
05-04-2009, 04:33
ya lo aprendí yo, pero me parece que serie bueno dejarlo aca resuelto para futuras consultas, gracias por responder, me sirvio bastante, y encontre una forma ams resumida de hacerlo aca la dejo, y espero que sea util para quien necesite de esto :)

cls
dim v(9) as integer
x=0
do while x < 9
x=x+1
input "ingrese un numero";v(x)
loop
for x= 0 to 9
for y= x+1 to 9
if v(x) < v(y) then [NOTA: el > define si lo quieren ordenar de menor a mayor o viceversa]
swap v(x), v(y)
end if
next y
next x
for x = 0 to 9
print v(x)
next x
print "los pares son"
for x = 0 to 9
if v(x) mod 2 = 0 then
print v(x)
end if
next x
print "los impares son"
for x = 0 to 9
if v(x) mod 2 <> 0 then
print v(x)
end if
next x
end
un saludo y gracias a todos :) espero que esto les sea de ayuda

.Yok3R.
05-04-2009, 19:53
Pufff si ya no me acuerdo de Pascal y de C puro (afortunadamente Java se parece mucho en cuestión de sintaxis claro), menos del QBasic, pero me pareció bueno pasar a recordar cositas que ya estaban en el server del olvido dentro de mi cerebro jajaja... Gracias por permitirme echarme un chapusón en la nostalgia.

Saludos
¡Abur!