Saltar al contenido
EjemplosEnglishEspacio →

Por Referencia y por valor

Ordena tres números intercambiándolos con subprocesos.

Nivel
Intermedio
Conceptos:
Entrada y salida
SubProcesos
Por Referencia
Si
Abrir en Codoritmo

Ejecuta, modifica y depura este ejemplo en el navegador.

Lo que aprenderás

Con Por Referencia el SubProceso modifica las variables originales; con Por Valor solo cambia una copia. Un SubProceso puede llamar a otro, como OrdenarTres a Intercambiar.

Código

references.psc · 33 líneas
SubProceso Intercambiar(a Por Referencia, b Por Referencia)    Definir temporal Como Real    temporal <- a    a <- b    b <- temporalFinSubProcesoSubProceso OrdenarTres(n1 Por Referencia, n2 Por Referencia, n3 Por Referencia)    Si n1 > n2 Entonces        Intercambiar(n1, n2)    FinSi    Si n2 > n3 Entonces        Intercambiar(n2, n3)    FinSi    Si n1 > n2 Entonces        Intercambiar(n1, n2)    FinSiFinSubProcesoSubProceso IntentarCambiar(n Por Valor)    // Solo cambia la copia local    n <- 0FinSubProcesoAlgoritmo PorReferencia    Definir a, b, c Como Real    Escribir "Escribe tres números:"    Leer a, b, c    OrdenarTres(a, b, c)    Escribir "Ordenados: ", a, " ", b, " ", c    IntentarCambiar(a)    Escribir "Por valor, a sigue valiendo ", aFinAlgoritmo

Diagrama de flujo

Cada bloque del diagrama corresponde a una instrucción del código.

Algoritmo PorReferencia
Algoritmo PorReferenciaAlgoritmo PorReferenciaAlgoritmo PorReferenciaDefinir a, b, c Como RealDefinir a, b, c Como RealEscribir "Escribe tres números:"Escribir "Escribe tresnúmeros:"Leer a, b, cLeer a, b, cOrdenarTres(a, b, c)OrdenarTres(a, b, c)Escribir "Ordenados: ", a, " ", b, " ", cEscribir "Ordenados: ", a, "", b, " ", cIntentarCambiar(a)IntentarCambiar(a)Escribir "Por valor, a sigue valiendo ", aEscribir "Por valor, a siguevaliendo ", aFinAlgoritmoFinAlgoritmo
SubProceso Intercambiar
SubProceso IntercambiarSubProceso Intercambiar(a Por Referencia, b Por Referencia)SubProceso Intercambiar(a PorReferencia, b Por Referencia)Definir temporal Como RealDefinir temporal Como Realtemporal <- atemporal <- aa <- ba <- bb <- temporalb <- temporalFinSubProcesoFinSubProceso
SubProceso OrdenarTres
SubProceso OrdenarTresSíNoSíNoSíNoSubProceso OrdenarTres(n1 Por Referencia, n2 Por Referencia, n3 Por Referencia)SubProceso OrdenarTres(n1 PorReferencia, n2 Por Referencia, n3…Si n1 > n2 Entoncesn1 > n2Intercambiar(n1, n2)Intercambiar(n1, n2)Si n2 > n3 Entoncesn2 > n3Intercambiar(n2, n3)Intercambiar(n2, n3)Si n1 > n2 Entoncesn1 > n2Intercambiar(n1, n2)Intercambiar(n1, n2)FinSubProcesoFinSubProceso
SubProceso IntentarCambiar
SubProceso IntentarCambiarSubProceso IntentarCambiar(n)SubProceso IntentarCambiar(n)n <- 0n <- 0FinSubProcesoFinSubProceso

Ejemplo de ejecución

Esto muestra el programa al ejecutarlo. Las respuestas escritas por el usuario aparecen resaltadas.

Escribe tres números:Respuesta del usuario: 9Respuesta del usuario: 2Respuesta del usuario: 5Ordenados: 2 5 9Por valor, a sigue valiendo 2

Desafío

Agrega un SubProceso Duplicar(n Por Referencia) y úsalo para duplicar el mayor de los tres.

Ver pista

Después de OrdenarTres, el mayor siempre queda en c.

Abrir en Codoritmo