Domingo 15 de Diciembre de 2024, 18:49
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
simple burbuja, se me queda colgado
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: simple burbuja, se me queda colgado (Leído 2607 veces)
picyo
Visitante
simple burbuja, se me queda colgado
«
en:
Lunes 26 de Abril de 2010, 17:30 »
0
hola! vereis, estoy recordando un poco el C++ desde lo mas básico, como sería el método de ordenacion de la burbuja, pero tengo un problema: se me queda colgado... y no por que...alguien ve algo ?
Código: C++
#include <iostream>
using
namespace
std
;
int
main
(
void
)
{
int
array
[
10
]
;
int
valores
[
9
]
;
int
x,q,temporal,TAM,i,j,temp
;
//for(int x=0;x=9;x++) {
x
=
0
;
while
(
x
<
10
)
{
cout
<<
"pon un numero"
<<
endl
;
cout
<<
"Numero("
;
cout
<<
x
;
cout
<<
"): "
;
cin
>>
array
[
x
]
;
cin
.
get
(
)
;
x
++
;
}
cout
<<
"empieza la ordenacion"
<<
endl
;
for
(
int
i
=
0
;
i
=
10
-
1
;
i
++
)
{
for
(
int
j
=
i
+
1
;
j
=
10
;
j
++
)
{
if
(
array
[
i
]
>
array
[
j
]
)
{
temp
=
array
[
i
]
;
array
[
i
]
=
array
[
j
]
;
array
[
j
]
=
temp
;
}
}
}
for
(
int
i
=
0
;
i
=
10
-
1
;
i
++
)
{
cout
<<
array
[
i
]
;
}
cin
.
get
(
)
;
return
0
;
}
Tweet
diego.martinez
Miembro MUY activo
Mensajes: 297
Re: simple burbuja, se me queda colgado
«
Respuesta #1 en:
Lunes 26 de Abril de 2010, 19:52 »
0
Código: C++
for
(
int
i
=
0
;
i
=
10
-
1
;
i
++
)
{
for
(
int
j
=
i
+
1
;
j
=
10
;
j
++
)
{
las clausulas de terminación de estos for's estan mal!, no estas comprobando nada, estas asignando.
Creo que querias decir...
Código: C++
for
(
int
i
=
0
;
i
<
10
-
1
;
i
++
)
{
for
(
int
j
=
i
+
1
;
j
<
10
;
j
++
)
{
Ah, y en el ultimo for, tambien.
picyo
Visitante
Re: simple burbuja, se me queda colgado
«
Respuesta #2 en:
Jueves 29 de Abril de 2010, 01:20 »
0
si, es cierto!
NO creía que tuviese que poner, el error de ejecución estaba ahí, en la asignación del for.Vaya fallo... de todos modos no me ordena en todos los casos, pero bueno, eso ya corre de mi cuenta. gracias!!
diego.martinez
Miembro MUY activo
Mensajes: 297
Re: simple burbuja, se me queda colgado
«
Respuesta #3 en:
Jueves 29 de Abril de 2010, 14:16 »
0
te explico, por si acaso.
el for tiene 3 elementos
for ( inicialización ; clausula de continuación ; iteración )
El for comenzará haciendo lo que ponga en la Inicializacion nada mas arrancar. Despues si la clausula es TRUE (es cierta) entonces ejecuta el contenido de su bloque. Despues , ejecuta la iteración y vuelve a comprobar si la clausula de continuación es TRUE, y vuelve a ejecutar. Asi sucesivamente.
La clausula por lo tanto es una operación booleana, y por lo tanto se va a comparar si vale 0 o diferente de 0, dando igual que tipo de operación sea.
por ejemplo
for (int e=0; IsNotFinished() ; e++)
{
...
}
si IsNotFinished() devuelve false, entonces se romperia el for.
for (int e=0; array[e]!=' ';e++)
itera el array hasta encontrar el valor ' '.
etc...
picyo
Visitante
Re: simple burbuja, se me queda colgado
«
Respuesta #4 en:
Jueves 29 de Abril de 2010, 16:58 »
0
Si, entiendo. creo que la mayoria de for's que he o hemos hecho han sido algo mecánicos. Creo que entiendo mucho más ahora.Tengo otra duda acerca de esta ordenacion de mi array. Ahora, quiero hacer el mismo programa ( que por cierto, si ordena bien, lo dije mal ) pero en Visual C++. Primero necesitaba hacerlo en plan DOS, para saber exactamente lo que hacia ( por eso este ejemplo cortito). Todo esto lo hago para aprender de una forma más o menos intuitiva, a programar en Visual X ( C++ ahora). Pongo mis pasos :
1. He creado un nuevo proyecto, con windows form.
2. Mi pretension es aplicar el anterior ejemplo hecho en C++ "estándar" pero con entorno gráfico de Windows.
3. Una ventana ( form1) que indique al usuario que ha de poner una serie de numeros, y un botón de "start", y luego otra ventana que sobresalga cuando el resultado de esa ordenacion este implementada.
de momento solo he puesto una ventana con un boton, el cual quiero asociar a start la ordenacion, pero no se que tipo de orden arrastrar ( visual) desde la lista de comandos para que el usuario escriba distintos numeros, voy bastante perdido
diego.martinez
Miembro MUY activo
Mensajes: 297
Re: simple burbuja, se me queda colgado
«
Respuesta #5 en:
Jueves 29 de Abril de 2010, 19:23 »
0
bueno, te paso un link a un tutorial que enseña a usar el win32.
http://www.winprog.org/tutorial/
Despues de que te lo mires...
lo que quieres hacer no necesita que arrastres nada. Realmente, create un form con 1 EDIT y un BUTTON y ya esta.
En el WM_COMMAND del BUTTON procedes a hacer la operación.
picyo
Visitante
Re: simple burbuja, se me queda colgado
«
Respuesta #6 en:
Jueves 29 de Abril de 2010, 20:18 »
0
ok, entiendo tu idea. De momento Visual C++ dejarlo aparcado ( al menos con el IDE Visual Studio) y hacerlo " a mano". también me servirá para comprara lo que si he visto ya de Visual. Me gusta ese tutorial, esta muy bien! Ya ire informando acerca de como me va
picyo
Visitante
Re: simple burbuja, se me queda colgado
«
Respuesta #7 en:
Viernes 30 de Abril de 2010, 15:34 »
0
hola de nuevo. Estoy metido en ese curso, pero me da un problema. hago nada mas copiar y pegar, haciendo un proyecto de Win32 de tipo consola. Me da fallo, creo qu eno reconoce la libreria <windows.h>.
Voy al directorio de Visual Studio/VC y en la carpeta de includes no hay ningún windows.h PAra quien está dirijido pues este curso ? Deberia tener el Borland C, o que pasa?
ProfesorX
Moderador
Mensajes: 796
Nacionalidad:
Re: simple burbuja, se me queda colgado
«
Respuesta #8 en:
Viernes 30 de Abril de 2010, 19:09 »
0
Deberia funcionar con Visual C++. Ese archivo si se encuentra en Visual C++.
Quizas no este bien instalado, deberias desisntalarlo y volverlo a instalar.
NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================
picyo
Visitante
Re: simple burbuja, se me queda colgado
«
Respuesta #9 en:
Domingo 2 de Mayo de 2010, 17:01 »
0
si, cierto. Lo que tratando de encontrarla manualmente no soy capaz :p
De todos en este curso, también te has de creer miles de cosas, por ejemplo, esta bien cuando explican casi cada cosa que es, pero creo que sigo necesitando un libro, ya que te dejan un poco abierto a expectativas ( relamente no se muy bien lo que hago, es como si usase Visual C++ y ya tuviera generadas las ventanas y eventos)
picyo
Visitante
Re: simple burbuja, se me queda colgado
«
Respuesta #10 en:
Martes 11 de Mayo de 2010, 16:12 »
0
estoy siguiendo un curso de un libro mas bien, begining Visual C++ 2008, y me parece perfecto, porque como dcis, no va directamente a los windows forms, primero te enseña desde "abajo" viendo la API. Ahora he hecho un parentesis del libreo, para hacer una modificacion de uno de los ejemplos, y hacer cosas por mi cuenta. Estoy mezclando ( quizas este mal eso) cosas del "antiguo" C o C++, pero bueno. Lo que quiero hacer es bastante simple:
* Cada vez preguntar si se quiere jugar.
* En caso de no, se aprieta 'N'.
* En caso de si, se aprieta 'S'. Al apretar S, pongo otro getchar. Si pulsamos la letra "q", la opcion sera correcta y ganamos un punto, de caso contrario volveria al principio.
* si cuano nos pregunta si queremos seguir jugando decimos que no ("N"), "quiero" es False, y se acaba este juego ( o cosa.
).
Pues CASI me va bien, pero... no me entra nunca en el segundo switch, de hecho para ver si entra o no pongo una lectura de la tecla apretada y siempre es la misma ( el resultado de la tecla pulsada lo da en numero ascii). Por que puede ser qu eno me entre ahí?
Y hay otro caso... da "2" vueltas a todo... AHora pongo una serie de pantallazos y el codigo de programa:
codigo:
Código: C++
// verificarTecla.cpp : main project file.
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
using
namespace
System
;
void
mensaje
(
void
)
;
int
main
(
array
<
System
::
String
^
>
^
args
)
{
char
tecla,tecla1
;
int
nomasqueuna,puntos
=
0
;
bool
quiero
=
true
;
char
quiero1
;
nomasqueuna
=
1
;
while
(
quiero
)
{
Console
::
WriteLine
(
"Seguro que quieres jugar? 'S' para Si, 'N' para no"
)
;
tecla
=
getchar
(
)
;
//quiero=false;
switch
(
tecla
)
{
case
(
'S'
)
:
mensaje
(
)
;
Console
::
WriteLine
(
"Has pulsado{0}. Escribe la letra"
,tecla
)
;
tecla
=
getchar
(
)
;
// NO ME HACE CASO EN ESTE GETCHAR! SIEMPER TIENE EL MISMO VALOR
switch
(
tecla
)
{
Console
::
WriteLine
(
" Pulsada tecla {0}.Si Entra en Sitch"
,tecla
)
;
tecla
=
getchar
(
)
;
case
(
'q'
)
:
puntos
++
;
Console
::
WriteLine
(
" ****Has apretado la tecla {0}, con total de puntos {1}*****"
,tecla,puntos
)
;
case
(
!
'q'
)
:
Console
::
WriteLine
(
"MIERDA, sin puntos {0}"
,tecla
)
;
break
;
}
break
;
case
(
'N'
)
:
quiero
=
false
;
break
;
default
:
Console
::
WriteLine
(
"Opción incorrecta"
)
;
break
;
}
}
return
0
;
}
// main
void
mensaje
(
void
)
{
Console
::
WriteLine
(
"hola"
)
;
}
Al ejecutar, se ve este resultado, al teclear la letra S (mayúscula):
[/url]
Uploaded with
ImageShack.us
[/img]
Como veis, no me hace caso a este nuevo gecthar(). Bien, imaginemos que pongo cualquier letra ( una tecla solo) entonces veo :
[/url]</noscript>
[/img]
Si tecleo una letra distinta a S o N, pero solo una, se repite 2 veces, y si pongo 2 letras, lo hara 3:
[/url]
Uploaded with
ImageShack.us
[/img]
bueno tengo asi pues localizados los problemas:
1) No me lee el segundo gecthar, por tanto , no me hace caso a la opcion "S". He probado hacerlo mediante "if" pero con mismo resultado.
2) repeticion según el número de teclas tecleadas del bucle.
NO hallo solucion a ello chicos... y la verdad es que he sido capaz de hacer programas mucho mas costosos que este.. y esta tonteria, me da problemas...increíble..que ocurre?
picyo
Visitante
Re: simple burbuja, se me queda colgado
«
Respuesta #11 en:
Martes 11 de Mayo de 2010, 16:58 »
0
Uhm, a modo de prueba error, he arreglado el problema, pero la verdad, no entiendo porque he de poner ese gechar en esa posicion. Ok, antes de salir, la variable tecla ya tiene un nuevo valor, `pero realmente el break no se a donde lo lleva ..¿?
Código: C++
// verificarTecla.cpp : main project file.
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
using
namespace
System
;
void
mensaje
(
void
)
;
int
main
(
array
<
System
::
String
^
>
^
args
)
{
char
tecla,tecla1
;
int
nomasqueuna,puntos
=
0
;
bool
quiero
=
true
;
char
quiero1
;
nomasqueuna
=
1
;
while
(
quiero
)
{
Console
::
WriteLine
(
"Seguro que quieres jugar? 'S' para Si, 'N' para no"
)
;
tecla
=
getchar
(
)
;
//quiero=false;
switch
(
tecla
)
{
case
(
'S'
)
:
mensaje
(
)
;
tecla
=
getchar
(
)
;
Console
::
WriteLine
(
"Has pulsado{0}. Escribe la letra"
,tecla
)
;
tecla
=
getchar
(
)
;
Console
::
WriteLine
(
"tecla={0}"
,tecla
)
;
switch
(
tecla
)
{
Console
::
WriteLine
(
" Pulsada tecla {0}.Si Entra en Sitch"
,tecla
)
;
case
(
'q'
)
:
puntos
++
;
Console
::
WriteLine
(
" ****Has apretado la tecla {0}, con total de puntos {1}*****"
,tecla,puntos
)
;
tecla
=
getchar
(
)
;
// POR QUE NECESITO PONERLO AQUI, Y NO AL PRINCIPIO COMO LO PONIA?
break
;
// ME HABIA DEJADO ESTE BREAK, PERO, AL "ROMPER", NO LO SACA FUERA DEL 2o SWITCH?
case
(
!
'q'
)
:
Console
::
WriteLine
(
"MIERDA, sin puntos {0}"
,tecla
)
;
break
;
}
break
;
case
(
'N'
)
:
quiero
=
false
;
break
;
default
:
Console
::
WriteLine
(
"Opción incorrecta"
)
;
break
;
}
}
return
0
;
}
// main
void
mensaje
(
void
)
{
Console
::
WriteLine
(
"hola"
)
;
}
ProfesorX
Moderador
Mensajes: 796
Nacionalidad:
Re: simple burbuja, se me queda colgado
«
Respuesta #12 en:
Martes 11 de Mayo de 2010, 20:21 »
0
Hola picyo, primero que nada, te aconsejaria lo siguiente, estas trabajando con Visual C++, pero estas utilizando las "Extensiones CLR para .NET", estas extenciones de C++ NO son portables, solo funcionan en entornos .NET Framework, asi que si tu intension es escribir codigo C++ portable a cualquier sistema operativo, evita utilizarlas. La principal funcion de estas extensiones CLR seria desde mi punto de vista escribir codigo C++ que sea compatible con lenguajes .NET, como Visual Basic o Visual C#, asi que si no es esa tu intension, desechalo.
Ahora respecto a tus dudas:
1. gertchar(), este seria tu primer problema, la manera como funciona el getchar() es que lee valores desde la entrada estandar (stdin), pero no limpia todo el buffer de entrada al leer, asi que si tu escribes por ejemplo S y luego das enter, en el buffer se queda el valor de S y tambien el valor de el enter, que en este caso es un avance de linea (caracter No 10), por eso al volver a usar getchar, seguira leyendo los valores que quedan en el buffer de entrada. La solucion a esto es utilizar la funcion fflush(stdin) para limpiar el buffer de entrada y asi el proximo getchar() leera los datos de manera correcta, o sea que debes hacer:
Código: C++
tecla
=
getchar
(
)
;
fflush
(
stdin
)
;
Ahora, si insistes en utilizar las Extensiones CLR, la manera correcta de leer seria:
Código: C++
tecla
=
Console
::
Read
(
)
;
2. break, respecto al break, la sentencia break lo que hace es sacar la ejecucion del bloque actual, asi que en tu caso, el break mas interno NO te sacara de todos los switch, solo te saca del mas interno. Ademas, el break no solo se utiliza en switch, se puede utilizar en cualquier sentencia, y su funcion es la misma, te saca del bloque actual.
Un ejemplo para que notes como funcona el break:
Código: C++
if
(
condicion
)
{
sentencia1
;
sentencia2
;
if
(
condicion
)
{
sentencia3
;
if
(
condicion
)
{
sentencia4
// la ejecucion continuara en sentencia6, se salta sentencia5;
break
;
sentencia5
;
}
sentencia6
;
}
sentencia7
}
if
(
condicion
)
{
sentencia1
;
sentencia2
;
if
(
condicion
)
{
sentencia3
;
// la ejecucion continuara en sentencia7, se salta el if, sentencia4
// sentencia5 y sentencia6;
break
;
if
(
condicion
)
{
sentencia4
sentencia5
;
}
sentencia6
;
}
sentencia7
}
Espero que con esto te quede mas claro.
Saludos
NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================
picyo
Visitante
Re: simple burbuja, se me queda colgado
«
Respuesta #13 en:
Martes 11 de Mayo de 2010, 20:57 »
0
uhm. Si si, muchisimo
Lo que dices acerca que no se borra el registro ( o donde sea que este :p) cuando haces getchar() si lo he visto, pero no tenia ni idea que hacer. En una de las lineas ( no se si al final la he quitado) ponia un Console::writeLine(" algo{0}",tecla) y en tecla me aparecia el numero 10 . De ahí he deducido que era del código ASCII, y lo he consultado. En efecto, es lo que tu dices, el codigo 10 es un salto de línea y la verdad... no sabía como solucionarlo ( Ahora si
)
respecto .NET, lo que realmente quiero aprender ( al principio) es Visual C++ ( Y vIsual basic, Visual C#...) pero para empezar quiero ( y creo que ha de ser asi) empezar por la API de Windows, e incluso saber el C++ "estandar" o sea, sin basarse en librerias de Windows. Creo que los voy aprendiendo a la par, y saber como se hace lo mismo ( siempre que se pueda) de un modo u otro. Me gustaria acabar haciendo una aplicacion, un juego para crios, para apreender algo ( no se muy bien que ). por eso he empezado ya con eso de los puntos y tal :p
picyo
Visitante
Re: simple burbuja, se me queda colgado
«
Respuesta #14 en:
Sábado 15 de Mayo de 2010, 17:43 »
0
Hola! estoy haciendo el seguimiento del libreo, y salen dudas ( como no!) acerca del tipo de proyecto, o que es MFC o que es CLI o que es win32...o que es todo junto..vaya lio
ya lo voy comprendiendo, si alguien que lea por aqui tiene mi misma duda ( ya la tengo resarcida) os paso un link que em ha gustado :
http://geeks.ms/blogs/rfog/archive/2009 ... c-cli.aspx
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
simple burbuja, se me queda colgado