Está en la página 1de 106

Universidad Autónoma

de Baja California

Facultad de Ingenieria Arquitectura y Diseño

Programación

Clave: 11214

Pedro Núñez Yépiz

Ensenada Baja California, México


PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

C O N T E N I D O
1.- METODOLOGIA PARA LA SOLUCION DE PROBLEMAS

1.1 Definición del problema.


1.2 Analisis del problema
1.3 Algoritmo de solución del problema
1.4 Diagrama de flujo como herramienta para la resolución del problema
1.5 Codificación
1.6 Depuración

2.- INTRODUCCIÓN AL LENGUAJE DE PROGRAMACION

2.1 Programación estructurada


2.2 Estructura basica de un programa
2.3 Zonas de memoria
2.3.1 Variables
2.3.2 Constantes
2.4 Operadores
2.4.1 Operadores de asignación y expresión
2.4.2 Operadores aritmeticos, de relación y lógicos
2.4.3 Operadores de incremento y decremento
2.4.4 Jerarquia de operadores.
2.5 Expresiones básicas
2.5.1 Instrucciones de asignación, entrada/salida
2.5.2 Expresiones aritmeticas
2.5.3 Funciones matematicas

3. ESTRUCTURAS DE CONTROL DE SELECCIÓN

3.1 Selección Sencillo


3.2 Selección doble
3.3 Selección multiple
3.4 Anidación

4. ESTRUCTURAS DE CONTROL DE ITERACION

4.1 Teorla de ciclos


4.1.1 Definición
4.1.2 Contadores
4.1.3 Acumuladores
4.2 Tipos de cielos
4.2.1 Cielos controlados por contador
4.2.2 Cielos controlados por centinela
4.3 Anidación

2 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
5.-CADENAS DE CARACTERES Y ARREGlOS

5.1 Cadenas de caraeteres


5.1 .1 Lectura y Escritura
5.1.2 Asignacion de cadenas
5.1.3 Comparacion de cadenas
5.2 Arreglos unidimensionales
5.2.1 Definicion e inicialización
5.2.2 Manipulacion y operaciones con arreglos.
5.3 Arreglos bidimensionales
5.3.1 Declaracion e inicialización
5.3.2 Manipulacion y operaciones con arreglos.

6. FUNCIONES

6.1 Definición de función


6.2 Prototipos, Ilamada y cuerpo de función
6.3 Funciones sencillas
6.4 Funciones con parámetros por valor y que regresan valor.

ANEXOS

1.- Manejo de cadenas


2.- Instalación de DevC++
3.- Desarrollo de habilidad del pensamiento

3 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

UNIDAD 1
METODOLOGIA PARA LA SOLUCION
DE PROBLEMAS

4 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
UNIDAD 1

Metodologia
para la
solución
de los problemas
Dato

La palabra proviene del latín datum, forma


del verbo dare “dar”, que significa“Lo que es
dado”

Representación de una información de


manera adecuada para su tratamiento por un
ordenador
Dato
Son representaciones simbólicas de
objetos, hechos, instituciones,
conocimientos.
Ejemplos
15
25º C
25 m
31-10-2005
Febrero
María Pérez
Información

Los datos organizados o procesados


adquieren significado y proporcionan
conocimiento o desencadenan un
comportamiento sobre los hechos u
objetos que lo originaron

La información se resumen en :
Datos + significado
Información
Un grupo de datos es información

• Datos: 19- Marzo – Maria – 20 ptos.

• Información: El 19 de marzo se publicó en


acta la calificación de 20 ptos para María

El principal objetivo de la información


consiste en aumentar el conocimiento o
reducir la incertidumbre.
Información

Ejemplos
Juan tiene 15 años
25º C fue la temperatura de esta mañana.
El edificio “Robles” mide 25 m de altura
La fecha de hoy es 31-10-2005
Febrero tiene 28 días y 29 si el año es bisiesto.
María Pérez es un nombre muy común
Problema
Es un asunto o un conjunto de cuestiones que
se plantean para ser resueltas.

La naturaleza de los problemas varía con el


ámbito o el contexto: problemas matemáticos,
químicos, filosóficos, etc.

Es importante que al abordar un problema se


tenga una descripción simple y precisa del
mismo, de lo contrario resultaría complejo
modular, simular, o programar su solución en
un ordenador.
Problema
Un programador es una persona que resuelve
problemas, y para llegar a ser un programador
eficaz se necesita aprender a resolver problemas
de un modo riguroso y sistemático

Problema Diseño Algoritmo

Análisis Programa
Problema
Algunos de los pasos para solucionar un problema son:

Análisis: consiste en el estudio detallado del problema.


Se debe identificar los datos de entrada, de salida y la
descripción del problema.

Diseño del algoritmo, que describe la secuencia


ordenada de pasos que conduce a la solución de un
problema dado.
 Expresar el algoritmo como un programa en un
lenguaje de programación adecuado (Fase de
Codificación)

 Ejecución y validación del programa por el


computador
Algoritmo

Etimología: Proviene del nombre del


matemático persa Mohammed Al-khowanzmi,
cuyo apellido traducido al latín es Algorismus

Conjunto de acciones que especifican la


secuencia de operaciones realizar, en orden,
para resolver un problema

Los algoritmos son independientes tanto del


lenguaje de programación como del
computador que los ejecuta.
Algoritmo
Caracteristicas

 Finito: Un algoritmo siempre debe terminar después de un


número finito de pasos

 Definido: Si se sigue un algoritmo dos veces se debe obtener el


mismo resultado

 Preciso: indicar exactamente el orden de realización de


las instrucciones

 Eficaz: cuando alcanza el objetivo primordial, el análisis de


resolución del problema se lo realiza
prioritariamente
 Eficiente: cuando logra llegar a sus objetivos planteados
utilizando la menor cantidad de recursos posibles,
es decir, minimizando el uso memoria, de pasos y
de esfuerzo humano.
Algoritmo

Ejemplo tradicional de un algoritmo: Cambiar la rueda


pinchada de un coche
Algoritmo

1. Buscar herramientas, rueda de repuesto y triángulo


de señalización
2. Ubicar el triángulo en el lugar adecuado

3. Ir al lugar de la rueda averiada

4. Sacar las tuercas

5. Colocar el gato

6. Levantar el coche
Algoritmo

7. Sacar la rueda

8. Colocar la rueda de Repuesto

9. Colocar las tuercas

10. Apretar las tuercas

11. Guardar las herramientas

FIN
Algoritmo
Fases de Desarrollo de un Algoritmo

Fase Producto
Análisis Especificación

Diseño Algoritmo

Codificación Programa

Compilación Prog. Ejecutable


Interpretación
Pruebas Aplicación
Algoritmo
Fase de Análisis: consiste en el estudio detallado del
problema con el fin de obtener una serie de documentos
(especificación) en los cuales quedan totalmente definido
el proceso a seguir en la automatización

Estudio detallado Documentos de Especificación


Algoritmo
Diseño: consiste en la realización del algoritmo que
resuelve el problema de acuerdo a la especificación dada
en la fase anterior. El algoritmo se representa mediante
pseudocódigo.
Algoritmo PRUEBA
Inicio
Variables
A,B,C: entero
Leer(A,B)
CA+B
Escribir (C)

Documentos de Fin
Especificación
Algoritmo
Codificación: consiste en la traducción del algoritmo a
un programa escrito en un lenguaje de programación

Algoritmo Sumar
Inicio
Variables
A,B,C: entero
Leer(A,B)
CA+B
Escribir (C)
Fin Programa escrito
en un Lenguaje de Programación
Algoritmo
Compilación/Interpretación: consiste en obtener el
programa ejecutableobjeto a partir del programa fuente.

Programa Ejecutable

Programa fuente
Algoritmo
Prueba: consiste en determinar si el programa funciona
correctamente y realiza las operaciones que esperamos
de él.

Programa Ejecutable Aplicación


PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

UNIDAD 2

INTRODUCCIÓN AL LENGUAJE DE
PROGRAMACION

25 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
2 INTRODUCCIÓN AL LENGUAJE DE PROGRAMACION

2.2 ESTRUCTURA BASICA DE UN PROGRAMA EN C

Un programa de C tiene básicamente la siguiente forma:

 Comandos del preprocesador.


 Definiciones de tipos.
 Prototipos de funciones - declara el tipo de función y las variables pasadas a la misma.
 Variables
 Funciones

Para un programa se debe tener una función main().

Una función tiene la forma:

tipo nombre_de_la_funcion (parámetros)


{

variables locales

sentencias de C

A continuación se muestra un primer programa:

/* Programa ejemplo */

#include <stdlib.h>
#include <stdio.h>

int main()
{

printf( "HOLA MUNDO CRUEL Y DESPIADADO \n" );


system (“PAUSE”);
return 0;

NOTAS:

 C requiere las librerías para cargar el funcionamiento de las sentencias siempre vanal inico del
programa y se identifican con el # seguida de la palabra include #include
 C requiere un punto y coma al final de cada sentencia .
 printf es una función estándar de C, la cual es llamada en la función main()
 \n significa salto de línea. Salida formateada.
 return 0; es también una función estándar que hace que el programa termine corretamente.

26 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

En caso de que se hubiera llamado a la función printf de la siguiente forma:

printf("HOLA\n MUNDO \n CRUEL \n Y \n DESPIADADO");

La salida tendría la siguiente forma:

HOLA
MUNDO
CRUEL
Y
DESPIADADO

2.3 ZONAS DE MEMORIA

2.3.1 VARIABLES

Definición de Variable: En programación, una variable es un espacio de memoria reservado para


almacenar un valor que corresponde a un tipo de dato soportado por el lenguaje de programación.
Una variable es representada y usada a través de una etiqueta (un nombre) que le asigna
un programador o que ya viene predefinida.

Por ejemplo, en la variable de nombre "num", se almacena el número 8 (de tipo entero). De forma
genérica, para utilizarla y sumarle un uno se debería programar: num = num + 1.

Todas las variables han de ser declaradas antes de poder ser usadas (una variable no declarada producirá un
mensaje de error en la compilación), y esta declaración ha de hacerse al principio del programa. Cuando una
variable es declarada se le reserva memoria de acuerdo con el tipo incluido en la declaración.

C tiene los siguientes tipos de datos simples:

Tipos de C
Tipo Tamaño (bytes) Límite inferior Límite superior modificador

char 1 -- -- %c
int 2 -32768 +32767 %d
31 31
long 4 -2 +2 -1 %ld
±38 ±38
float 4 -3.2 x 10 +3.2 x 10 %f
±308 ±308
double 8 -1.7 x 10 +1.7 x 10 %lf

Los tipos de datos básicos tiene varios modificadores que les preceden. Se usa un modificador para alterar el
significado de un tipo base para que encaje con las diversas necesidades o situaciones.

27 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
Nota: no hay un tipo booleano en C -- se deberá usar char, int

Para declarar una variable en C, se debe seguir el siguiente formato:

tipo lista_variables;

tipo es un tipo válido de C y lista_variables puede consistir en uno o más indentificadores separados por una
coma. Un identificador debe comenzar con una letra o un guión bajo.

Ejemplo:

int i, j, k;
float x,y,z;
char ch;

2.3.1.1 VARIABES GLOBALES

Una varible global se declara fuera de todas las funciones, incluyendo a la función main(). Una variable
global puede ser utilizada en cualquier parte del programa.

Por ejemplo:

#include <stdlib.h>
#include <stdio.h>

int numero, suma;


char letra;

main()
{
...
}

Es también posible preinicializar variables globales usando el operador de asignación =, por ejemplo:

#include <stdlib.h>
#include <stdio.h>

float suma= 0.0;


int sumaInt= 0;
char letra= 'A';

int main()
{
...
return 0;
}

28 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

Que es lo mismo que:

#include <stdlib.h>
#include <stdio.h>
float suma;
int sumagr;
char letra;

int main()
{
suma = 0.0;
sumagr= 0;
letra = 'A';

...
return 0;
}

Dentro de C también se permite la asignación múltiple usando el operador =, por ejemplo:

a = b = c = d = 3;

...que es lo mismo, pero más eficiente que:

a = 3;
b = 3;
c = 3;
d = 3;

2.3.2 CONSTANTES

Se entiende por constantes aquel tipo de información numérica o alfanumérica que no puede cambiar más
que con una nueva compilación del programa.

ANSI C permite declarar constantes. Cuando se declara una constante es un poco parecido a declarar una
variable, excepto que el valor no puede ser cambiado.

La palabra clave const se usa para declarar una constante, como se muestra a continuación:

const float PI = 3.141592;


int a = 2;

29 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
Notas:

 Se puede usar const antes o después del tipo.


 Es usual inicializar una constante con un valor, ya que no puede ser cambiada de alguna otra forma.

La directiva del preprocesador #define es un método más flexible para definir constantes en un programa.

#include <stdlib.h>
#include <stdio.h>
#define N 20
#define PI 3.141592

float suma= 0.0;


int sumagr= 0;
char letra= 'A';

int main()
{
...
return 0;
}

Una buena práctica de programación es que las constantes sean mayúsculas.

2.4 OPERERADORES

Los operadores son símbolos especiales que por lo común se utilizan en expresiones.

Una expresión es una combinación de variables, operadores y llamadas de métodos construida de acuerdo a
la sintaxis del lenguaje que devuelve un valor.

2.4.1 OPERADORES DE ASIGNACIÓN

Operador Significado Ejemplo

Operadores de asignación

= Asignación a=b

+= Suma y asignación a += b (a=a + b)

-= Resta y asignación a -= b (a=a - b)

*= Multiplicación y asignación a *= b (a=a * b)

/= División y asignación a / b (a=a / b)

30 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

2.4.2 OPERADORES ARITMÉTICOS, RELACIONALES Y LÓGICOS

Lo mismo que en otros lenguajes de programación, en C se tienen los operadores aritméticos más usuales

Operador Significado Ejemplo

Operadores aritméticos

+ Suma a+b

- Resta a-b

* Multiplicación a*b

/ División a/b

% Módulo a%b

Operadores relacionales

== Igualdad a == b

!= Distinto a != b

< Menor que a<b

> Mayor que a>b

<= Menor o igual que a <= b

>= Mayor o igual que a >= b

Operadores lógicos

&& AND (a == b) && (a==c)

|| OR (a > b) || (a > c)

! NOT !(a==b)

31 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

2.4.3 OPERADORES DE INCREMENTO, DECREMENTO Y CAST

Operadores especiales

++ Incremento a++ (postincremento)


++a (preincremento)

-- Decremento a-- (postdecremento)


--a (predecremento)

(tipo)expr Cast a = (int) b

2.4.4 JERARQUIA DE OPERADORES

Es necesario ser cuidadosos con el significado de expresiones tales como a + b * c, dependiendo de lo


que se desee hacer

(a + b) * c
o
a + (b * c)

Todos los operadores tienen una prioridad, los operadores de mayor prioridad son evaluados antes que los
que tienen menor prioridad. Los operadores que tienen la misma prioridad son evaluados de izquierda a
derecha, por lo que:

a - b - c
es evaluado como
(a - b) - c

La tabla siguiente muestra la precedencia asignada a los operadores, éstos son listados en orden de
precedencia.

Los operadores en la misma fila tienen igual precedencia

32 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

Jerarquia de operadores

Operador Notas

[] () Los corchetes se utilizan para los arreglos

++ -- ! ~ ! es el NOT lógico y ~ es el complemento de bits

new (tipo)expr new se utiliza para crear instancias de clases

* / % Multiplicativos

+- Aditivos

<< >> >>> Corrimiento de bits

< > <= >= Relacionales

== != Igualdad

& AND (entre bits)

^ OR exclusivo (entre bits)

| OR inclusivo (entre bits)

&& AND lógico

|| OR lógico

?: Condicional

= += -= *= /= %= &= ^= |= <<= >>= >>>= Asignación

Todos los operadores binarios que tienen la misma prioridad (excepto los operadores de asignación) son
evaluados de izquierda a derecha.

Los operadores de asignación son evaluados de derecha a izquierda.

De acuerdo a lo anterior, la siguiente expresión:

a < 10 && 2 * b < c

Es interpretada como:

(a < 10) && ( (2 * b) < c )

33 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

2.5 EXPRESIONES BASICAS

2.5.1 INSTRUCCIONES DE ASIGNACION ENTRADA Y SALIDA

A diferencia de otros lenguajes, C no dispone de sentencias de entrada/salida. En su lugar se utilizan


funciones contenidas en la librería estándar y que forman parte integrante del lenguaje.

Las funciones de entrada/salida son un conjunto de funciones, incluidas con el compilador, que permiten a un
programa recibir y enviar datos al exterior. Para su utilización es necesario incluir, al comienzo del programa,
el archivo <stdio.h> en el que están definidos sus prototipos.

2.5.1.1 Entrada por consola

La Entrada por consola se refiere a las operaciones que se producen en el teclado (entrada estandar) del PC.

Funciones para leer un carácter:

getche( ): Lee un carácter del teclado haciendo eco en pantalla.


La función espera hasta que se pulse una tecla.

getch( ): Igual que getche() pero sin hacer eco en pantalla.

gets(): Lee una cadena de caracteres introducida por teclado.


La función espera hasta que se pulse ENTER.

2.5.1.2 Entrada por consola con formato

La función scanf() (scan-format, analizar con formato), en realidad representa a una familia de funciones que
analizan una entrada de datos con formato y cargan el resultado en los argumentos que se pasan por
referencia a dicha función o funciones:

La función scanf(); Lee los datos de entrada en el stdin (flujo de entrada estándar).

scanf caracteres, los interpretan según un formato, y almacenan los resultados en sus argumentos. Cada uno
cuenta con varios argumentos: por un lado, un formato de la secuencia del control (se describe más abajo),
por otro, un sistema de argumentos del indicador que señala dónde la entrada convertida debe ser
almacenada.

Sintaxis: scanf (“formato”,& variable);

Ejemplo: scanf (“%d”,&num);

En la lectura que se lleva a cabo a través del scanf, se indica el tipo de dato a leer mediante los specificadores
de formato, así como la variable donde almacenar la lectura (entrada).

34 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

Los formatos básicos son:

%d Entero %f Flotante %c Caracter


%ld Entero largo %lf Double %s Cadena de caracteres

Todas las lecturas mediante scanf llevan asociadas la utilización el operador &(dirección) precediendo a la
variable donde se lee,

excepto en las lecturas de cadenas de caracteres.

Ejemplos: scanf(“%c”,&h); scanf(“%i”,&i); scanf(”%s”,t);

2.5.1.3 Salida por consola

La Salida por consola se refiere a las operaciones que se producen en pantalla (salida estandar) del PC.

putchar( ): Imprime un carácter en pantalla en la posición del cursor.

puts(): Imprime una cadena de caracteres en pantalla.

2.5.1.4 Entrada por consola con formato

función printf (print formatted), para mostrar una cadena con formato.Estas funciones son printf( ), y scanf( ).
El término con

printf(): Imprime una cadena de datos en pantalla

su utilización básica es de la forma:

printf(salida1,salida2, ...) ; donde salidaX puede estar constituida por :

- caracteres que se mostrarán en la pantalla.


-órdenes de formato: definen la forma en que se muestran los argumentos posteriores. Una orden de formato
empieza con un signo de porcentaje y va seguido por el código del formato
- argumentos: expresiones compuestas por Variables o constantes.

Ejemplo: printf(“El valor es %d y su cuadrado es %d” ,j, j*j);

Debe haber el mismo nº de argumentos que de órdenes de formato y deben aparecer en el mismo orden.

Por ejemplo: printf(“Hola %c %d %s”, ‘c’, 10, “qué tal!”);

Formatos básicos
%d Entero %f Flotante %c Caracter
%ld Entero largo %lf Double %s Cadena de caracteres

35 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

2.5.2 EXPRESIONES ARITMETICAS

En informática y lenguajes de programación, se entiende por expresión aritmética a aquella donde


los operadores que intervienen en ella son numéricos, el resultado es un número y los operadores son
aritméticos. Los operadores aritméticos más comúnmente utilizados son: + , - , * , / y %.

El signo más (+) se emplea para adicionar dos valores, el signo menos (-) para restar un valor de otro, el
asterisco (*) para multiplicar dos valores, la división (/) para dividir un valor por otro, y el signo % para obtener
el resto de una división entera. Estos símbolos se conocen como operadores binarios, pues operan sobre dos
valores o variables.

La lista siguiente son ejemplos de expresiones aritméticas:

resultado = x - y;

total = capital+ interés;

cuadrado = x * x;

celcius = (fahrenheit - 32) / 1.8;

Hay que comprender que el signo igual (=) en las expresiones anteriores se le conoce como "operador de
asignación". Asigna el valor de la derecha de dicho signo igual a la variable de la izquierda.

En la última expresión, se utilizan paréntesis () para realizar primero cierta operación. Esto sucede porque
en C, los operadores siguen unas reglas de preferencia. *, / y % tienen preferencia sobre + y -. Para soslayar
esta preferencia, se deben utilizar paréntesis. Las expresiones con operadores de la misma preferencia se
suelen evaluar de izquierda a derecha.

2.5.3 FUNCIONES MATEMATICAS

Las funciones más importantes relacionadas con las matemáticas que se pueden encontrar en un compilador
estándar de C son las que aparecen en la tabla siguiente. Recuerda que debes poner #include <math.h> al
principio en tu programa.

En todas estas funciones se espera que los argumentos sean de tipo double, y el resultado también es de ese
tipo. Los argumentos de estas funciones (a y b) pueden ser expresiones más o menos complejas (que pueden
incluir llamadas a otras funciones).

36 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

Función Descripción
cos(a) Coseno del ángulo a (expresado en radianes)
sin(a) Seno de a
tan(a) Tangente de a
acos(a) Arcocoseno de a
asin(a) Arcoseno de a
atan(a) Arcotangente de a
atan2(a,b) Arcotangente de a / b
exp(a) El valor del número e elevado a
alog(a) Logaritmo neperiano de a
log10(a) Logaritmo en base 10 de a
pow(a,b) El valor de a elevado a b
sqrt(a) Raiz cuadrada de a
abs(a) El valor absoluto de a (para int)
fabs(a) El valor absoluto de a (para double)
floor(a) El valor entero por debajo de a
ceil(a) El valor entero por encima de a
rint(a) El valor entero más cercano a a

37 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

UNIDAD 3

ESTRUCTURAS DE CONTROL DE SELECCIÓN

38 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

3. ESTRUCTURAS DE CONTROL DE SELECCIÓN

En C se ejecuta una sentencia detrás de otra en el orden en el que éstas aparecen en el código fuente, a
menos que una sentencia de control de flujo cambie ese orden. Estas sentencias se basan en la evaluación
De una prueba condicional que determina la acción a realizar (valor cierto o falso).
.

Los operadores relaciones binarios que se usan son:

< Menor que


<= Menor Igualque
> Mayor que
>= Mayor igual que
== Exactamente Igual
!= Diferente

Los operadores lógicos binarios:

|| OR
&& AND

y el operador lógico unario de negación !, que sólo toma un argumento.

! NOT

Los operadores anterior son usados con las siguientes estructuras que se muestran.

Una sentencia en C es una expresión (combinación de operadores y operandos).

Una sentencia compuesta o bloque es un grupo de sentencias agrupadas entre llaves { y }. Las llaves { y } son
empleadas para agrupar declaraciones y sentencias dentro de una sentencia compuesta o bloque, de modo
que son sintácticamente equivalentes a una sentencia simple

Las tres formas como se puede emplear la estructura de selección ( if ):

3.1 SELECCION SENCILLA


Evalúa una condición, si esta es verdadera ejecuta la acción o acciones especificadas, si es falsa no realiza
ninguna acción.

Nota: Si existe sola una instrucción o sentencia dentro de la condición no es necesario formar bloque con las
llaves { }.

39 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

SINTAXIS:

if (condicion)
sentencia;

EJEMPLO:

if (promedio < 60)


printf (“REPROBADO”);

if (promedio >= 60)


printf (“APROBADO”);

3.2SELECCION DOBLE
Evalúa una condición, si esta es verdadera ejecuta la acción o acciones especificadas, si es falsa ejecuta otra
acción o acciones.

Nota: Si existe sola una instrucción o sentencia dentro de la condición no es necesario formar bloque con las
llaves { }.

SINTAXIS:

if (condicion)
sentencia1;
else
sentencia2;

EJEMPLO:

if (promedio >= 60)


printf (“APROBADO”);
else
printf (“REPROBADO”);

40 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

3.3 CONDICION MULTIPLE

Aunque con la estructura if ... else if se pueden realizar comprobaciones múltiples, en ocasiones no es muy
elegante, ya que el código puede ser difícil de seguir y puede confundir incluso al autor transcurrido un tiempo.
Por lo anterior, C tiene incorporada una sentencia de bifurcación múltiple llamada switch. Con esta sentencia,
la computadora comprueba una variable sucesivamente frente a una lista de constantes enteras o de caracter.
Después de encontrar una coincidencia, la computadora ejecuta la sentencia o bloque de sentencias que se
asocian con la constante. La forma general de la sentencia switch es:

SINTAXIS:

switch (variable)
{
case constante1:
secuencia de sentencias
break;
case constante2:
secuencia de sentencias
break;
case constante3:
secuencia de sentencias
break;

default:
secuencia de sentencias
}

Donde la computadora ejecuta la sentencia default si no coincide ninguna constante con la variable, esta
última es opcional. Cuando se encuentra una coincidencia, la computadora ejecuta las sentencias asociadas
con el case hasta encontrar la sentencia break con lo que sale de la estructura switch.

Las limitaciones que tiene la sentencia switch ... case respecto a la estructura if son:

 Sólo se tiene posibilidad de revisar una sola variable.


 Con switch sólo se puede comprobar por igualdad, mientras que con if puede ser con cualquier
operador relacional.
 No se puede probar más de una constante por case.

La forma como se puede simular el último punto, es no teniendo sentencias asociados a un case, es decir,
teniendo una sentencia nula donde sólo se pone el caso, con lo que se permite que el flujo del programa caiga
al omitir las sentencias, como se muestra a continuación:

41 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
EJEMPLO:

switch (letra)
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
numvocales++;
break;

case ' ':


numesp++;
break;

default:
numotras++;
break;
}

3.4 ANIDACION

El flujo lógico de esta estructura es de arriba hacia abajo. La primera sentencia se ejecutará y se saldrá de la
estructura if si la primera condición es verdadera. Si la primera condición fue falsa, y existe otra condición, se
evalúa, y si la condición es verdadera, entonces se ejecuta la sentencia asociada. Si existen más condiciones
dentro de la estructura if, se van evaluando éstas, siempre y cuando las condiciones que le precedan sean
falsas.

La sentencia que esta asociada a la palabra reservada else, se ejecuta si todas las condiciones de la
estructura if fueron falsas.

SINTAXIS:

if (condicion1)
sentencia1;
else
{
if (condicion2)
sentencia2;
else
sentencian;
}

EJEMPLO:

if (promedio < 60)


printf (“REPROBADO”);
else
{
If (promedio == 100 )
printf (“EXCELENTE”);
else
printf (“APROBADO”);
}

42 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

UNIDAD 4

ESTRUCTURAS DE CONTROL DE
ITERACION

43 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

4.- ESTRUCTURAS DE CONTROL DE ITERACION

4.1 TEORIA DE CICLOS

4.1.1 DEFINICION

Un bucle o ciclo, en programación, es una sentencia que se realiza repetidas veces a un trozo aislado de
código, hasta que la condición asignada a dicho bucle deje de cumplirse.

Generalmente,un bucle es utilizado para hacer una acción repetida sin tener que escribir varias veces el
mismo código, lo que ahorra tiempo, deja el código más claro y facilita su modificación en el futuro.

Las estructuras de repetición nos permiten iterar el flujo de ejecución de un programa dentro de un
determinado bloque de sentencias mientras se verifique una determinada condición o expresión.

Todos los ciclos se repiten o ejecutan las acciones cuando la condición que controla el ciclo sea verdadera,
es aquí la importancia de enfocar nuestra lógica de programación a que se cumpla la condición del ciclo para
que se repita la cantidad de veces que deseamos (controlado por contador), o se salga al suceder un evento
especifico (controlado por bandera) .

4.1.1 CONTADORES

Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que
se produce un determinado suceso o acción. Los contadores se utilizan con la finalidad de contar sucesos o
acciones internas de un bucle; deben realizar una operación de inicialización y posteriormente las sucesivas
de incremento o decremento del mismo. La inicialización consiste en asignarle al contador un valor inicial. Se
situará antes y fuera del bucle.

Ejemplo de contadores

• Cada vez que alguien es atendido en la taquilla de un banco se puede almacenar en un


contador de personas atendidas.

• Cada vez que se vende una entrada a un juego de béisbol se puede almacenar en un
contador de entradas vendidas.

• Cada vez que se registra un nuevo usuario en una página web se puede almacenar en un
contador de usuarios registrados.

Los contadores pueden ser de incremento o de decremento, por lo tanto en la siguiente tabla se muestra por
columna como seria un incremento o decremento y sus equivalente por columna, asi que si se desea
incrementar de uno en uno un contador cualquiera de las 4 expresiones de la columna 1 son correcta.

incremento y decremento y incremento y decremento y


equivalentes equivalentes equivalentes equivalentes
i++; i--; i=i+2; i=i-2;
++i; --i; i+=2 i-=2;
i=i+1; i=i-1;
i+=1; I-=1;

IMPORTANTE: Los contadores se deben inicializar antes de usarce, de esta forma aseguramos que nos
arroje un valor correcto.

Ejemplo: i=0; o i=50;

44 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
4.1.2 ACUMULADOR O TOTALIZADOR

Es una variable que suma sobre sí misma un conjunto de valores para de esta manera tener la suma de todos
ellos en una sola variable. La diferencia entre un contador y un acumulador es que mientras el primero va
aumentando de uno en uno o un valor fijo, el acumulador va aumentando en una cantidad variable.

Ejemplos de acumuladores

• La cantidad de dinero depositado en una cuenta de ahorros en el lapso de un mes se pudiera


almacenar en un acumulador de depósitos.

• La cantidad de estudiantes de todos los salones de clases pudiera almacenarse en un


acumulador de cantidad de estudiantes de cada sección.

• La suma de los habitantes cada uno de los estados del país se pudiera guardar en el
acumulador llamado total habitantes del país.

Los acumuladores pueden ser de incremento o de decremento, por lo tanto en la siguiente tabla se muestra
por columna como seria un incremento o decremento y sus equivalente por columna, asi que si se desea
incrementar un acumulador cualquiera de las expresiones de la columna 1 son correcta.

incremento y decremento y
equivalente equivalente
suma=suma+num; total=total-num;
suma+=num; total-=num;

IMPORTANTE: Los acumuladores se deben inicializar antes de usarce, de esta forma aseguramos que nos
arroje un valor correcto.

Ejemplo: suma=0; o suma=50;

4.1.3 BANDERA o CENTINELA

Una bandera, también denominada interruptor o conmutador es una variable que puede tomar uno de dos
valores (verdadero o falso) a lo largo de la ejecución del programa y permite comunicar información de que
sucedió o no un evento especifico. Son muy usadas las banderas en ciclos para dar pr teminado el bucle al
cumplirse una condición especifica y dar por terminada el bucle.

negativo = 0;
If (num < 0)
{
negativo=1;
}

IMPORTANTE: Las banderas al igual que los contadores y acumuladores se debe inicializar antes de
usarce, de esta forma aseguramos que que contenga un valor falso o verdadero (1,0) al entrar al ciclo, según
se necesite.

Debido que en C no existe los tipos de datos boleanos se puede usar contantes que se llame FALSE y
TRUE, asignarlo a la bandera quedando mas legible el código.

Ejemplo:
#define TRUE 1 // o const int TRUE=1;
#defina FALSE 0 // o const int FALSE=0;

bandera=TRUE;

45 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

4.2 TIPOS DE CICLOS

En C se manejan dos tipos de repeticiones, la repetición controlada por un contador que se le conoce
comúnmente como repetición definidao o controlado por contador, ya que antes de que inicie la ejecución del
ciclo, el número de iteraciones es conocido. Y la repetición controlada por un centinela que se conoce a
menudo como repetición indefinida, debido a que el número de iteraciones no es conocido.

4.2.1 CICLOS CONTROLADOS POR CONTADOR

Este tipo de ciclo se usa cuaando, sabemos el número de veces que se tiene que repetir una misma acción o
bloque de acciones. Por lo tanto sabemos donde deberá iniciar nuestro contador y donde terminara. En C
este tipo de estructura es for (; ;) a continuación mostramos su sintaxis.

SINTAXIS for

for ( expresion1; expresion2; expresion3)


sentencia;

o { bloque de sentencias }

Donde:
expresion1 se usa para realizar la inicialización de variables, usando una o varias sentencias, si se usan
varias sentencias deberá usarse el operador , para separarlas. Por lo general, establece el valor de la variable
de control del ciclo. ( i=0; )

expresion2 se usa para la condición entre al ciclo la cantidad de veces que se desee, recordando que los
ciclos se repiten cuando esta condición es verdadera. ( i < 10; )

expresion3 es el modificador a la variable de control del ciclo cada vez que la computadora lo repite, pero
también puede ser más que un incremento. ( i++ )

EJEMPLO:

int i;

int main()
{
for( i=0; i< 10; i++)
{
printf("i=%d\n",i);
}
system(“PAUSE”);
return 0;
}

46 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

Las siguientes sentencias for son válidas en C.

EJEMPLO 1:

for ( i=0; ( (i>3) && (j<9) ); i++ )

EJEMPLO 2:

for ( i=0, j=4; ( (i>3) && (i<9) ); i++, j+=2)

EJEMPLO 3:

for ( i=0, j=4, k=4000; k; k/=10)

En el segundo y tercer ejemplo se muestra la forma como múltiples expresiones pueden aparecer, siempre y
cuando estén separadas por una coma.

4.2.2 CICLOS CONTROLADOS POR CENTINELA

Los ciclos controlados por centinela, primero evalúa la condición, si da como resultado verdadera realiza la
acción, luego vuelve a evaluar la condición, si su resultado es falso, se sale del ciclo y continúa con la
ejecución del programa. Hay que tener mucho cuidado, cuando trabajamos con ciclos, ya que podemos caer
en un ciclo infinito, es decir que nunca se sale de él. Lo cual no es un error de sintaxis sino de lógica. Por lo
cual en las acciones debemos siempre colocar algo que haga que se modifique el resultado de la condición, lo
cual puede ser una bandera, un contador o un acumulador. La sentencia en C es while ( ) { },
acontinuacion la sintaxis.

SINTAXIS while

while ( expresion)
{
sentencia;
}

Donde sentencia puede ser una sentencia vacía, una sentencia única o un bloque de sentencias que se
repetirán. Cuando el flujo del programa llega a esta instrucción, primero se revisa si la condición es verdad
para ejecutar la(s) sentencia(s), y después el ciclo while se repetirá mientras la condición sea verdadera.
Cuando llega a ser falsa, el control del programa pasa a la línea que sigue al ciclo.

EJEMPLO:

int main()
{
char op,i;
op=’s’;
while ( op ==’s’)
{
printf (“Quieres continuar s/n ”);
fflus(stdin);
scanf(“%c”,&op); // op funciona como bandera

}
}

47 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

De lo anterior, se tiene que tanto el ciclo for, como el ciclo while comprueban la condición en lo alto del
ciclo, por lo que el código dentro del ciclo no se ejecuta siempre.

A continuación mostramos otro ejemplo:

int main()
{
int x=3;

while( x>0 )
{
printf("x = %d\n", x);
x--;
}
return 0;
}

que genera la siguiente salida en pantalla:

x = 3
x = 2
x = 1

Como se observa, dentro del ciclo tenemos más de una sentencia, por lo que se requiere usar la llave abierta
y la llave cerrada { ... } para que el grupo de sentencias sean tratadas como una unidad.

Como el ciclo while pueda aceptar también expresiones, y no solamente condiciones lo siguiente es válido:

while ( x-- ){ }

while ( x = x + 1 ) { }

while ( x += 5 ){ }

Si se usan este tipo de expresiones, solamente cuando el resultado de x--, x=x+1 o x+=5 sea cero,
la condición fallará y se podrá salir del ciclo.

48 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

4.2.3 LA SENTENCIA do-while

Al contrario de los ciclos for y while que comprueban la condición en lo alto del bucle, el bucle do { }
while ( ); la examina en la parte baja del mismo. Esta característica provoca que un ciclo do {} while
siempre se ejecute al menos una vez.

SINTAXIS:

do{
sentencia;
}while (condición);

Aunque no son necesarias las llaves cuando sólo está presente una sentencia, se usan normalmente por
legibilidad y para evitar confusión (respecto al lector, y no del compilador) con la sentencia while.

EJEMPLO:

int main()
{
int num;

do
{
scanf("%d", &num);
} while ( num >100 );

return 0;
}

En el siguiente programa se usa un ciclo do ... while para leer números desde el teclado hasta que uno
de ellos es menor que o igual a 100:

Otro uso común de la estructura do ... while es una rutina de selección en un menú, ya que siempre se
requiere que se ejecute al menos una vez,es un ciclo indeterminado por que no se sabe la cantidad de veces
que se realizara, el ciclo se repetirá hasta que el usuario presione la opción 4 (salir)

49 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
int main()
{
int opc;

do
{ system (“CLS”);
printf("1. Derivadas\n");
printf("2. Limites\n");
printf("3. Integrales\n");
printf("4. Salir\n");
printf(" Teclear una opcion: ");
scanf("%d", &opc);

switch (opc)
{
case 1:
printf("\tOpcion 1 seleccionada\n\n");
break;
case 2:
printf("\tOpcion 2 seleccionada\n\n");
break;
case 3:
printf("\tOpcion 3 seleccionada\n\n");
break;
default:
}
} while( opc != 4);

return 0;
}

Se muestra un ejemplo donde se reescribe usando do ... while uno de los ejemplos ya mostrados.

int main()
{
int x=3;

do
{
printf("x = %d\n", x--);
}
while( x>0 ) ;
return 0;
}

50 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
4.2.3 ANIDACION

Un ciclo anidado es un ciclo que contiene otro ciclo. En C tenemos 3 ciclos diferentes el ciclo while, do_while y
for, estos ciclos se pueden anidar uno en otro ya sea el mismo ciclo o uno diferente. C permite 15 niveles de
anidación, cuando se anida un ciclo dentro de otro siempre se terminan de realizar primero el ciclo que esta
más anidado, por ejemplo en caso de que anidáramos dentro de un ciclo do while a un ciclo for, el ciclo for se
terminaría primero.
El ejemplo mas claro de un ciclo anidado es un reloj, donde se necesita un ciclo para las Horas, otro ciclo para
los minutos, y otro para los segundos.

SINTAXIS:

for ( ; ; )
{
for ( ; ; )
{
Sentencia;
}
}

Este es un ejemplo de ciclo anidado con for, pero se puede realizar con cualqueira de los 3 ciclos incluso
conbinando for con do while etc.

EJEMPLO:

for ( i=1; i<=10 ;i++ ) i=1; i=1;


{ while ( i<=10 ) do {
for (j=1 ;j<=10 ;j++ ) { j=1;
{ j=1; do{
r=i*j; while( j<=10 ) r=i*j;
printf(“%d * %d= %d”,i,j,r); { printf(“%d * %d= %d”,i,j,r);
} r=i*j; j++;
system(“PAUSE”); printf(“%d * %d= %d”,i,j,r); }while( j<=10 );
} j++; i++;
} system(“PAUSE”);
i++; }while ( i<=10 );
system(“PAUSE”);
}

En los siguientes ejemplos son 3 formas de anidar los diferentes tipos de ciclos, recordando que también se
pueden combinar. En esta ocasión estos ejemplos imprimen las tablas de multiplicar del 1 al 10.

51 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

TEMA 5

Arreglos y cadenas

52 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

5. Arreglos y cadenas
En el siguiente capítulo se presentan los arreglos y las cadenas. Las cadenas se consideran como un arreglo
de tipo char.

5.1 Cadenas

A diferencia de otros lenguajes de programación que emplean un tipo denominado cadena string para
manipular un conjunto de simbolos, en C, se debe simular mediante un arreglo de caracteres, en donde la
terminación de la cadena se debe indicar con nulo. Un nulo se especifica como '\0'. Por lo anterior, cuando
se declare un arreglo de caracteres se debe considerar un carácter adicional a la cadena más larga que se
vaya a guardar. Por ejemplo, si se quiere declarar un arreglo cadena que guarde una cadena de diez
caracteres, se hará como:

char cadena[11];

Se pueden hacer también inicializaciones de arreglos de caracteres en donde automáticamente C asigna el


caracter nulo al final de la cadena, de la siguiente forma:

char nombre_arr[ tam ]="cadena";

Por ejemplo, el siguiente fragmento inicializa cadena con ``hola'':

char cadena[5]="hola";

El código anterior es equivalente a:

char cadena[5]={'h','o','l','a','\0'};

5.1.1 LECTURA Y ESCRITURA

Para asignar la entrada estándar a una cadena se puede usar la función scanf con la opción %s (observar que
no se requiere usar el operador &), de igual forma para mostrarlo en la salida estándar.

EJEMPLO:

int main()
{
char nombre[15], apellidos[30];

printf("Introduce tu nombre: ");


scanf("%s",nombre);
printf("Introduce tus apellidos: ");
scanf("%s",apellidos);
printf("Usted es %s %s\n",nombre,apellidos);

53 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

El lenguaje C no maneja cadenas de caracteres, como se hace con enteros o flotantes, por lo que lo
siguiente no es válido:

int main()
{
char nombre[40], apellidos[40], completo[80];

nombre="José María"; /* Ilegal */


apellidos="Morelos y Pavón"; /* Ilegal */
completo="Gral."+nombre+appellidos; /* Ilegal */
}

Si bien las cadenas se pueden leer con la sentencia scanf no es lo mas correcto ya que al presionar la tecla
espacio se da por aceptada toda la cadena, la forma correcta en C es usar la sentencia gets, para lo que se
debe sar la librería <string.h>

LECTURA DE UNA CADENA:

SINTAXIS:

fflush(stdin);
gets (cadena);

Para usar la sentencia gets no solo se debe usar la librería <string.h> se debe anteponer la sentencia
fflush(stdin) , para limpiar el buffer de memoria y permita capturar la cadena correctamente.

EJEMPLO:

int main()
{
char nombreCompleto[60];

printf("Introduce tu nombre con apellidos: ");


fflush(stdin);
gets(nombreCompleto);
printf("Usted es %s \n",nombreCompleto);
return 0;
}

Salida de cadenas:

Para Imprimir una cadena existen 2 formas en C, una es salida sin formato y la salida formateada.

SINTAXIS:

Salidas sin formato: puts(cadena);

Salida con formato printf(“ %s”, cadena );

54 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

EJEMPLO:

int main()
{
char nombreCompleto[60];
printf("Introduce tu nombre con apellidos: ");
fflush(stdin);
gets(nombreCompleto);
printf("Usted es %s \n",nombreCompleto); //salida formateada
puts(nombreCompleto); //salida Sin formato
return 0;
}

5.1.2 ASIGNACION DE CADENAS

Podemos reflejar todo el contenido de una cadena a otra, en otras palabras la copiamos tal cual, para esto
utilizamos la función strcpy.

SINTAXIS

strcpy( cadenaDestino, cadenaOrigen );

Todo el contenido de la cadenaOrigen se copia a la cadenaDestino, si esta última tuviera algún valor este se
borra.

EJEMPLO

#include <string.h>

int main()
{
char nombreCompleto[60],alumno[50];
printf("¿Cuál es tu nombre? “);
fflush(stdin);
gets(nombreCompleto);
printf("Usted es %s \n",nombreCompleto);
strcpy(alumno, nombreCompleto);
//Se asigna la cadena nombreCompleto a la cadena alumno
printf("Alumno: %s \n",alumno);
return 0;
}

55 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

5.1.3 COMPARACIÓN DE CADENAS

Para saber si dos cadenas son exactamente iguales utilizamos la función strcmp.

SINTAXIS

strcmp ( cadena1, cadena2 );

Esta función devuelve un valor de acuerdo al resultado de la comparación.

DEVUELVE:

0 si la dos cadenas son exactamente iguales


Mayor a 0 si la cadena1 es mayor a la cadena2
Menor a 0 si la cadena1 es menor que la cadena2

EJEMPLO

#include <string.h>
int main()
{
char password[30], rePassword[30];
int resultado;
printf(“Escribe tu contraseña ");
fflush(stdin);
gets(password);
printf(“Escribe tu contraseña ");
fflush(stdin);
gets(rePassword);
resultado = strcmp(password, rePassword);
if ( resultado == 0 )
printf("La contraseña es aceptada");
else
printf("La contraseña no coincide");
return 0;
}

5.2 ARREGLOS UNIDIMENSIONALES

Los arreglos son una colección de variables del mismo tipo que se referencian utilizando un nombre común.
Un arreglo consta de posiciones de memoria contigua. La dirección más baja corresponde al primer elemento
y la más alta al último. Un arreglo puede tener una o varias dimensiones. Para acceder a un elemento en
particular de un arreglo se usa un índice.

SINTAXIS

tipo nombre_arr [ tamaño ]

56 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

Declaración de un arreglo de enteros llamado listanum con diez elementos se hace de la siguiente forma

EJEMPLO

int listanum[10];

En C, todos los arreglos usan cero como índice para el primer elemento. Por tanto, el ejemplo anterior declara
un arreglo de enteros con diez elementos desde listanum[0] hasta listanum[9].

La forma como pueden ser accesados los elementos de un arreglo, es de la siguiente forma:

listanum[2] = 15; /* Asigna 15 al 3er elemento del arreglo listanum*/


num = listanum[2]; /* Asigna el contenido del 3er elemento a la variable
num */

El lenguaje C no realiza comprobación de contornos en los arreglos. En el caso de que sobrepase el final
durante una operación de asignación, entonces se asignarán valores a otra variable o a un trozo del código,
esto es, si se dimensiona un arreglo de tamaño N, se puede referenciar el arreglo por encima de N sin
provocar ningún mensaje de error en tiempo de compilación o ejecución, incluso aunque probablemente se
provoque el fallo del programa. Como programador se es responsable de asegurar que todos los arreglos
sean lo suficientemente grandes para guardar lo que pondrá en ellos el programa.

INICIALIZACION DE ARREGLOS UNIDIMENSIONALES

SINTAXIS:
tipo nombre_arr[ tam1 ] = {lista-valores};

EJEMPLO:
int i[10] = {1,2,3,4,5,6,7,8,9,10};

5.3 ARREGLOS MULTIDIMENSIONALES

C permite arreglos con más de una dimensión, el formato general es:

SINTAXIS:

tipo nombre_arr [ tam1 ][ tam2 ] ... [ tamN];

Un arreglo de enteros bidimensionales se escribirá como:

EJEMPLO:
int tabladenums[50][50];

Observar que para declarar cada dimensión lleva sus propios paréntesis cuadrados.

57 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
Para acceder los elementos se procede de forma similar al ejemplo del arreglo unidimensional, esto es,

tabladenums[2][3] = 15; /* Asigna 15 al elemento de la 3ª fila y la 4ª


columna*/
num = tabladenums[25][16];

A continuación se muestra un ejemplo que asigna al primer elemento de un arreglo bidimensional cero, al
siguiente 1, y así sucesivamente.

int main()
{
int t,i,num[3][4];

for(t=0; t<3; ++t)


{
for(i=0; i<4; ++i)
{
num[t][i]=(t*4)+i*1;
}
}

for(t=0; t<3; ++t)


{
for(i=0; i<4; ++i)
{
printf("num[%d][%d]=%d ", t,i,num[t][i]);
}
printf("\n");
}
return 0;
}

INICIALIZACION DE ARREGLOS MULTIDIMENSIONALES

SINTAXIS:
tipo nombre_arr[ tam1 ][ tam2 ] ... [ tamN] = {lista-valores};

EJEMPLO:
int num[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

58 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

TEMA 6

Funciones

59 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
6. Funciones

Una función es un conjunto de declaraciones, definiciones, expresiones y sentencias que realizan una tarea
específica.

El formato general de una función en C es

especificador_de_tipo nombre_de_función ( lista_de_parámetros )


{
variables locales
código de la función
}

El especificador_de_tipo indica el tipo del valor que la función devolverá mediante el uso de return. El
valor puede ser de cualquier tipo válido. Si no se específica un valor, entonces la computadora asume por
defecto que la función devolverá un resultado entero. No se tienen siempre que incluir parámetros en una
función, la lista de parámetros puede estar vacía.

Las funciones terminan y regresan automáticamente al procedimiento que las llamó cuando se encuentra la
última llave }, o bien, se puede forzar el regreso antes usando la sentencia return. Ademas del uso
señalado la función return se usa para devolver un valor.

Se examina a continuación un ejemplo que encuentra el promedio de dos enteros:

//**********************************************************
float encontprom(int num1, int num2); //PROTOTIPO de la funcion

//****************************************************
int main()
{
int a=7, b=10;
float resultado;

resultado = encontprom(a, b);


printf("Promedio=%f\n",resultado);
system (“PAUSE”);
return 0;
}

//***************************************************
float encontprom(int num1, int num2)
{
float promedio;
promedio = (float)(num1 + num2) / 2;
return promedio;
}
//****************************************************

60 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

6.1 Funciones void

Las funciones void dan una forma de emular, lo que en otros lenguajes se conocen como procedimientos.
Se usan cuando no requiere regresar un valor.

Se muestra un ejemplo que imprime los cuadrados del números del 1 al 10.

//*********************************************
void cuadrados(); //Prototipo de funcion

//********************************************
int main()
{
cuadrados(); // Llamada a función cuadrados
return 0;
}

//*************************************************
void cuadrados()
{
int contador;
system (“CLS”);
for( contador=1; contador<=10; contador++)
{
printf("%d\n",contador*contador);
}
system(“PAUSE”);
}
//***************************************************

En la función cuadrados no esta definido ningún parámetro, y por otra parte tampoco se emplea la sentencia
return para regresar de la función.

61 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
6.2 Funciones y arreglos

Cuando se usan un arreglo como un argumento a la función, se pasa sólo la dirección del arreglo y no la copia
del arreglo entero. Para fines prácticos podemos considerar el nombre del arreglo sin ningún índice como la
dirección del arreglo.

Considerar el siguiente ejemplo en donde se pasa un arreglo a la función imp_rev, observar que no es
necesario especificar la dimensión del arreglo cuando es un parámetro de la función.

//******************************************************
void cuadrados(int v[]); //prototipo de funcion

//******************************************************
int main()
{
int i, vector[10]={4,2,8,14,6,10,1,5,9,11};
printf(“Vector Original \n”);
for (i=0; i<10; i++)
{
printf (“%d \n”,vector[i]);
}

cuadrados(vector); //Llamada a funcion enviando vector como


//parametro
printf(“Vector Modificado \n”);
for (i=0; i<10; i++)
{
printf (“%d \n”,vector[i]);
}
return 0;
}

//***********************************************
void cuadrados(int v [])
{
int i;
for(i=0; i<10; i++))
{
v[i]=v[i]*v[i];
}
}
//************************************************

Observar que en la función imp_rev se usa la función strlen para calcular la longitud de la cadena sin
incluir el terminador nulo. Por otra parte, la función imp_rev no usa la sentencia return ni para terminar
de usar la función, ni para regresar algún valor.

Se muestra otro ejemplo,

62 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

//******************************************************
float enconprom(int tam, float lista []);

//******************************************************
int main()
{
float numeros[]={2.3, 8.0, 15.0, 20.2, 44.01, -3.0, -2.9};
printf("El promedio de la lista es %f\n", enconprom(7,numeros) );
return 0;
}

//******************************************************
float enconprom(int tam, float lista[])
{
int i;
float suma = 0.0;

for ( i=0; i<tam; i++)


{
suma += lista[i];
}
return (suma/tam);
}
//******************************************************

Para el caso de que se tenga que pasar un arreglo con más de una dimensión, no se indica la primera
dimensión pero, el resto de las dimensiones deben señalarse. Se muestra a continuación un ejemplo:

//******************************************************
void imprtabla(int tamx,int tamy, float tabla[][5])
{
int x,y;

for ( x=0; x<tamx; x++ )


{
for ( y=0; y<tamy; y++ )
{
printf("t[%d][%d]=%f",x,y,tabla[x][y]);
}
printf("\n");
}
}
//******************************************************

63 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
6.3 Prototipos de funciones

Antes de usar una función C debe tener conocimiento acerca del tipo de dato que regresará y el tipo de los
parámetros que la función espera.

El estándar ANSI de C introdujó una nueva (mejor) forma de hacer lo anterior respecto a las versiones previas
de C.

La importancia de usar prototipos de funciones es la siguiente:

 Se hace el código más estructurado y por lo tanto, más fácil de leer.


 Se permite al compilador de C revisar la sintaxis de las funciones llamadas.

Lo anterior es hecho, dependiendo del alcance de la función. Básicamente si una función ha sido definida
antes de que sea usada (o llamada), entonces se puede usar la función sin problemas.

Si no es así, entonces la función se debe declarar. La declaración simplemente maneja el tipo de dato que la
función regresa y el tipo de par^o'ametros usados por la función.

Es una práctica usual y conveniente escribir el prototipo de todas las funciones al principio del programa, sin
embargo esto no es estrictamente necesario.

Para declarar un prototipo de una función se indicará el tipo de dato que regresará la función, el nombre de la
función y entre paréntesis la lista del tipo de los parámetros de acuerdo al orden que aparecen en la definición
de la función. Por ejemplo:

int longcad(char []);

Lo anterior declara una función llamada longcad que regresa un valor entero y acepta una cadena como
parámetro.

64 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

ANEXO 1
MANEJO DE CADENAS

65 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

MANEJO DE CADENAS <string.h>


Recordando la presentación de arreglos hecha (capítulo 5) en donde las cadenas están definidas como un
arreglo de caracteres o un apuntador a una porción de memoria conteniendo caracteres ASCII. Una cadena
en C es una secuencia de cero o más caracteres seguidas por un caracter NULL o \0:

Es importante preservar el caracter de terminación NULL, ya que con éste es como C define y maneja las
longitudes de las cadenas. Todas las funciones de la biblioteca estándar de C lo requieren para una operación
satisfactoria.

En general, aparte de algunas funciones restringidas en longitud (strncat(), strncmp() y


strncpy()), al menos que se creen cadenas a mano, no se deberán encontrar problemas. Se deberán usar
las funciones para manejo de cadenas y no tratar de manipular las cadenas en forma manual desmantelando
y ensamblando cadenas.

FUNCIONES BÁSICAS PARA EL MANEJO DE CADENAS

Todas las funciones para manejo de cadenas tienen su prototipo en:

#include <string.h>

Las funciones más comunes son descritas a continuación:

char *strcpy(const char *dest, const char *orig)


Copia la cadena de caracteres apuntada por orig (incluyendo el carácter terminador '\0') al vector
apuntado por dest. Las cadenas no deben solaparse, y la de destino, debe ser suficientemente grande
como para alojar la copia.

int strcmp(const char *s1, const char *s2)


Compara las dos cadenas de caracteres s1 y s2. Devuelve un entero menor, igual o mayor que cero si
se encuentra que s1 es, respectivamente, menor que, igual a, o mayor que s2.

char *strerror(int errnum)


Devuelve un mensaje de error que corresponde a un número de error.

int strlen(const char *s)


Calcula la longitud de la cadena de caracteres.

char *strncat(char *s1, const char *s2, size_t n)


Agrega n caracteres de s2 a s1.

int strncmp(const char *s1, char *s2, size_t n)


Compara los primeros n caracteres de dos cadenas.

66 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
char *strncpy(const char *s1, const char *s2, size_t n)
Copia los primeros n caracteres de s2 a s1.

strcasecmp(const char *s1, const char *s2)


versión que ignora si son mayúsculas o minúsculas de strcmp().

strncasecmp(const char *s1, const char *s2, size_t n)


versión insensible a mayúsculas o minúsculas de strncmp()
que compara los primeros n caracteres de s1.

El uso de muchas funciones es directo, por ejemplo:

char *s1 = "Hola";


char *s2;
int longitud;

longitud = strlen("Hola"); /* long = 4 */


(void) strcpy(s2,s1);

Observar que tanto strcat() y strcopy() regresan una copia de su primer argumento, el cual es el
arreglo destino. Observar también que orden de los argumentos es arreglo destino seguido por arreglo fuente
lo cual a veces es una situación para hacerlo incorrectamente.

La función strcmp() compara lexicográficamente las dos cadenas y regresa:

 Menor que cero -- si s1 es léxicamente menor que s2;


 Cero -- si s1 y s2 son léxicamente iguales;
 Mayor que cero -- si s1 es léxicamente mayor que s2;

Las funciones de copiado strncat(), strncmp() y strncpy() son versiones más restringidas que sus
contrapartes más generales. Realizan una tarea similar, pero solamente para los primeros n caracteres.
Observar que el caracter de terminación NULL podría ser violado cuando se usa estas funciones, por ejemplo:

char *s1 = "Hola";


char *s2 = 2;
int longitud = 2;

(void) strncpy(s2, s1, longitud); /* s2 = "Ho" */

donde s2 no tiene el terminador NULL.

67 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

BÚSQUEDA EN CADENAS

La biblioteca también proporciona varias funciones de búsqueda en cadenas.

char *strchr(const char *s, int c)


Devuelve un puntero a la primera ocurrencia del carácter c en la cadena de caracteres s.

char *strrchr(const char *s, int c)


Encuentra la última ocurrencia del caracter c en la cadena.

char *strstr(const char *s1, const char *s2)


Localiza la primera ocurrencia de la cadena s2 en la cadena s1.

char *strpbrk(const char *s1, const char *s2)


Regresa un apuntador a la primera ocurrencia en la cadena s1 de cualquier carácter de la cadena s2, o
un apuntador nulo si no hay un caracter de s2 que exista en s1.

size_t strspn(const char *s1, const char *s2)


Calcula la longitud del segmento inicial de s1 que consta únicamente de caracteres en s2.

size_t strcspn(const char *s1, const char *s2)


Regresa el número de caracteres al principio de s1 que no coinciden con s2.

char *strtok(char *s1, const char *s2)


Divide la cadena apuntada a s1 en una secuencia de ``tokens'', cada uno de ellos esta delimitado por uno
o más caracteres de la cadena apuntada por s2.

Las funciones strchr() y strrchr() son las más simples de usar, por ejemplo:

char *s1 = "Hola";


char *resp;

resp = strchr(s1,'l');

Después de la ejecución, resp apunta a la localidad s1 + 2.

La función strpbrk() es una función más general que busca la primera ocurrencia de cualquier grupo de
caracteres, por ejemplo:

char *s1 = "Hola";


char *resp;

res = strpbrk(s1,"aeiou");

En este caso, resp apunta a la localidad s1 + 1, la localidad de la primera o.

68 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

La función strstr() regresa un apuntador a la cadena de búsqueda especificada o un apuntador nulo si la


cadena no es encontrada. Si s2 apunta a una cadena de longitud cero (esto es, la cadena ""), la función
regres s1. Por ejemplo:

char *s1 = "Hola";


char *resp;

resp = strstr(s1,"la");

la cual tendrá resp = s1 + 2.

La función strtok() es un poco más complicada en cuanto a operación. Si el primer argumento no es


NULL entonces la función encuentra la posición de cualquiera de los caracteres del segundo argumento. Sin
embargo, la posición es recordada y cualquir llamada subsecuente a strtok() iniciará en ésa posición si
en estas subsecuentes llamadas el primer argumento no es NULL. Por ejemplo, si deseamos dividir la cadena
s1 usando cada espacio e imprimir cada ``token'' en una nueva línea haríamos lo siguiente:

char s1[] = "Hola muchacho grande";


char *t1;

for ( t1 = strtok(s1," ");


t1 != NULL;
t1 = strtok(NULL, " ") )
printf("%s\n",t1);

Se emplea un ciclo for en una forma no regular de conteo:

 En la inicialización se llama a la función strtok() con la cadena s1.


 Se termina cuando t1 es NULL.
 Se esta asignando tokens de s1 a t1 hasta la terminación llamando a strtok() con el primer
argumento NULL.

69 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

ANEXO 2

Instalación de DevC++

70 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
Instalacion del IDE DevC++ Windows 7 y anteriores

1. Para La instalación de DevC++ descargar el


programa de la siguiente Liga.
http://sourceforge.net/projects/dev-cpp/files/Binaries/Dev-
C%2B%2B%204.9.9.2/devcpp-
4.9.9.2_setup.exe/download?use_mirror=iweb

2 Pasos para instalar DevC++


http://www.slideshare.net/16134817/cmo-instalar-dev-c

1. Versión: 4.9.9.2 Nuestro entorno para programar en C++


2. Una vez que ejecute el instalador, y Seleccione el idioma de la
instalación
3. Aceptar la licencia
4. Seleccionar los componentes ainstalar, vienen por defecto
5. Configurar la carpeta destino:
6. Al hacer clic en siguiente, arrancael proceso de instalación:
7. Elegir si Dev C++ estará disponiblepara todos los usuarios del PC
8. La instalación termina, con lacasilla Ejecutar seleccionada, clicen
Terminar
9. El programa inicia por 1ra vez
10. Se configura el idioma delprograma, seleccionar
Spanish(LatinoAmérica)
11. En estos dos pasos, hacer clic en Next
12. Luego, habrá una segunda y últimacarga de archivos
13. La instalación ha finalizado
14. Esto es lo 1ro que verás… activa odesactiva las sugerencias, clic
enCerrar
15. Clic en Archivo Fuente y listo,¡A Programar en C++!

71 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

Instalacion de IDE DevC++ Windows 8

Pasos de la Instalación del wxdevcpp


Hace varios años que los autores del Dev C++ han dejado de actualizar el proyecto, por lo que
ahora es un poco difícil lograr instalarlo en Windows Vista o Windows 7.

wxdevcpp es un clon de Dev C++ que se mantiene al día y se puede instalar sin ningún
problema en cualquier versión de Windows, incluyendo Windows Vista y Windows 7; a
demás, cuenta con una biblioteca de clases para la creación de cuadros de dialogo wxWidget.

A continuación se detallan los pasos para la instalación del wxdevcpp.

1. Presione aquí, para descargar el software.


2. Una vez descargado, hacer doble click sobre el programa instalador

3. Precionar el botón Acepto, para aceptar la licencia GNU

72 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

4. Presionar el botón "Siguiente >", no es necesario modificar ninguna opción en esta


ventana.

5. Presione el botón "Siguiente >", aquí tampoco es necesario modificar ninguna opción.

73 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

6. Elegir un directorio destino para la instalación del software (se puede dejar la opción
pre establecida), luego precionar el boton de Instalar

7. Si no dispone de una conexión a Internet presione No, en caso de disponer de una


conexión a Internet, podrá descargar las últimas versiones de los distintos paquetes que
incluye el software.

74 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

8. Esperar a que se extraigan y copien todos los archivos.

9. Después de unos minutos se mostrará el mensaje "Completado" y se podrá presionar el


botón "Cerrar".

75 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

10. Presionar el botón "Si" para que todos los usuarios de la computadora puedan usar el
programa.

Después de esto, el programa instalador se cerrará.

11. Para concluir la instalación deberemos ejecutar el programa Dev C++ por primera vez,
haciendo click sobre su ícono en el menú de inicio.

76 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño
12. Elegir el idioma "Español (Castellano)", también se debe marcar la casilla "Use XP
Theme"

13. Elegir "Yes, create the cache now" y luego presionar "Next"

77 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

14. Hacer click en "Next" para que se inicie la configuración final, este último paso podría
tomar ¡muchos minutos!

15. Después de la larga espera sólo habrá que presionar el botón "Ok" y se podrá empezar
a usar el software.

78 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

ANEXO 3

DESARROLLO DE HABILIDAD
DEL PENSAMIENTO

79 Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx
UNIDAD 1: DESARROLLO DE HABILIDADES DE PENSAMIENTO

DESARROLLO DE HABILIDADES DE PENSAMIENTO DE ORDEN SUPERIOR

Existe actualmente un consenso general dentro de la compromete a los estudiantes en la consideración de


comunidad educativa mundial sobre la necesidad de varios aspectos importantes para la solución de
superar el tipo de enseñanza basada en la transmisión problemas: decidir sobre la naturaleza del problema,
de contenidos para apuntarle en su lugar al desarrollo seleccionar una representación que ayude a resolverlo
de capacidades. Investigaciones y estudios recientes y, monitorear sus propios pensamientos (metacognición)
proponen diversos conjuntos de habilidades que la y estrategias de solución. Este último, es un aspecto que
educación debe fomentar para que los estudiantes deben desarrollar desde edades tempranas. No
puedan tener éxito en el mundo digital y globalizado en debemos olvidar que solucionar problemas con ayuda
el que van a vivir. Este planteamiento exige, sin del computador puede convertirse en una excelente
dilaciones, implementar estrategias que contribuyan herramienta para adquirir la costumbre de enfrentar
efectivamente en el desarrollo de esas habilidades problemas predefinidos de manera rigurosa y
planteadas como fundamentales para la educación en el sistemática, aun, cuando no se utilice un computador
Siglo XXI (21st Century Skills, 2004). para solucionarlo.

En la mayoría de conjuntos de habilidades propuestos Esto en cuanto a la solución de problemas, pero hay
figuran las habilidades de pensamiento de orden otra habilidad de pensamiento que también se puede
superior entre las que se incluye la destreza para ayudar a desarrollar con un cursos de Algoritmos y
solucionar problemas; por esta razón, se requiere Programación: La Creatividad.
seleccionar estrategias efectivas para ayudar a que los
estudiantes las desarrollen. Para atender esta En los últimos años, la creatividad forma parte de las
necesidad, la programación de computadores constituye prioridades de los sistemas educativos en varios países,
una buena alternativa, siempre y cuando se la enfoque junto a otras habilidades de pensamiento de orden
al logro de esta destreza y no a la formación de superior. Al punto que los Estándares Nacionales
programadores. Es importante insistir en esta Norteamericanos de TIC para Estudiantes (NETS-S)
orientación debido a que las metodologías utilizadas en formulados en 1998, estaban encabezados por
Educación Básica para llevar a cabo cursos de “Operaciones y conceptos básicos de las TIC” y la
Algoritmos y Programación, son heredadas de la Creatividad no figuraba. Sin embargo, en la nueva
educación superior y muchos de los docentes que las versión de estos Estándares, liberada en 2008, la
utilizan se dedican principalmente a enseñar los creatividad encabeza los seis grupos de estándares.
vericuetos de lenguajes de programación profesionales Otro ejemplo muy diciente es la creación en Inglaterra
tales como Java, C++, Visual Basic, etc. Hablar hoy de del Consorcio para la Creatividad que busca promover
aprender a diseñar y construir aplicaciones (programas) en la educación el desarrollo de habilidades de
complejas, implica una labor titánica que en la mayoría pensamiento que conduzcan la formación de personas
de los casos está fuera del alcance de la Educación orientadas a la creatividad y a la innovación.
Básica ya que demanda necesariamente enfoques de
programación como el orientado a objetos al que Una de las razones para que la creatividad se hubiese
apuntan la mayoría de tendencias en Ingeniería de convertido en tema prioritario es que tiene un alto
Sistemas. impacto en la generación de riqueza por parte de las
empresas de la Sociedad de la Creatividad. En esta
Por esta razón, en la Educación Básica es altamente empresas, los reconocimientos profesionales se dan
recomendable utilizar ambientes de programación gracias al talento, la creatividad y la inteligencia. La
basados en Logo, fáciles de utilizar y que permitan creatividad reemplazó las materias primas como fuente
realizar procedimientos que contengan estructuras fundamental de crecimiento económico. Para tener éxito
básicas (secuencial, decisión y repetición), pero siempre en esta nueva Sociedad, las regiones deben desarrollar,
conducentes al desarrollo de habilidades del Siglo XXI. atraer y retener a personas talentosas y creativas que
Solo en los últimos grados de básica secundaria o en la generen innovaciones (Banaji & Burn, 2006). Cada vez
Media Técnica sería aconsejable introducir a los es mayor el número de empresas que fundamentan su
estudiantes a la programación orientada a objetos modelo de negocio en la creatividad y la innovación;
mediante entornos de programación visuales y para ellas, son indispensables personas que además de
amigables como Alice, KPL o Processing. tener los conocimientos requeridos para desempeñarse
en los diferentes cargos, tengan habilidad para pensar y
Desde el punto de vista educativo, la programación de actuar creativamente.
computadores posibilita no solo activar una amplia
variedad de estilos de aprendizaje (Stager, 2003) sino Ejemplo tangible de esto es el que la Comisión Europea,
desarrollar el pensamiento algorítmico. Adicionalmente, consciente de la importancia que tienen la creatividad y
Pág.4 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
la innovación para el desarrollo social y económico de ayuda en la solución de problemas. Esto sugiere
los países del viejo continente, decidiera proclamar el que una evaluación autentica en matemáticas debe
2009 como el “Año de la Creatividad y la Innovación” realizarse con libro y cuaderno abiertos, permitir el
(http://create2009.europa.eu/). uso de calculadora y computador; en cuyo caso el
computador puede aportar un ambiente de
El reto enorme que recae hoy sobre los sistemas aprendizaje y evaluación enriquecidos.
educativos consiste en lograr que se generen las • Adicionalmente, hay otros campos más avanzados
estrategias adecuadas para que los estudiantes se de las matemáticas que también se pueden impactar
desarrollen como pensadores creativos. Así como para con un curso de algoritmos y programación:
la sociedad griega en tiempos de Alejandro el Grande Inteligencia artificial, robótica, aprendizaje asistido
era prioridad que las personas desarrollaran su cuerpo por computador (CAL), aprendizaje asistido por
como preparación para los quehaceres del campo de computador altamente interactivo e inteligente
batalla, para la sociedad actual es prioritario que las (HIICAL), etc.
personas desarrollen sus habilidades de pensamiento
de orden superior para que pueden desempeñarse con Es muy importante tener presente que resolver
éxito en ella. Pero, dado que el desarrollo de estas problemas matemáticos mediante procedimientos tiene
habilidades se debe iniciar desde edad temprana, la
dos ciclos: uno en el cual se resuelve el problema
educación debe asumir su cuota de responsabilidad en
matemático en sí (con papel y lápiz) y otro en el que esa
esta importante tarea.
solución se automatiza en el computador. Crear un
procedimiento para calcular el área de cualquier
Desde este punto de vista, la presente “Guía de rectángulo a partir de las dimensiones de sus lados,
Algoritmos y Programación”, dirigida a docentes de requiere que el estudiante primero resuelva el problema
Educación Básica, se concentra en el desarrollo de la
matemático (entender el problema, trazar un plan,
creatividad y de habilidades para solucionar problemas
ejecutar el plan y revisar) y luego elabore el
predefinidos. Para facilitar a los docentes su utilización
procedimiento que pida los datos de entrada, realice los
en el aula, los ejemplos que se proponen corresponden cálculos y muestre el resultado (analizar el problema,
a temas de Matemáticas y Ciencias Naturales para diseñar un algoritmo, traducir el algoritmo a un lenguaje
grados cuarto y quinto de Básica Primaria. de programación y depurar el programa).

Programación y Matemáticas Programación y Ciencias Naturales


Son varios los temas de las matemáticas cuya
En Ciencias Naturales también hay temas en los cuales
comprensión se puede mejorar mediante la integración realizar actividades de programación de computadores
de esta asignatura con un curso de algoritmos y puede ayudar a mejorar su comprensión por parte de los
programación:
estudiantes.
• Concepto de variable. Una variable es una ubicación Mediante el trabajo con entornos de programación como
de memoria en el computador o en la calculadora Scratch o MicroMundos, los estudiantes aprenden a
que tiene un nombre (identificador) y en la que se seleccionar, crear y manejar múltiples formas de medios
pueden almacenar diferentes valores. (texto, imágenes y grabaciones de audio). La
• Concepto de función. La mayoría de calculadoras comunicación efectiva requiere hoy en día, para ser
científicas vienen de fabrica con cientos de creativa y persuasiva, la escogencia y manipulación de
funciones y los estudiantes pueden crear los mismos tipos de medios que estos entornos de
procedimientos que se comportan como funciones programación ponen al alcance de los estudiantes. Se
(aceptan parámetros, realizan cálculos y reportan un espera que a medida que ellos ganan experiencia
resultado). creando con medios, se vuelvan más perceptivos y
• Manejo de ecuaciones y graficación. críticos en el análisis de los que tienen a su alcance en
• Modelado matemático. Algunas de las ideas clave el mundo que los rodea (Rusk, Resnick & Maloney,
de los modelos matemáticos están presentes en los 2007).
manipulables virtuales (simulaciones y
micromundos). Estos manipulables se pueden Por ejemplo, realizar proyectos cuyo producto final sea
emplear tanto en procesos de entrenamiento (drill la comunicación de resultados obtenidos en procesos de
and practice) como de educación matemática. Sin indagación y/o experimentación en clase de Ciencias:
embargo, la tendencia es a utilizarlos en ambientes
en los que los estudiantes se convierten en • Explicación de las partes de una célula y su
diseñadores y no en simples consumidores. importancia como unidad básica de los seres vivos.
• Evaluación. En la mayoría de las situaciones • Exposición de los diversos sistemas de órganos del
extraescolares, las personas que necesitan utilizar ser humano con la respectiva explicación de su
matemáticas regularmente tienden a usar función.
calculadoras, computadores y otros dispositivos • Clasificación de los seres vivos en diversos grupos
especializados (GPS, medición con láser, etc) como taxonómicos (plantas, animales, microorganismos,
Pág.5 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
etc). • Representación del movimiento y desplazamiento de
• Descripción y comparación de diversos tipos de objetos con diferentes velocidades.
neuronas. • Ilustración interactiva del sistema solar.
• Explicación de las funciones de los diversos
componentes de un circuito eléctrico. En el caso de las Ciencias Naturales es fundamental
• Descripción de los principales elementos del sistema tener en cuenta que los proyectos que se realicen
solar que incluya las relaciones de tamaño, utilizando entornos de programación como Scratch o
movimiento y posición. MicroMundos pueden requerirse conocimiento básico
del tema por parte de los estudiantes. En este caso, los
Adicionalmente, la elaboración de simulaciones es un proyectos se convierten en profundización para la
veta muy rica para formular proyectos en Ciencias comprensión de esos temas.
Naturales. Estas sin duda contribuyen a la comprensión
de fenómenos naturales ya que en este tipo de De lo contrario, se debe incluir en cada proyecto un
actividades los estudiantes actúan como diseñadores. componente previo de investigación en el cual los
No se debe pasar por alto que los estudiantes aprendan estudiantes puedan alcanzar los conocimientos básicos
más construyendo materiales de instrucción que conceptuales requeridos para llevar a cabo el proyecto.
estudiándolos (Jonassen, Carr & Yue, 1998). La mayoría de estos proyectos de este tipo se enfocan
en la comunicación de hallazgos de indagaciones y/o
Para poder construir las simulaciones los estudiantes experimentaciones.
deben coordinar periodicidad y reglas de interacción
entre varios objetos móviles programables (tortugas y Una tercera opción es trabajar con el entorno de
objetos). Además, la posibilidad de programar programación como actividad exploratoria a un tema
interacciones con el usuario de la simulación ofrece dado en Ciencias Naturales; sin embargo, este enfoque
oportunidades valiosas para comprometer al estudiante requiere una planeación cuidadosa para que se logre el
“diseñador” en la reflexión sobre detección de actividad, objetivo de aprendizaje y la actividad no se quede
retroalimentación, usabilidad y otros elementos únicamente en lo lúdico.
presentes en los sistemas de computo que se utilizan
diariamente en empresas y hogares.

Los siguientes son algunos ejemplos de proyectos cuyo


producto final consiste en una simulación sobre diversos
temas que son fundamentales en Ciencias Naturales:

• Imitación del comportamiento de seres vivos en


ecosistemas, teniendo en cuenta necesidades y
cantidades disponibles de energía y nutrientes
(cadena alimentaria).
• Representación del fenómeno migratorio de varias
especies de animales como respuesta a cambios en
el ambiente y en los ecosistemas en los que viven.
• Ilustración interactiva de la adaptación de los seres
vivos a variaciones en el entorno en que viven.
• Demostración del funcionamiento de circuitos
eléctricos en serie y en paralelo.
• Imitación del efecto de la transferencia de energía
térmica en los cambios de estado de algunas
sustancias.
• Representación del ciclo de vida de una planta
teniendo en cuenta factores ambientales (semilla –
siembra – desarrollo planta – florecimiento –
polinización – semilla).
• Diseño de experimentos en los cuales se deba
modificar una variable para dar respuesta a
preguntas.
• Imitación de fenómenos de camuflaje con un
entorno y relacionarlos con ciertas necesidades en
algunos seres vivos.

Pág.6 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php


SOLUCIÓN DE PROBLEMAS

Una de las acepciones que trae el Diccionario de Real empíricas para llegar a una solución. El método
Academia de la Lengua Española (RAE) respecto a la heurístico conocido como “IDEAL”, formulado por
palabra Problema es “Planteamiento de una situación Bransford y Stein (1984), incluye cinco pasos:
cuya respuesta desconocida debe obtenerse a través de Identificar el problema; definir y presentar el
métodos científicos”. Con miras a lograr esa respuesta, problema; explorar las estrategias viables; avanzar
un problema se puede definir como una situación en la en las estrategias; y lograr la solución y volver para
cual se trata de alcanzar una meta y para lograrlo se evaluar los efectos de las actividades (Bransford &
deben hallar y utilizar unos medios y unas estrategias. Stein, 1984). El matemático Polya (1957) también
La mayoría de problemas tienen algunos elementos en formuló un método heurístico para resolver
común: un estado inicial; una meta, lo que se pretende problemas que se aproxima mucho al ciclo utilizado
lograr; un conjunto de recursos, lo que está permitido para programar computadores. A lo largo de esta
hacer y/o utilizar; y un dominio, el estado actual de Guía se utilizará este método propuesto por Polya.
conocimientos, habilidades y energía de quien va a • Algoritmos : Consiste en aplicar adecuadamente
resolverlo (Moursund, 1999). una serie de pasos detallados que aseguran una
solución correcta. Por lo general, cada algoritmo es
Casi todos los problemas requieren, que quien los específico de un dominio del conocimiento. La
resuelve, los divida en submetas que, cuando son programación de computadores se apoya en este
dominadas (por lo regular en orden), llevan a alcanzar el método, tal como veremos en la Unidad 2.
objetivo. La solución de problemas también requiere que • Modelo de procesamiento de información : El
se realicen operaciones durante el estado inicial y las modelo propuesto por Newell y Simon (1972) se basa
submetas, actividades (conductuales, cognoscitivas) que en plantear varios momentos para un problema
alteran la naturaleza de tales estados (Schunk, 1997). (estado inicial, estado final y vías de solución). Las
posibles soluciones avanzan por subtemas y
Cada disciplina dispone de estrategias específicas para requieren que se realicen operaciones en cada uno
resolver problemas de su ámbito; por ejemplo, resolver de ellos.
problemas matemáticos implica utilizar estrategias • Análisis de medios y fines : Se funda en la
propias de las matemáticas. Sin embargo, algunos comparación del estado inicial con la meta que se
psicólogos opinan que es posible utilizar con éxito pretende alcanzar para identificar las diferencias.
estrategias generales, útiles para resolver problemas en Luego se establecen submetas y se aplican las
muchas áreas. A través del tiempo, la humanidad ha operaciones necesarias para alcanzar cada submeta
utilizado diversas estrategias generales para resolver hasta que se alcance la meta global. Con este
problemas. Schunk (1997), Woolfolk (1999) y otros, método se puede proceder en retrospectiva (desde la
destacan los siguientes métodos o estrategias de tipo meta hacia el estado inicial) o en prospectiva (desde
general: el estado inicial hacia la meta).
• Ensayo y error : Consiste en actuar hasta que algo • Razonamiento analógico : Se apoya en el
funcione. Puede tomar mucho tiempo y no es seguro establecimiento de una analogía entre una situación
que se llegue a una solución. Es una estrategia que resulte familiar y la situación problema. Requiere
apropiada cuando las soluciones posibles son pocas conocimientos suficientes de ambas situaciones.
y se pueden probar todas, empezando por la que • Lluvia de ideas : Consiste en formular soluciones
ofrece mayor probabilidad de resolver el problema. viables a un problema. El modelo propuesto por
Por ejemplo, una bombilla que no prende: revisar la Mayer (1992) plantea: definir el problema; generar
bombilla, verificar la corriente eléctrica, verificar el muchas soluciones (sin evaluarlas); decidir los
interruptor. criterios para estimar las soluciones generadas; y
• Iluminación : Implica la súbita conciencia de una emplear esos criterios para seleccionar la mejor
solución que sea viable. Es muy utilizado el modelo solución. Requiere que los estudiantes no emitan
de cuatro pasos formulado por Wallas (1921): juicios con respecto a las posibles soluciones hasta
preparación, incubación, iluminación y verificación. que terminen de formularlas.
Estos cuatro momentos también se conocen como • Sistemas de producción : Se basa en la aplicación
proceso creativo. Algunas investigaciones han de una red de secuencias de condición y acción
determinado que cuando en el periodo de incubación (Anderson, 1990).
se incluye una interrupción en el trabajo sobre un • Pensamiento lateral : Se apoya en el pensamiento
problema se logran mejores resultados desde el creativo, formulado por Edwar de Bono (1970), el
punto de vista de la creatividad. La incubación ayuda cual difiere completamente del pensamiento lineal
a "olvidar" falsas pistas, mientras que no hacer (lógico). El pensamiento lateral requiere que se
interrupciones o descansos puede hacer que la exploren y consideren la mayor cantidad posible de
persona que trata de encontrar una solución creativa alternativas para solucionar un problema. Su
se estanque en estrategias inapropiadas. importancia para la educación radica en permitir que
• Heurística : Se basa en la utilización de reglas el estudiante: explore (escuche y acepte puntos de
Pág.7 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
vista diferentes, busque alternativas); avive ejemplo, en “Recreo Matemático 5” (Díaz, 1993) y en “Dominios 5”
(promueva el uso de la fantasía y del humor); libere (Melo, 2001) se pueden identificar las siguientes sugerencias
(use la discontinuidad y escape de ideas propuestas a los estudiantes para llegar a la solución de un problema
preestablecidas); y contrarreste la rigidez (vea las matemático:
cosas desde diferentes ángulos y evite 1. COMPRENDER EL PROBLEMA.
dogmatismos). Este es un método adecuado cuando • Leer el problema varias veces
el problema que se desea resolver no requiere
• Establecer los datos del problema
información adicional, sino un reordenamiento de la
información disponible; cuando hay ausencia del • Aclarar lo que se va a resolver (¿Cuál es la pregunta?)
problema y es necesario apercibirse de que hay un • Precisar el resultado que se desea lograr
problema; o cuando se debe reconocer la posibilidad • Determinar la incógnita del problema
de perfeccionamiento y redefinir esa posibilidad como • Organizar la información
un problema (De Bono, 1970).
• Agrupar los datos en categorías
Como se puede apreciar, hay muchas estrategias para • Trazar una figura o diagrama.
solucionar problemas; sin embargo, esta Guía se enfoca 2. HACER EL PLAN.
principalmente en dos de estas estrategias: Heurística y • Escoger y decidir las operaciones a efectuar.
Algorítmica. • Eliminar los datos inútiles.
• Descomponer el problema en otros más pequeños.
Según Polya (1957), cuando se resuelven problemas, 3. EJECUTAR EL PLAN (Resolver).
intervienen cuatro operaciones mentales: • Ejecutar en detalle cada operación.
1. Entender el problema • Simplificar antes de calcular.
2. Trazar un plan • Realizar un dibujo o diagrama
3. Ejecutar el plan (resolver) 4. ANALIZAR LA SOLUCIÓN (Revisar).
4. Revisar • Dar una respuesta completa
• Hallar el mismo resultado de otra manera.
Numerosos autores de textos escolares de matemáticas • Verificar por apreciación que la respuesta es adecuada.
hacen referencia a estas cuatro etapas planteadas por
Polya. Sin embargo, es importante notar que estas son EJEMPLO
flexibles y no una simple lista de pasos como a menudo En un juego, el ganador obtiene una ficha roja; el segundo, una ficha
se plantea en muchos de esos textos (Wilson, azul; y el tercero, una amarilla. Al final de varias rondas, el puntaje se
Fernández & Hadaway, 1993). Cuando estas etapas se calcula de la siguiente manera: Al cubo de la cantidad de fichas rojas
siguen como un modelo lineal, resulta contraproducente se adiciona el doble de fichas azules y se descuenta el cuadrado de
para cualquier actividad encaminada a resolver las fichas amarillas. Si Andrés llegó 3 veces en primer lugar, 4 veces
problemas. de último y 6 veces de intermedio, ¿Qué puntaje obtuvo? (Adaptado
de Melo (2001), página 30).
R/.
COMPRENDE
• Leer detenidamente el problema
• ¿Cuántos colores de fichas se reparten?
• ¿Cuántas fichas rojas, azules y amarillas obtuvo Andrés?
• ¿Qué pregunta el problema?
PLANEA
• Para hallar el puntaje que obtiene Andrés por sus llegadas de
primero, calcular el cubo de la cantidad de fichas rojas.
Ilustración 1-1: Interpretación dinámica y cíclica de las etapas
• Para hallar el puntaje por sus llegadas en segundo lugar, calcular
planteadas por Polya para resolver problemas.
el doble de la cantidad de fichas azules.
• Para hallar el puntaje que pierde por sus llegadas en último
Es necesario hacer énfasis en la naturaleza dinámica y
lugar, calcular el cuadrado de la cantidad de fichas amarillas.
cíclica de la solución de problemas. En el intento de
trazar un plan, los estudiantes pueden concluir que • Para hallar el puntaje total, calcular la suma de los puntajes por
las fichas rojas y azules, restarle los puntos de las fichas
necesitan entender mejor el problema y deben regresar
amarillas.
a la etapa anterior; o cuando han trazado un plan y
RESUELVE
tratan de ejecutarlo, no encuentran cómo hacerlo;
entonces, la actividad siguiente puede ser intentar con • Por tres fichas rojas: 33 = 27 puntos
un nuevo plan o regresar y desarrollar una nueva • Por seis fichas azules: 6 x 2 = 12 puntos
comprensión del problema (Wilson, Fernández & • Por cuatro fichas amarillas: 42 = 16 puntos
Hadaway, 1993; Guzdial, 2000). • Para obtener el puntaje final de Andrés, sumar los puntos
obtenidos con las fichas rojas y azules (27 + 12 = 39 puntos) y de
TIP este resultado restar los puntos representados por las fichas
La mayoría de los textos escolares de matemáticas abordan la amarillas (39 – 16 = 23 puntos).
Solución de Problemas bajo el enfoque planteado por Polya. Por REVISA
Pág.8 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
• El puntaje que obtuvo Andrés es 23 puntos. • Fomentar la utilización de representaciones visuales
• Verificar las operaciones y comparar los cálculos con la solución que favorezcan la comprensión de conceptos
estimada. (diagramas de flujo, mapas conceptuales, diagramas
de Venn, etc).
El anterior es un problema típico en clase de • Dar retroalimentación personalizada en
matemáticas. Es muy importante que los estudiantes consideración al esfuerzo hecho por los estudiantes
reflexionen sobre las actividades que realizan para para solucionar problemas.
solucionarlo (metacognición) y las agrupen de acuerdo a • Verificar que una cantidad importante de la
las etapas que contenga la estrategia de solución instrucción ocurra en grupos pequeños o en
empleada. situaciones de uno a uno.
• Ventilar los errores y malentendidos más comunes.
ACTIVIDAD • Promover la interacción tanto estudiante-docente,
En la academia de las ciencias sociales hay dos grupos de materias: como estudiante-estudiante. Los niños son los
Geografía, con 124 alumnos; Historia, con 220; y Educación mejores maestros de otros niños en cosas tan
Ambiental, con 185. Si hay 25 alumnos que estudian Geografía y importantes para ellos como el aprendizaje de
Educación Ambiental, 37 que estudian Educación Ambiental e diversos juegos (Savater, 1996).
Historia, y ninguno toma las tres materias, ¿cuántos alumnos tiene la
academia? (Adaptado de Melo, 2001, página 46).
• Ofrecer actividades que den oportunidad a los
estudiantes de discutir, hacer conjeturas, sacar
conclusiones, defender ideas y escribir
El estudiante debe tener en cuenta (y anotar) las actividades que
conceptualizaciones.
realiza para resolver este problema y agruparlas en cada una de las
cuatro etapas propuestas por Polya (comprende, planea, resuelve y • Proporcionar oportunidades para realizar trabajo
revisa). Para resolver este problema, los estudiantes deben tener reflexivo y colaborativo entre estudiantes.
conocimientos sobre conjuntos (representación, clasificación e
intersección). Es buena idea que construyan una tabla para
organizar la información y un diagrama de Venn para representar los Solución de problemas y programación
datos. Desde el punto de vista educativo, la solución de
problemas mediante la programación de computadores
posibilita la activación de una amplia variedad de estilos
Establecer un modelo para solucionar problemas es un de aprendizaje. Los estudiantes pueden encontrar
paso fundamental pero no suficiente. Según Clements & diversas maneras de abordar problemas y plantear
Meredith (1992) y Zemelman, Daniels & Hyde (1998) y soluciones, al tiempo que desarrollan habilidades para:
otros, los docentes deben adoptar una serie de buenas visualizar caminos de razonamiento divergentes,
prácticas con el fin de ayudar a los estudiantes a anticipar errores, y evaluar rápidamente diferentes
desarrollar habilidades para resolver problemas: escenarios mentales (Stager, 2003).
• Plantear verbalmente problemas con variedad de
estructuras y de formas de solución.
• Presentar diversas estrategias de solución de
problemas.
• Asignar problemas que tengan aplicación en la vida
diaria.
• Ofrecer experiencias que estimulen la curiosidad de
los estudiantes y construyan confianza en la
investigación, la solución de problemas y la
comunicación.
• Permitir a los estudiantes tomar la iniciativa en el
planteamiento de preguntas e investigaciones que les
interesen.
• Hacer preguntas que involucren pensamiento de
orden superior.
• Verificar que los estudiantes son conscientes de las
estrategias que deben utilizar y de los procesos que
deben aprender.
• Plantear problemas que proporcionen contextos en
los que se aprendan conceptos y habilidades.
• Proveer ejemplos de cómo los conceptos y
habilidades utilizados podrían aplicarse en otros Ilustración 1-2(a): Área de trabajo de MicroMundos EX
contextos. (interfaz del programa)
• Promover, de manera creciente, la abstracción y la
generalización mediante la reflexión y la Quienes han utilizado Logo con estudiantes de básica
experimentación. primaria (especialmente con grados 3º a 5º - 8 a 11
Pág.9 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
años) habrán podido observar la facilidad con que ellos esperado. Así, Logo promueve lo que Piaget (1964)
se familiarizan con la interfaz del programa y la utilizan denominó “la conquista de la difícil conducta de la
para darle instrucciones a la tortuga. Por ejemplo, reflexión” que se inicia a partir de los siete u ocho años
utilizan el “centro de mando” (área de comandos) para cuando niños y niñas dejan de actuar por impulso y
introducir manualmente, una a una, las instrucciones empiezan a pensar antes de proceder. Además,
para construir un rectángulo. Esta forma de utilizar Logo demanda de los estudiantes planificar, formular hipótesis
promueve la exploración y permite al estudiante ver y anticipar qué sucederá.
inmediatamente cuál es el efecto que produce cada
instrucción ejecutada.
EJEMPLO
Pedir a los estudiantes que escriban un procedimiento para dibujar
un rectángulo con unas medidas determinadas (Lado1= 80;
Lado2=120), implica que ellos deben pensar en algo muy parecido a
lo siguiente (y escribirlo):

MicroMundos Scratch

para rectángulo
cp
adelante 80
derecha 90
adelante 120
derecha 90
adelante 80
derecha 90
adelante 120
Fin

Ilustración 1-2(b): Área de trabajo de Scratch Versión 1.4


Cuando se invoca este procedimiento escribiendo “rectángulo” en el
(interfaz del programa) “Centro de Mando” de MicroMundos o haciendo clic en la bandera
verde de Scratch, el computador ejecuta automáticamente y en
orden consecutiva, las instrucciones que se encuentran entre “para
EJEMPLO rectángulo” [to rectangulo] y “fin” [end] (MicroMundos) o debajo de la
Pedir a los estudiantes que escriban en el “Centro de Mando” las instrucción [al presionar bandera verde]. Antes de escribir el anterior
instrucciones para dibujar un rectángulo con las siguientes medidas:
procedimiento, los estudiantes deben analizar la figura geométrica
Lado1= 80; Lado2=120. que desean construir, describirla y reflexionar acerca de cómo se
unen sus partes (dos pares de lados paralelos de igual longitud y
MicroMundos Scratch cuatro ángulos iguales de 90 grados). Deben explicar el todo
cp El Centro de Mando de mediante la composición de las partes, y esta composición supone,
adelante 80 MicroMundos no tiene por tanto, la existencia de autenticas operaciones de segmentación o
derecha 90 equivalente en Scratch. partición y de operaciones inversas de reunión o adición, así como
adelante 120 desplazamientos por separación o concentración (Piaget, 1964).
derecha 90
adelante 80 Pedir a los estudiantes que escriban un procedimiento
derecha 90 más general para dibujar cualquier rectángulo, significa
adelante 120 que ellos deben tratar las dimensiones de la figura como
variables (Lado1= ?; Lado2= ?) y no como constantes
A medida que el estudiante introduce cada una de estas (Lado1= 80; Lado2= 120). Además, deben construir una
instrucciones se dibuja cada uno de los lados que conforman el definición de rectángulo que el computador entienda; de
rectángulo. esta manera, empiezan a construir conocimiento intuitivo
NOTA: Ver en el Anexo 1 un resumen de las primitivas (comandos e acerca de la definición de esta figura geométrica,
instrucciones) de MicroMundos y de Scratch utilizadas en esta guía. conocimiento que luego pueden formalizar en una
definición abstracta de la misma (Clements & Meredith,
Sin embargo, en esta guía se utilizará el “área de 1992).
procedimientos” de MicroMundos para programar el
computador. Los procedimientos son módulos con Adicionalmente, la programación de computadores
instrucciones que se inician con el comando “para” y que compromete a los estudiantes en varios aspectos
el computador ejecuta automáticamente, una tras otra, importantes de la solución de problemas: decidir sobre
hasta encontrar el comando “fin”. Emplear Logo de esta la naturaleza del problema, seleccionar una
manera exige que el estudiante piense en todos los representación que les ayude a resolverlo, y monitorear
comandos que conforman un procedimiento antes de sus propios pensamientos (metacognición) y estrategias
escribirlo, ejecutarlo y comprobar si produce el resultado
Pág.10 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
de solución. Este último, es un aspecto que ellos deben Analizar el problema (entenderlo)
desarrollar desde edades tempranas y solucionar
problemas con ayuda del computador puede convertirse
en una excelente herramienta para adquirir la costumbre
de tratar cualquier problema de manera rigurosa y
sistemática, aun, cuando no se vaya a utilizar un
computador para solucionarlo.

De hecho, para muchos educadores, el uso apropiado


de la tecnología en la educación tiene un significado
similar a la solución de problemas matemáticos. La
programación de computadores para llevar a cabo
tareas matemáticas retadoras puede mejorar la
comprensión del estudiante “programador” sobre las
matemáticas relacionadas con una solución. Esto Ilustración 1-4: Primera fase del ciclo de programación.
implica abrirle un espacio a la programación en el
estudio de las matemáticas, pero enfocándose en los Los programas de computador tienen como finalidad
problemas matemáticos y en el uso del computador resolver problemas específicos y el primer paso consiste
como una herramienta para solucionar problemas de en definir con precisión el problema hasta lograr la mejor
esta área (Wilson, Fernández & Hadaway, 1993). comprensión posible. Una forma de realizar esta
actividad se basa en formular claramente el problema,
Numerosos autores de libros sobre programación, especificar los resultados que se desean obtener,
plantean cuatro fases para elaborar un procedimiento identificar la información disponible (datos),
que realice una tarea específica. Estas fases determinar las restricciones y definir los procesos
concuerdan con las operaciones mentales descritas por necesarios para convertir los datos disponibles (materia
Polya para resolver problemas: prima) en la información requerida (resultados).
1. Analizar el problema (Entender el problema)
2. Diseñar un algoritmo (Trazar un plan) Estas etapas coinciden parcialmente con los elementos
3. Traducir el algoritmo a un lenguaje de programación generales que, según Schunk (1997), están presentes
(Ejecutar el plan) en todos los problemas:
4. Depurar el programa (Revisar) 1. Especificar claramente los resultados que se desean
obtener (meta y submetas)
Como se puede apreciar, hay una similitud entre las 2. Identificar la información disponible (estado inicial)
metodologías propuestas para solucionar problemas 3. Definir los procesos que llevan desde los datos
matemáticos (Clements & Meredith, 1992; Díaz, 1993; disponibles hasta el resultado deseado (operaciones)
Melo, 2001; NAP, 2004) y las cuatro fases para
solucionar problemas específicos de áreas diversas,
mediante la programación de computadores.

Ilustración 1-3: fases para elaborar un programa de computador.


Ilustración 1-5: Etapas a desarrollar en la fase de análisis de un
problema (entenderlo)

Para establecer un modelo que los estudiantes puedan


utilizar en la fase de análisis del problema, debemos
agregar dos temas a los elementos expuestos por
Schunk (1997): formular el problema y determinar las
restricciones.
Pág.11 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
Ahora veamos con mayor detalle cada una de las etapas Además, es conveniente que los estudiantes se
del análisis de un problema. habitúen a analizar los problemas desde diferentes
puntos de vista y a categorizar la información dispersa
que reciben como materia prima (Schunk, 1997).
Formular el problema
La solución de un problema debe iniciar por determinar y En programación es frecuente que quien programa deba
comprender exactamente en qué consiste ese problema. formular el problema a partir de los resultados
La mayoría de los problemas que se resuelven en el esperados. Es muy importante que el estudiante sea
aula de clase llegan a manos de los estudiantes consciente de que cuando las especificaciones de un
perfectamente formulados. Esta etapa es una buena programa se comunican mediante lenguaje natural,
oportunidad para plantear situaciones en forma verbal o estas pueden ser ambiguas, incompletas e
escrita que vinculen la enseñanza de las matemáticas incongruentes. En esta etapa se debe hacer una
con el entorno en el que vive el estudiante y que tengan representación precisa del problema (Rumbaugh, 1996);
una variedad de estructuras y de formas de solución especificar lo más exactamente posible lo que hay que
(Zemelman, Daniels & Hayde, 1998). hacer (no cómo hay que hacerlo).

Esta metodología obliga al estudiante a formular el EJEMPLO


problema a partir de la situación real planteada. De esta Doña Ruby necesita decidir cómo comprar un televisor que cuesta
manera se contrarresta la costumbre tan común en el 850.000 de contado o 960.000 a crédito. Ella tiene 600.000 pesos en
aula de que los problemas sean formulados por el efectivo.
profesor o tomados de los libros de texto (Brown & R/.
Walter, 1990). Como el efectivo que tiene doña Ruby no le alcanza para comprar el
televisor de contado, ella tiene dos opciones: comprarlo totalmente a
EJEMPLO crédito o pagar una parte de contado (cuota inicial) y el resto a
OPCIÓN 1: crédito.
Juan Felipe es jefe de bodega en una fabrica de pañales Para poder resolver el problema se debe conocer el número de
desechables y sabe que la producción diaria es de 744 pañales y cuotas si desea pagarlo totalmente a crédito o conocer el número de
que en cada caja donde se empacan para la venta caben 12 cuotas y el valor total del televisor si se da una cuota inicial de
pañales. ¿Cuántas cajas debe conseguir Juan Felipe para empacar 600.000 pesos.
los pañales fabricados en una semana?
OPCIÓN 2:
Juan Felipe es jefe de bodega en una fabrica de pañales Precisar los resultados esperados
desechables y una de las tares del día consiste en llamar al (meta y submetas)
proveedor de los empaques y ordenarle la cantidad suficiente de Para establecer los resultados que se esperan (meta) es
cajas para empacar los pañales fabricados en la semana próxima. El necesario identificar la información relevante, ignorar los
jefe de producción le informó ayer a Juan Felipe que la producción detalles sin importancia, entender los elementos del
diaria será de 744 pañales y en cada caja cabe una docena de ellos. problema y activar el esquema correcto que permita
¿Qué debe hacer Felipe? comprenderlo en su totalidad (Woolfolk, 1999).

La Opción 1 plantea directamente el problema que el estudiante Determinar con claridad cuál es el resultado final
debe resolver. Mientras que la Opción 2 plantea una situación y la (producto) que debe devolver el programa es algo que
pregunta es ¿Qué debe hacer Felipe?. La Opción 2 demanda al ayuda a establecer la meta. Es necesario analizar qué
estudiante leer muy bien el texto para comprender la situación y así resultados se solicitan y qué formato deben tener esos
poder formular el problema de Juan Felipe. Es algo similar a resultados (impresos, en pantalla, diagramación, orden,
preguntar al estudiante “cuánto es 7 menos 3” versus preguntar “sí etc). El estudiante debe preguntarse:
Rosa tiene 7 naranjas y Julio tiene 3, cuántas naranjas de más tiene • ¿Qué información me solicitan?
Rosa”. • ¿Qué formato debe tener esta información?
La comprensión lingüística del problema (entender el
significado de cada enunciado) es muy importante. El
Identificar datos disponibles
estudiante debe realizar una lectura previa del problema
(estado inicial)
con el fin de obtener una visión general de lo que se le
Otro aspecto muy importante en la etapa de análisis del
pide y una segunda lectura para poder responder
problema consiste en determinar cuál es la información
preguntas como:
disponible. El estudiante debe preguntarse:
• ¿Puedo definir mejor el problema?
• ¿Qué información es importante?
• ¿Qué palabras del problema me son desconocidas?
• ¿Qué información no es relevante?
• ¿Cuáles son las palabras clave del problema?
• ¿Cuáles son los datos de entrada? (conocidos)
• ¿He resuelto antes algún problema similar?
• ¿Cuál es la incógnita?
• ¿Qué información es importante?
• ¿Qué información me falta para resolver el
• ¿Qué información puedo omitir?
problema? (datos desconocidos)
Pág.12 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
• ¿Puedo agrupar los datos en categorías?
Establecer procesos (operaciones)
Otro aspecto importante del estado inicial hace Consiste en determinar los procesos que permiten llegar
referencia al nivel de conocimiento que el estudiante a los resultados esperados a partir de los datos
posee en el ámbito del problema que está tratando de disponibles. El estudiante debe preguntarse:
resolver. Es conveniente que el estudiante se pregunte a • ¿Qué procesos necesito?
sí mismo: • ¿Qué fórmulas debo emplear?
• ¿Qué conocimientos tengo en el área o áreas del • ¿Cómo afectan las condiciones a los procesos?
problema? • ¿Qué debo hacer?
• ¿Son suficientes esos conocimientos? • ¿Cuál es el orden de lo que debo hacer?
• ¿Dónde puedo obtener el conocimiento que necesito
para resolver el problema? En la medida de lo posible, es aconsejable dividir el
• ¿Mis compañeros de estudio me pueden ayudar a problema original en otros más pequeños y fáciles de
clarificar mis dudas? solucionar (submetas), hasta que los pasos para
• ¿Qué expertos en el tema puedo consultar? alcanzarlas se puedan determinar con bastante
precisión (módulos). Esto es lo que en programación se
En el ámbito de las matemáticas, se conoce como denomina diseño descendente o top-down (Joyanes,
conocimiento condicional a aquel que activan los 2001).
estudiantes cuando aplican procedimientos matemáticos
concretos de manera intencional y consciente a ciertas El diseño descendente se utiliza en la programación
situaciones. “El conocimiento condicional proporciona al estructurada de computadores debido a que facilita:
alumno un sistema de valoración sobre la extensión y • La comprensión del problema
las limitaciones de su saber (qué sabe sobre el tema, su • Las modificaciones en los módulos
capacidad de memoria, etc), a la vez que examina la • La verificación de la solución
naturaleza de la demanda del profesor y su objetivo
último, y evalúa variables externas como pueden ser el Al realizar divisiones sucesivas del problema en otros
tiempo que tiene o con quién realiza la tarea” (Orubia & más pequeños y manejables (módulos), hay que tener
Rochera & Barberà, 2001). cuidado para no perder de vista la comprensión de este
como un todo. El estudiante, luego de dividir el problema
EJEMPLO original en submetas (módulos), debe integrar cada
Esteban está ahorrando para comprar una patineta que vale 55.000 parte de tal forma que le permita comprender el
pesos. Su papá le ha dado una mesada de 5.000 pesos durante 7 problema como un todo (Woolfolk, 1999).
semanas. Por lavar el auto de su tío tres veces recibió 8.000 pesos.
Su hermano ganó 10.000 pesos por hacer los mandados de su Igualmente hay que tener cuidado cuando se utiliza este
mamá y 4.000 por sacar a pasear el perro. ¿Esteban tiene ahorrado enfoque para resolver problemas complejos o extensos,
el dinero suficiente para comprar la patineta o aún le falta? en cuyo caso resulta más aconsejable utilizar una
(Adaptado de Casasbuenas & Cifuentes (1998b), página 23). metodología orientada a objetos. Especialmente, cuando
R/. profesores universitarios manifiestan su preocupación
Formular el problema: Ya se encuentra claramente planteado. por el aprendizaje de malas prácticas de programación
Resultados esperados: Si o no tiene Esteban ahorrado el dinero en el colegio. Hay casos en los cuales algunos
suficiente para comprar una patineta que vale 55.000 pesos. estudiantes no han podido cambiar su forma de pensar
Datos disponibles: Los ingresos de Esteban: 5.000 pesos por 7 “estructurada” por otra orientada a objetos, la cual hace
semanas + 8.000 pesos. Los 10.000 y 4.000 pesos qué ganó el parte de los programas universitarios modernos en la
hermano de Esteban son irrelevantes para la solución de este carrera de Ingeniería de Sistemas. Es aconsejable que
problema y se pueden omitir. los ejemplos y actividades planteados a los estudiantes
contengan solo un problema cuya solución sea muy
corta (no necesariamente sencillo de resolver). De esta
Determinar las restricciones forma ellos podrán enfocarse en aplicar completamente
Resulta fundamental que los estudiantes determinen la metodología propuesta para analizar problemas
aquello que está permitido o prohibido hacer y/o utilizar (formular el problema, especificar los resultados,
para llegar a una solución. En este punto se deben identificar la información disponible, determinar las
exponer las necesidades y restricciones (no una restricciones y definir los procesos) sin perderse en el
propuesta de solución). El estudiante debe preguntarse: laberinto de un problema demasiado complejo.
• ¿Qué condiciones me plantea el problema?
• ¿Qué está prohibido hacer y/o utilizar? Las operaciones para llegar a los resultados esperados
• ¿Qué está permitido hacer y/o utilizar? se implementan en Logo mediante procedimientos. Por
• ¿Cuáles datos puedo considerar fijos (constantes) ejemplo, si se desea producir un software para trabajar
para simplificar el problema? con figuras geométricas de diferentes tipos, el triángulo
• ¿Cuáles datos son variables? rectángulo será uno de los objetos a tener en cuenta y
• ¿Cuáles datos debo calcular? este a su vez, debe prestar los siguientes servicios
(Jiménez, 2002):
Pág.13 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
1. Un procedimiento para leer los datos de entrada. Cinco pasos que deben tener en cuenta los estudiantes para resolver
2. Un procedimiento para calcular el área. problemas matemáticos (Rodríguez, 1995):
3. Un procedimiento para calcular la hipotenusa. 1. Leer con mucho cuidado el problema hasta entenderlo.
4. Un procedimiento para calcular el perímetro. 2. Buscar la(s) pregunta(s).
5. Un procedimiento para mostrar los resultados. 3. Decidir lo que debes hacer.
4. Realizar las operaciones.
5. Comprobar que la respuesta hallada es correcta.
Pida a los estudiantes que contesten las siguientes preguntas en el
proceso de solución de problemas matemáticos:
• ¿Cuántas preguntas tiene el problema? ¿Cuáles?
• ¿Qué debes hacer primero? ¿Para qué?
• ¿Qué debes hacer luego? ¿Para qué?
• ¿Cuál debe ser la respuesta (estimada) del problema?

ACTIVIDAD
Basándose en la metodología expuesta en esta unidad, dividir a los
estudiantes en grupos y distribuir entre ellos la tarea de análisis
detallado (“Formular el problema”, “Resultados esperados”, “Datos
Ilustración 1-6: Descripción de los servicios que debe estar en disponibles”, “Determinar las restricciones” y “Procesos necesarios”)
capacidad de prestar el objeto “triángulo rectángulo”. de los siguientes problemas (uno por grupo):
1. Hallar el área de un cuadrado cuyo lado mide 5 cm.
EJEMPLO 2. Hallar uno de los lados de un rectángulo cuya área es de 15 cm2
De acuerdo con la metodología descrita, analizar el problema de y uno de sus lados mide 3 cm.
hallar el área de un triángulo rectángulo cuya Base mide 3 cm, la 3. Hallar el área y el perímetro de un círculo cuyo radio mide 2 cm.
Altura 4 cm y la Hipotenusa 5 cm. 4. Hallar el área de un pentágono regular de 6 cm de lado y con 4
R/ cm de apotema.
Formular el problema: Ya se encuentra claramente planteado.
Resultados esperados: El área de un triángulo rectángulo. Dato Curioso
Datos disponibles: Base, Altura, Hipotenusa, tipo de triángulo. La Deep Blue de IBM fue el primer computador que superó a un
incógnita es el área y todos los valores son constantes. El valor de la campeón mundial de ajedrez cuando le ganó una partida a Gary
hipotenusa se puede omitir. El estudiante debe preguntarse si sus Kasparov en febrero de 1996. La victoria de Deep Blue formaba
conocimientos actuales de matemáticas le permiten resolver este parte de una serie de seis partidas, que Kasparov terminó ganando
problema; de no ser así, debe plantear una estrategia para obtener 4-2. En 1997, una versión nueva y mejorada de Deep Blue
los conocimientos requeridos. contraatacó en una segunda serie. Esta vez, el computador, capaz
Determinar las restricciones: Utilizar las medidas dadas. de planear una vertiginosa cantidad de 200 millones de posiciones
Procesos necesarios: Guardar en dos variables los valores de Base por segundo, ganó la serie a Kasparov por 3.5 a 2.5 puntos. (Libro
y Altura; Guardar en una constante el divisor 2; aplicar la fórmula Gunness de los Records 2002)
área=base*altura/2; comunicar el resultado (área).

ACTIVIDAD
La mayoría de las metodologías propuestas para la solución de
problemas matemáticos se aproxima al ciclo de programación de
computadores. Se puede iniciar planteando a los estudiantes
problemas matemáticos como los siguientes, encontrados en
Casasbuenas & Cifuentes (1998b):
1. Luisa quiere invertir sus ahorros en la compra de discos
compactos de moda. Si tiene $68.000, ¿Cuántos discos
comprará?

Analizar el problema:
• ¿Qué tienes en cuenta cuando vas a comprar un disco?
• ¿Tienes información suficiente para resolver el problema de
Luisa? Ilustración 1-7: Fases segunda, tercera y cuarta, del ciclo de
programación.
• ¿Qué dato averiguarías para saber cuántos discos puede
comprar Luisa?
Plantear ahora este problema utilizando la metodología de “Formular
el problema”, “Resultados esperados”, “Datos disponibles”, Diseñar el algoritmo (trazar un plan)
“Determinar las restricciones” y “Procesos necesarios”. Este tema se tratará en profundidad en las unidades 2 y
3 de esta guía. Por el momento, podemos resumir que
TIP únicamente hasta cuando se ha realizado un análisis a

Pág.14 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php


fondo del problema (utilizando alguna metodología), se representado gráficamente se pasa a la etapa de
puede proceder a elaborar el algoritmo (diagrama de traducción a un lenguaje de programación determinado
flujo). Este consiste en la representación gráfica, (en nuestro caso será Logo). Cada lenguaje posee sus
mediante símbolos geométricos, de la secuencia lógica propias reglas gramaticales, por lo tanto es fundamental
de las instrucciones (plan) que posteriormente serán que los estudiantes conozcan de antemano la sintaxis
traducidas a un lenguaje de programación, como Logo, de los comandos que deben utilizar para resolver el
para ejecutarlas y probarlas en un computador. problema. A mayor dominio del lenguaje de
programación, mayor posibilidad de llegar rápidamente a
EJEMPLO una solución satisfactoria. A esta fase de traducción se
Diseñar un algoritmo (seudocódigo y diagrama de flujo) para hallar el le conoce comúnmente como codificación.
área de un triángulo rectángulo cuya Base mide 3 cm, la Altura 4 cm
y la Hipotenusa 5 cm. EJEMPLO
R/ A partir del ejemplo anterior, escribir un procedimiento en Logo que
ANÁLISIS DEL PROBLEMA se llame triángulo para hallar el área de un triángulo rectángulo cuya
Formular el problema: Ya se encuentra claramente planteado. Base mide 3 cm, la Altura 4 cm y la Hipotenusa 5 cm.
Resultados esperados: El área de un triángulo rectángulo. R/
Datos disponibles: Base, Altura, Hipotenusa, tipo de triángulo. La MicroMundos
incógnita es el área y todos los valores son constantes. El valor de la para triángulo
hipotenusa se puede omitir. El estudiante debe preguntarse si sus local "div
conocimientos actuales de matemáticas le permiten resolver este local "base
problema; de no ser así, debe plantear una estrategia para obtener local "altura
los conocimientos requeridos. local "área
Determinar las restricciones: Utilizar las medidas dadas. da "div 2
Procesos necesarios: Guardar en dos variables (BASE y ALTURA) da "base 3
los valores de Base y Altura; Guardar en una constante (DIV) el da "altura 4
divisor 2; aplicar la fórmula BASE*ALTURA/DIV y guardar el da "área :base * :altura / :div
resultado en la variable AREA; comunicar el resultado (AREA). muestra :área
fin
ALGORITMO EN SEUDOCÓDIGO
Paso 1: Inicio Scratch
Paso 2: Asignar el número 2 a la constante "div"
Paso 3: Asignar el número 3 a la constante “base”
Paso 4: Asignar el número 4 a la constante “altura”
Paso 5: Guardar en la variable "área" el resultado de base*altura/div
Paso 6: Imprimir el valor de la variable "área"
Paso 7: Final

Al escribir en el centro de mando de MicroMundos la palabra


triángulo se debe obtener como resultado 6. En el caso de Scratch,
hacer clic en la bandera verde y se debe obtener el mismo resultado.

Depurar el programa (revisar)


Este tema se tratará en profundidad en la Unidad 4 de
esta guía. Después de traducir el algoritmo en un
lenguaje de programación como Logo, el programa
resultante debe ser probado y validados los resultados.
ALGORITMO EN DIAGRAMA DE FLUJO A este proceso se le conoce como depuración. Depurar
programas contribuye a mejorar la capacidad en los
Ilustración 1-8: Diagrama de Flujo para hallar el área de un triángulo estudiantes para resolver problemas; la depuración
rectángulo. basada en la retroalimentación es una habilidad útil para
toda la vida (Stager, 2003).

Quienes han escrito alguna vez un programa de


Traducir el algoritmo (ejecutar el plan) computador, saben de la dificultad que representa
Este tema se tratará en profundidad en las Unidades 3 y elaborar programas perfectos en el primer intento,
4 de esta guía. Una vez que el algoritmo está diseñado y
Pág.15 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
dificultad que aumenta a medida que el problema a
resolver es más complejo. La depuración, afinamiento y
documentación de un programa hacen parte
fundamental del ciclo de programación y desde el punto
de vista educativo estimula en los estudiantes la
curiosidad, la perspectiva, la comunicación y promueve
valores como responsabilidad, fortaleza, laboriosidad,
paciencia y perseverancia. La programación facilita un
diálogo interior en el cual la retroalimentación constante
y el éxito gradual empujan a los alumnos a ir más allá de
sus expectativas (Stager, 2003).

Otras dos actividades relacionadas con esta etapa son


la afinación y la documentación. La primera consiste en
realizar retoques para lograr una mejor apariencia del
programa (en pantalla o en los resultados impresos) o
para ofrecer funcionalidades más allá de los resultados
esperados (especificados en la fase de análisis del
problema). La segunda tiene un carácter eminentemente
comunicativo, con la documentación de un programa se
pone a prueba la capacidad del estudiante para informar
a otras personas cómo funciona su programa y lo que
significa cada elemento utilizado.

EJEMPLO
Complementar la solución del problema de hallar el área de un
triángulo rectángulo cuya Base mide 3 cm, la Altura 4 cm y la
Hipotenusa 5 cm.
R/
La base y la altura son suficientes para calcular el área de un
triángulo rectángulo (resultado esperado), pero adicionalmente se
puede calcular el perímetro (afinación), aplicando la fórmula:
perímetro=Base+Altura+Hipotenusa

Incluso, en caso que el enunciado del problema no hubiese indicado


el valor de la Hipotenusa, si se poseen los suficientes conocimientos
de geometría, se puede calcular el valor de esta a partir de la Base,
la Altura y la condición de ser un triángulo rectángulo:

Dato Curioso
Spacewar es el primer videojuego del mundo. Se empezó a utilizar
en 1961 en el Massachusetts Institute of Technology (MIT) en un
computador PDP-1. Se trataba de un juego de combate espacial en
el que dos naves alrededor de una estrella central debían derribarse
entre ellas. Programado como diversión por estudiantes del MIT ,
este juego fue el precursor de todos los videojuegos modernos. El
computador PDP-1 se puso a la venta en 1960 y costaba 120.000
dólares (el equivalente a 930.000 dólares actuales) y en total se
vendieron 50 unidades. El PDP-1 es el antepasado del computador
personal actual y se concibió para su uso en instituciones científicas.
Disponía de una memoria de 4Kb y los operadores empleaban un
teclado y cinta de papel perforado para la introducción de datos. (Libro
Guinness de los Records, 2002).
.

Pág.16 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php


CREATIVIDAD

Si se quiere llegar a un planteamiento, para Educación final llega a ser aceptada por un grupo cultural
Básica, que contribuya efectivamente a desarrollar la particular”.
creatividad programando computadores, es conveniente
como primera medida, llegar a un acuerdo sobre qué es En los Estándares Nacionales Estadounidenses de TIC
la creatividad, pues varios autores la definen de manera para Estudiantes (NETS’S), reformulados por ISTE, el
diferente. primer grupo corresponde a Creatividad e Innovación.
Para ISTE, los estudiantes al finalizar sus Educación
De acuerdo con el Diccionario de la Real Academia Media deben demostrar pensamiento creativo, construir
Española (RAE), creatividad es la facultad de crear o la conocimiento y desarrollar productos y procesos
capacidad de creación. Por su parte, la enciclopedia innovadores utilizando las TIC.
Microsoft Encarta define la Creatividad como la
capacidad de inventar algo nuevo, de relacionar algo Según ISTE (2007), los estudiantes deben estar en
conocido de forma innovadora o de apartarse de los capacidad de aplicar su conocimiento previo para
esquemas de pensamiento y conducta habituales. generar nuevas ideas, productos o procesos; crear
Según Wikipedia, la creatividad es un proceso mental y trabajos originales como medios de expresión personal
social que implica generar nuevas ideas o conceptos, o o grupal; usar modelos y simulaciones para explorar
nuevas asociaciones entre ideas y conceptos conocidos, sistemas y temas complejos; e identificar tendencias y
lo que habitualmente produce soluciones originales. Las prever posibilidades.
definiciones anteriores se refieren al acto de inventar
cualquier cosa nueva (Ingenio), a la capacidad de Según el Comité Consultivo Nacional para la Educación
encontrar soluciones originales y a la voluntad de Creativa y Cultural de Inglaterra (NACCCE, por su sigla
modificar o transformar el mundo. en Inglés), la creatividad se define como la actividad
imaginativa que tiene como objetivo producir resultados
Ana Craft (2001) anota que las definiciones de tanto originales como generadores de valor (Robinson,
creatividad más aceptadas en los últimos 50 años son 1999).
aquellas que unen creatividad e imaginación. Este
enfoque sugiere que cada persona tiene potencial Para el Consorcio de Habilidades de Aprendizaje para el
creativo ya que este es un aspecto fundamental de la Siglo XXI, las habilidades de aprendizaje e innovación
naturaleza humana. Ella se refiere a la “creatividad con c se están reconociendo como aquellas que separan a los
minúscula” como la habilidad para hacer frente, de estudiantes que están preparados para los ambientes de
manera efectiva, a los retos y cambios que nos plantea vida y de trabajo del Siglo XXI, cada vez más complejos,
la vida en el siglo XXI. Esta es la creatividad que sirve de los que no lo están. Hacer énfasis en creatividad,
para afrontar tareas cotidianas (elaborar una nueva pensamiento crítico, comunicación y colaboración es
receta o un arreglo floral, escribir una carta o poema, esencial en la preparación de los estudiantes para el
enseñar un nuevo truco a alguien, etc). También entra futuro. Entre las competencias de creatividad e
en juego cuando se deben superar obstáculos tales innovación que propone el Consorcio están: demostrar
como desempleo y pobreza o aprovechar originalidad e inventiva en el trabajo; desarrollar,
oportunidades. Esta “creatividad” se contrapone a la implementar y comunicar nuevas ideas a otros; tener
“Creatividad con C mayúscula” propuesta por el apertura y responder a perspectivas nuevas y diversas;
psiquiatra Gene Cohen (citado por Banaji & Burn, 2006), y actuar con ideas creativas para realizar una
que caracteriza los logros extraordinarios de personas contribución tangible y útil en el campo en el que ocurre
poco corrientes como artistas renombrados, científicos e la innovación.
inventores.
Por su parte, el Consorcio para la Creatividad propone
Stenberg (1997), autor reconocido en este campo, que ésta se refiere a mucho más que “hacer arte”. La
argumenta que la creatividad no es solo una capacidad, creatividad tiene que ver con el desarrollo de la
sino un proceso en el que intervienen tres tipos de capacidad para: cuestionar, hacer conexiones, innovar,
inteligencia: creativa (ir más allá de lo dado y engendrar resolver problemas y reflexionar críticamente; todas
ideas nuevas e interesantes), analítica (analizar y éstas son habilidades altamente valoradas en el mundo
evaluar ideas, resolver problemas y tomar decisiones) y laboral actual; y agregan, “el aprendizaje creativo
práctica (traducir teorías abstractas en realizaciones empodera a los jóvenes a imaginar un mundo diferente y
efectivas). Estas dos últimas inteligencias aportan la les da confianza y motivación para llevar a cabo lo que
posibilidad de diferenciar entre ideas innovadoras imaginan” (Creative Partnerships, 2006).
buenas y malas y, además, relacionarlas con la vida
cotidiana (López, 2000). Por su parte, Gardner (1993) Son muchas las definiciones que intentan explicar el
define a la persona creativa como alguien que concepto de creatividad, aquí solo se exponen algunas
“regularmente resuelve problemas, genera productos o de ellas a fin de dar una perspectiva amplia a los
define nuevos cuestionamientos en un dominio, de docentes en este campo. El desarrollo de pensamiento
manera que en principio se considera nueva pero que al algorítmico que promueve esta guía, mediante el

Pág.17 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php


enfoque de solución de problemas predefinidos, se realizar observaciones, hacer abstracción en diversos
complementa con el desarrollo de pensamiento creativo. temas, realizar ejercicios de dibujo y utilizar metáforas y
Pues en el mundo actual, en el que lo único permanente analogías.
es el cambio, además de aprender a resolver tipos
específicos de problemas, los estudiantes deben Sin embargo, puede sonar ambicioso implementar toda
aprender a improvisar creativamente cuando se una metodología para desarrollar la creatividad en un
encuentren con situaciones inesperadas y a explorar curso de Algoritmos y Programación. Por esto y para
alternativas de solución variadas (Resnick, 2007). efectos de la presente Guía, se seleccionaron dos
técnicas de pensamiento que hacen una contribución al
desarrollo de la creatividad: planteamiento de problemas
Desarrollo de la creatividad inesperados y formulación de alternativas.
Una de las cuestiones en torno a la creatividad que aún
no tiene respuesta definitiva es si esta se puede El planteamiento de problemas inesperados busca
desarrollar o simplemente se nace con dicha complementar el enfoque de solución de problemas
“genialidad” (C mayúscula). predefinidos que para resolverlos pueden hacer uso de
metodologías como la propuesta por Polya. Es
Respecto al genio creativo, el Consorcio para la precisamente esta metodología la que se ha utilizado
Creatividad considera que éste es un discurso para resolver problemas matemáticos; sin embargo,
posromántico apoyado por quienes han visto la algunos docentes han manifestado preocupación ya que
creatividad únicamente como una cualidad especial de si bien, la metodología ayuda a que los estudiantes
pocas personas, generalmente artistas, tales como estructuren su pensamiento, muchos de ellos se
escritores, músicos, pintores, etc (Banaji & Burn, 2006). encasillan en ella y les cuesta trabajo encontrar
Los que explican la creatividad desde una perspectiva soluciones alternativas.
basada en características de la personalidad afirman
que las personas creativas tienen rasgos comunes: En este sentido, entornos de programación como
buen humor; confianza en sí mismos; flexibilidad y Scratch y MicroMundos, comprometen a los estudiantes
adaptabilidad; alta capacidad de asociación; en la búsqueda de soluciones innovadoras a problemas
sensibilidad; curiosidad intelectual; percepción y inesperados; no se trata solamente de aprender a
observación agudas; iniciativa para tomar riesgos; solucionar problemas de manera predefinida, sino de
imaginación; expresividad; capacidad crítica; estar preparado para generar nuevas soluciones a
entusiasmo; y, tenacidad (López, 2000). Por el contrario, medida que los problemas se presentan (Resnick,
quienes no son creativos presentan recurrentemente 2007).
algunas de los siguientes rasgos: tienden a
especializarse en ciertos temas; son extremadamente Por su parte, formular alternativas, se basa en el primer
racionales; les falta confianza en si mismos; no tienen principio básico del Pensamiento Lateral propuesto por
motivación; su capacidad para escuchar es reducida; De Bono (1970): “cualquier modo de valorar una
respetan la autoridad en exceso; no son buenos situación es sólo uno de los muchos modos posibles de
observadores; y, tienen deficiente pensamiento crítico. valorarla”. La búsqueda de alternativas a una situación o
problema parece un proceso típico del pensamiento
Sin embargo, buena parte de los autores que han lógico; sin embargo, desde el punto de vista de la
trabajado en profundidad el tema de la creatividad, entre creatividad no se busca la mejor alternativa sino la
ellos Resnick, De Bono y Johansson, no solo formulación del mayor número posible de alternativas.
argumentan que si es posible desarrollarla, sino que Por lo tanto, es conveniente fijar de entrada y poner por
aportan propuestas concretas para trabajarla en el aula escrito, el número de alternativas que los estudiantes
de clase. Además, plantean que las siguientes deben plantear. Desde la lógica, por lo general la
habilidades cognitivas, susceptibles de desarrollar, están búsqueda se interrumpe cuando se halla una alternativa
presentes en las personas consideradas como creativas: que parece satisfactoria.
se plantean nuevos objetivos; exploran un mayor
número de alternativas; evalúan, durante el transcurso Como aprestamiento a la realización de proyectos que
del proceso de solución, los objetivos, las alternativas y busquen deliberadamente desarrollar la creatividad, es
las tareas; se aseguran de entender a cabalidad los deseable que los estudiantes realicen actividades tales
problemas; son observadores; usan la abstracción; usan como: hacer asociación de ideas sobre temas ya vistos
metáforas y analogías; desglosan la tarea en subtareas en clase, elaborar listados de atributos de objetos
y desarrollan productos intermedios; y, usan estrategias cotidianos, buscar al menos 30 usos para cada uno de
metacognitivas (López, 2000). los objetos cotidianos propuestos, Jugar con Torres de
Hanoi de tres y cuatro discos y, elaborar figuras con el
Según De Bono (1970), es conveniente empezar a Tangram, entre otras. Estas actividades permiten
enseñar, a partir de los 7 años, técnicas de pensamiento evidenciar el estilo de pensamiento predominante de
que faciliten el desarrollo de la creatividad. Entre las que cada estudiante. Quienes piensan convergentemente
se pueden implementar en cursos de diferentes tenderán a abordar los problemas de forma lógica,
asignaturas tenemos: plantear problemas inesperados, ordenada y a establecer relaciones comunes; quienes
formular alternativas, proponer e implementar diseños, piensan divergentemente, tenderán a hacer juicios
Pág.18 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
ilógicos, innovadores y poco comunes. cantidad de alternativas de solución que generen los
estudiantes a un problema planteado, que las
respuestas correctas. Por tanto, debe evitarse a toda
Espiral del pensamiento creativo costa, la emisión de juicios de valor negativos ante
Con el fin de promover el desarrollo de la creatividad, cualquier alternativa, por ilógica que parezca.
esta Guía propone utilizar la Espiral del Pensamiento
Creativo propuesta por Mitchel Resnick (2007). En esta, Adicionalmente, en las diferentes fases de la Espiral, se
los estudiantes imaginan lo que quieren hacer; crean un debe aprovechar cualquier oportunidad para plantear
proyecto basado en sus ideas; juegan con sus ideas y problemas inesperados y para solicitar a los estudiantes
creaciones; comparten sus ideas y creaciones con otros que formulen alternativas de solución a cada problema o
y reflexionan sobre sus experiencias; lo anterior los lleva situación que se presente. En este mismo sentido, la
a imaginar nuevas ideas y nuevos proyectos. La espiral práctica indica que en reiteradas ocasiones los
genera un proceso indefinido de mejoramiento continuo. estudiantes plantean a sus docentes situaciones que
ellos desean desarrollar en sus proyectos. Dichas
situaciones se convierten en problemas inesperados que
los docentes deben resolver. Estas situaciones las
pueden aprovechar los docentes para plantearlas a toda
la clase como problemas inesperados.

EJEMPLO

Proyecto: La cadena alimentaria

Estándares MEN que se cubren (Colombia): Explico la dinámica


de un ecosistema teniendo en cuenta las necesidades de energía y
nutrientes de los seres vivos (cadena alimentaria).

Descripción: En este proyecto los estudiantes deben representar el


comportamiento de varios seres vivos en su respectivo ecosistema,
teniendo en cuenta tanto necesidades como cantidades disponibles
Ilustración 1-9: Espiral del Pensamiento Creativo diseñada por el Dr. de energía y nutrientes (cadena alimentaria). Para ello, deben
Mitchel Resnick elaborar una simulación, en MicroMundos o en Scratch, de una
cadena alimentaria teniendo en cuenta seres productores,
En un comienzo, este proceso lo debe planear y dirigir el hervivoros, carnívoros y omnivoros.
docente. Sin embargo, a medida que los estudiantes lo
interiorizan, aprenden a recorrerla de manera Fases del proyecto:
independiente para desarrollar sus propias ideas, 1. Los estudiantes deben imaginar un ecosistema que contenga
ponerlas a prueba, desafiar límites y fronteras, por lo menos cuatro seres vivos. Luego deben dibujar o importar
experimentar con alternativas, recibir retroalimentación los seres vivios que imaginaron. Además, deben dibujar el
de otros y generar nuevas ideas con base en sus escenario que representa el ecosistema.
experiencias (Resnick, 2007). En este punto, el docente debe estimular la reflexión para que
ellos verifiquen que el ecosistema que dibujaron corresponde
Es muy importante que al diseñar las diferentes fases de con los seres vivientes que en la simulación incluyeron en este.
un proyecto, en el cual los estudiantes utilizarán un Un problema inesperado puede plantearse mediante la pregunta
ambiente de programación como Scratch o ¿todos los seres vivos que representaste viven en ese
MicroMundos, los docentes tengan en cuenta los ecosistema? Si la respuesta es negativa, deben plantear por
elementos de la espiral de la creatividad. Por ejemplo, escrito al menos tres alternativas de solución (por ejemplo:
se deben incluir en el proyecto espacios para compartir cambiar el ecosistema, cambiar alguno de los seres vivos,
el trabajo realizado, para escuchar y valorar la cambiarlo todo, etc).
retroalimentación del grupo a cada trabajo individual y Además, cada ser vivo debe tener un tamaño proporcional en
para reflexionar sobre las posibles mejoras que se relación a los otros seres y elementos del ecosistema.
pueden realizar con base en la retroalimentación En caso de ser necesario, se debe destinar un lapso de tiempo
recibida. de la clase para investigar ,en Internet o en la Biblioteca
Escolar, qué seres vivos habitan en el ecosistema que
Para que la Espiral del Pensamiento Creativo funcione, dibujaron.
los docentes deben promover un ambiente en el que se 2. Esta fase inicia con otro problema inesperado: “La tarea quedó
permita imaginar, transformar, idealizar, desestructurar y mal planteada y hay que corregirla, de los cuatro seres vivos
reestructurar. Un ambiente donde se pueda comunicar, que se crearon en la fase anterior, debe haber por lo menos un
donde haya tolerancia para las reacciones espontáneas ser vivo de cada tipo: productor, herbívoro, carnívoro y
(López, 2000). Los docentes deben propiciar un omnivoro”.
ambiente de confianza, en el que sea más importante la Los estudiantes deben investigar qué seres vivos de cada tipo
Pág.19 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
habitan en el ecosistema que dibujaron. Luego, dibujar o cierta región de la pantalla, se debe hacer un control
importar los seres vivos correctos para que se cumpla la permanente (dentro de un por siempre) con el comando
condición planteada en la tarea rectificada. No es necesario que “posición y de objeto1” ó “posición x de objeto 1”. Si el
eliminen los seres vivos que habían creado en la fase 1, ser supera ese valor, entonces se lo desplaza en una
siempre y cuando correspondan al ecosistema. posición menor en el eje x o y, y se gira 45 grados.
3. A continuación, deben programar el desplazamiento de los
seres vivos por todo el espacio disponible y de manera aleatoria En la fase 6 es recomendable crear cada uno de los
(se pueden utilizar las instrucciones “rebotar si está tocando un seres vivos (ejemplo, el conejo) y hacerle toda la
borde” y “número al azar entre 1 y 15 grados” como parámetro programación para que se comporte de acuerdo a lo
de la instrucción girar). esperado. Una vez funcione correctamente la
Como problema inesperado pedir que se restrinja el movimiento programación, se copia varias veces el ser vivo
de manera que se aproxime al comportamiento real de cada ser (ejemplo, el conejo) y se ubica en posiciones diferentes
vivo. Por ejemplo, si el fondo tiene tierra y firmamento, entonces del escenario. Además, cada copia del ser vivo debe
un ser vivo que no vuela, no se puede mover en el área de la aparecer en momentos diferentes para simular la tasa
pantalla que representa el firmamento. Agregar variables para de reproducción.
controlar la velocidad a la que se desplaza cada ser vivo.
Algunos, como las plantas, tendrán velocidad 0. Por último, bien sea que los estudiantes utilicen el
4. Los estudiantes comparten el trabajo realizado con el resto de la entorno de programación en Ciencias Naturales para
clase y reciben retroalimentación tanto de sus compañeros, comunicar resultados obtenidos en procesos de
como del docente. indagación y/o experimentación o para elaborar
5. Atender la retroalimentación suministrada. Hacer la simulaciones de diversos fenómenos naturales, los
programación correspondiente para que cuando a un ser vivo lo docentes deben promover comportamientos personales
toque otro al que le sirve de alimento, el primero desaparezca y sociales fundamentales para el funcionamiento de la
(como si se lo hubiera comido). Espiral del Pensamiento Creativo, tales como:
6. El problema inesperado ahora es que debe programarse la • Escuchar activamente a compañeros y compañeras.
aparición de varios seres vivos iguales, ubicados en diferentes • Reconocer puntos de vista diferentes y compararlos
posiciones de la pantalla (por ejemplo, si uno de los seres vivos con los propios.
de la animación es un conejo, copiar entonces el objeto conejo, • Reconocer y aceptar el escepticismo de los demás
al menos tres veces, pues en un ecosistema rara vez se compañeros ante la información que se presenta.
encuentra un solo animal de cada especie). Solicitar a los • Cumplir con las funciones asignadas cuando se
estudiantes, al menos dos alternativas, para realizar esta tarea. trabaja en grupo.
Las apariciones deben hacerse de acuerdo a una tasa de • Respetar y cuidar los seres vivos y objetos
reproducción establecida para cada uno de los seres vivos. Por presentes en el entorno.
ejemplo, se reproducen más rápidamente los conejos que los
zorros.
Se puede destinar un tiempo de la clase para investigar la tasa
de reproducción de cada uno de los seres vivos que se incluyen
en la animación.
7. Compartir con el resto de la clase el trabajo realizado y recibir
retroalimentación de los compañeros.
8. Realizar los últimos ajustes al funcionamiento de la simulación y
agregar controles para manipular las tasas de reproducción y/o
la velocidad de desplazamiento para cada ser vivo.
9. Socializar con el resto de la clase el trabajo finalizado.

En este ejemplo hay que prestar atención a lo siguiente:

En la fase 3, se debe crear una variable por cada ser


vivo, que controle la velocidad a la cual este se va a
mover (los que no se desplazan, como las plantas,
deben inicializarse con valor 0). Por lo regular, esta
condición se implementa con el comando “esperar x
segundos”; sin embargo, nótese que si el valor de la
variable aumenta, en lugar de aumentar la velocidad, lo .
que hace es disminuirla ya que el tiempo de espera será
mayor. Para limitar el desplazamiento de un ser vivo a

Pág.20 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php


UNIDAD 2: ALGORITMOS, CONCEPTOS BÁSICOS

¿QUÉ ES UN ALGORITMO?

ALGORITMO EN SEUDOCÓDIGO
Paso 1: Inicio.
Paso 2: Leer los dos números (“a” y “b”). Avanzar al paso 3.
Paso 3: Comparar “a” y “b” para determinar cuál es mayor. Avanzar
al paso 4.
Paso 4: Si “a” y “b” son iguales, entonces ambos son el resultado
esperado y termina el algoritmo. En caso contrario, avanzar al paso
5.
Paso 5: Si “a” es menor que “b”, se deben intercambiar sus valores.
Avanzar al paso 6; si “a” no es menor que “b”, avanzar al paso 6.
Paso 6: realizar la operación “a” menos “b”, asignar el valor de “b” a
“a” y asignar el valor de la resta a “b”. Ir al paso 3.

Ilustración 2-1: Segunda fase del ciclo de programación. Investigaciones realizadas en Educación Básica (en
ambientes constructivistas) recomiendan incluir la
Luego de analizar detalladamente el problema hasta solución de problemas en el currículo de matemáticas
entenderlo completamente, se procede a diseñar un de forma que provea oportunidades a los estudiantes
algoritmo (trazar un plan) que lo resuelva por medio de para crear sus propios algoritmos y generalizarlos a un
pasos sucesivos y organizados en secuencia lógica. El conjunto específico de aplicaciones (Wilson, Fernández
concepto intuitivo de algoritmo (procedimientos y reglas) & Hadaway, 1993). Los estudiantes deben reflexionar
se puede encontrar en procesos naturales de los cuales sobre sus habilidades de planificación y sobre cómo
muchas veces no se es conciente. Por ejemplo, el pueden utilizar esas habilidades en diferentes contextos.
proceso digestivo es un concepto intuitivo de algoritmo Por otra parte, en un estudio sobre Logo (Clements &
con el que se convive a diario sin que haga falta un Meredith, 1992), se concluye que cuando los maestros
definición “matemática” del mismo. Tener claro el enfatizaron en la elaboración de un plan para desarrollar
proceso digestivo, no implica que los alimentos un procedimiento matemático (este incluía el uso de
consumidos nutran más. La familiaridad de lo cotidiano estrategias como dividir conceptos grandes en otros
impide a las personas ver muchos algoritmos que se más pequeños) encontraron que los estudiantes
suceden a su alrededor. Procesos, rutinas o biorritmos empezaron a utilizar con mayor frecuencia estrategias
naturales como la gestación, las estaciones, la de planificación y de dibujo para resolver problemas
circulación sanguínea, los ciclos cósmicos, etc, son matemáticos en los cuales no utilizaban Logo.
algoritmos naturales que generalmente pasan
desapercibidos. Dato Curioso
La palabra Algoritmo tiene su origen en el nombre del matemático
La rama del saber que mayor utilización ha hecho del Persa "Mohamed ibn Musa al Khwarizmi" (825 d.C.). Su apellido fue
enfoque algorítmico es las matemáticas. Durante miles traducido al latín como Algorismus y posteriormente paso al español
de años el ser humano se ha esforzado por abstraer la como Algoritmo. Khwarizmi fue bibliotecario en la corte del califa al-
estructura de la solución de problemas con el fin de Mamun y astrónomo en el observatorio de Bagdad. Sus trabajos de
determinar claramente cuál es el camino seguro, preciso álgebra, aritmética y tablas astronómicas adelantaron enormemente
y rápido que lleva a esas soluciones. Son abundantes el pensamiento matemático y fue el primero en utilizar la expresión
los ejemplos: máximo común divisor, teorema de al-yabr (de la que procede la palabra álgebra). Su trabajo con los
Pitágoras, áreas de figuras geométricas, división, suma algoritmos introdujo el método de cálculo utilizando la numeración
de números fraccionarios, etc. Todos estos algoritmos arábiga y la notación decimal.
matemáticos independizan los datos iniciales del
problema de la estructura de su solución, lo que permite
su aplicación con diferentes conjuntos de datos iniciales En el ámbito de la computación, los Algoritmos son una
(variables). herramienta que permite describir claramente un
conjunto finito de instrucciones, ordenadas
secuencialmente y libres de ambigüedad, que debe
EJEMPLO llevar a cabo un computador para lograr un resultado
Consideremos el algoritmo de Euclides para hallar el Máximo Común previsible. Vale la pena recordar que un programa de
Divisor (MCD) de dos números enteros positivos dados. Obsérvese computador consiste de una serie de instrucciones muy
que no se especifica cuáles son los dos números, pero si se precisas y escritas en un lenguaje de programación que
establece claramente una restricción: deben ser enteros y positivos. el computador entiende (Logo, Java, Pascal, etc).

En resumen, un Algoritmo es una secuencia ordenada


Pág.21 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
de instrucciones, pasos o procesos que llevan a la comunicación depende de elementos como vocabulario,
solución de un determinado problema. Los hay tan uso de comodines en lugar de vocablos precisos, uso de
sencillos y cotidianos como seguir la receta del médico, adverbios coloquiales en lugar de adverbios formales,
abrir una puerta, lavarse las manos, etc; hasta los que etc. Es fundamental que los estudiantes aprendan a
conducen a la solución de problemas muy complejos. diferenciar entre comunicación informal y comunicación
formal, cuya principal característica es la precisión. Los
algoritmos no admiten ningún tipo de ambigüedad ya
EJEMPLO que los lenguajes de programación tienen un
Un procedimiento que realizamos varias veces al día vocabulario restringido y preciso. Esto exige la
consiste en lavarnos los dientes. Veamos la forma de utilización de un conjunto determinado de palabras,
expresar este procedimiento como un Algoritmo: mandos o primitivas en cualquiera de los procedimientos
1. Tomar la crema dental que se elaboren.
2. Destapar la crema dental
3. Tomar el cepillo de dientes ACTIVIDAD
4. Aplicar crema dental al cepillo Discutir en parejas el ejemplo de la bombilla y proponer algunas
5. Tapar la crema dental mejoras. Luego, un voluntario pasa al tablero y escribe un Algoritmo
6. Abrir la llave del lavamanos con participación de toda la clase.
7. Remojar el cepillo con la crema dental
8. Cerrar la llave del lavamanos
9. Frotar los dientes con el cepillo
10. Abrir la llave del lavamanos Pensamiento Algorítmico
11. Enjuagarse la boca Cuando se habla de algoritmos, con frecuencia
12. Enjuagar el cepillo aparecen tres tipos de pensamiento que generalmente
13. Cerrar la llave del lavamanos se relacionan con ellos y que se utilizan
14. Secarse la cara y las manos con una toalla indiscriminadamente como sinónimos: Pensamiento
Computacional, Pensamiento Algorítmico y Pensamiento
Procedimental. Por lo tanto es importante puntualizar a
EJEMPLO qué se refiere cada uno de estos pensamientos.
El ejemplo de cambiar una bombilla (foco) fundida es uno de los más
utilizados por su sencillez para mostrar los pasos de un Algoritmo: Según Moursund (2006), el pensamiento computacional
1. Ubicar una escalera debajo de la bombilla fundida hace referencia a la representación y solución de
2. Tomar una bombilla nueva problemas utilizando inteligencia humana, de máquinas
3. Subir por la escalera o de otras formas que ayuden a resolver el problema. El
4. Girar la bombilla fundida hacia la izquierda hasta soltarla pensamiento algorítmico se refiere al desarrollo y uso de
5. Enroscar la bombilla nueva en el plafón hasta apretarla algoritmos que puedan ayudar a resolver un tipo
6. Bajar de la escalera especifico de problema o a realizar un tipo especifico de
7. Fin tarea. Por su parte, el pensamiento procedimental se
ocupa del desarrollo y utilización de procedimientos
diseñados para resolver un tipo especifico de problema
En términos generales, un Algoritmo debe ser: o para realizar un tipo especifico de tarea, pero que no
• Realizable: El proceso algorítmico debe terminar necesariamente, siempre resulta exitoso.
después de una cantidad finita de pasos. Se dice
que un algoritmo es inaplicable cuando se ejecuta Por otra parte y de acuerdo con un reporte del Consejo
con un conjunto de datos iniciales y el proceso Nacional de Investigación de Estados Unidos (National
resulta infinito o durante la ejecución se encuentra Research Council, NRC, 2004), conocido como “Being
con un obstáculo insuperable sin arrojar un Fluent with Information Technology”, el Pensamiento
resultado. Algorítmico incluye elementos tales como:
• Comprensible: Debe ser claro lo que hace, de descomposición funcional, repetición (iteración y/o
forma que quien ejecute los pasos (ser humano o recursión), organización de datos (registro, campo,
máquina) sepa qué, cómo y cuándo hacerlo. Debe arreglo, lista, etc), generalización y parametrización,
existir un procedimiento que determine el proceso diseño por descomposición de un problema en partes
de ejecución. más pequeñas y manejables (top-down) y refinamiento.
• Preciso: El orden de ejecución de las instrucciones
debe estar perfectamente indicado. Cuando se El Pensamiento Algorítmico está fuertemente ligado al
ejecuta varias veces, con los mismos datos iniciales, pensamiento procedimental requerido en la
el resultado debe ser el mismo siempre. La precisión programación de computadores; sin embargo, su
implica determinismo. desarrollo puede conducir a los estudiantes a
aproximarse guiada y disciplinadamente a los problemas
Un aspecto muy importante sobre el cual los estudiantes de forma que este pueda transferirse a otros ambientes
deben reflexionar es la ambigüedad del lenguaje natural diferentes a los de la programación. En pocas palabras,
que utilizan para comunicarse diariamente con sus la programación de computadores aporta al ámbito
semejantes. La informalidad o formalidad en la escolar un laboratorio para desarrollar habilidades
Pág.22 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
indispensables en la vida real del Siglo XXI. formales, los estudiantes demuestran su inteligencia por
medio del uso lógico de símbolos relacionados con
Una diferencia notoria entre un algoritmo y un programa conceptos abstractos.
es que el algoritmo incorpora las características
estructurales básicas de la computación,
independientemente de los detalles de su Aprestamiento
implementación; mientras que un programa tiene un Una forma motivadora y divertida de aprestamiento a la
conjunto específico de detalles para resolver un programación de computadores y que puede ayudar a
problema. Se puede observar que una técnica de los estudiantes a desarrollar los pensamientos
solución (correspondiente al algoritmo) se puede utilizar algorítmico y procedimental consiste en que ellos
en diferentes situaciones problemáticas realicen actividades con juegos de estrategia como
(correspondiente a los programas). De manera inversa, “Sokoban”, “Misión Escape”, “Tetris” e “Implode”, así
se espera que una solución exitosa de problemas como ejercicios de Razonamiento Abstracto. En
incorpore procesos generales que son independientes Sokoban se deben llevar las piedras hacia el lugar
de las situaciones específicas (NRC, 2004). Esto se donde aparecen los prismas y para lograrlo, estas se
conoce como experiencias de vida y los estudiantes deben empujar con el personaje teniendo cuidado en los
deben adquirirlas en su paso por la educación básica y movimientos que se hacen para no bloquear el juego ya
media para desempeñarse adecuadamente en su vida que el personaje solo puede empujar una piedra a la vez
diaria. y no puede moverlas hacia atrás, siempre hacia delante.
Hay disponibles varias versiones de Sokoban para
Este es todo un reto para la educación, reto en el que la descargar y para jugar en línea.
programación de computadores puede hacer una
contribución positiva. Un programa consiste de uno o
más procedimientos con instrucciones paso a paso que
pueden ejecutarse en un computador; por lo tanto,
utilizar el diseño de procedimientos que solucionen o
ayuden a solucionar problemas con diferentes niveles de
complejidad es un recurso que puede aprovechar el
docente para captar el interés de los estudiantes en
actividades de programación. Por ejemplo, asignar la
tarea de diseñar un procesador de texto básico (ingreso
del texto mediante teclado, mostrarlo en la pantalla y
guardarlo en el disco duro) es una tarea relativamente
sencilla. Pero el proyecto puede aumentar su
complejidad si se añaden funciones para dar formato al
texto (fuentes, tamaño y características especiales).
Posteriormente el proyecto puede crecer si se agregan
funcionalidades para manejar imágenes y tablas. Al
igual que en este ejemplo, se pueden diseñar proyectos
de clase interesantes para mantener motivados a los
estudiantes y cuyas tareas y retos sean progresivos en
complejidad; que cada nuevo reto parta de lo construido
con anterioridad. En resumen, los procedimientos son Ilustración 1: El marcianito debe mover la cuatro piedras redondas
un tipo particular de tarea que busca solucionar hasta ubicarlas sobre los rombos morados.
problemas específicos y al desarrollarlos se ponen en http://www.matejoven.mendoza.edu.ar/matejue/juegos/sokoban/sokoban.htm
juego los pensamientos algorítmico y procedimental.
Por su parte, el juego “Misión Escape” de la serie
David Moursund (2006) se basó en sus propias “Chicos del Barrio” de Cartón Networks
experimentaciones y en la teoría de los cuatro estados (http://www.cartoonnetworkla.com/spanish/) se puede
de desarrollo cognitivo planteada por Piaget para utilizar para mejorar la habilidad de los estudiantes para
proponer un planteamiento que amarra la computación llevar a cabo tareas en forma ordenada y lógica. En este
con una escala de desarrollo cognitivo en la que se da juego, los participantes deben encontrar la mejor vía de
bastante protagonismo al desarrollo del pensamiento escape a través de la casa del árbol y recorrerla en la
algorítmico en los niños. Según Moursund (2006) en la menor cantidad de movimientos posibles. Para despejar
etapa de las operaciones concretas los niños empiezan el camino de objetos hay que seguir las reglas del juego
a manipular lógica y sistemáticamente símbolos en un y si no se mueven los objetos precisos, en la dirección
computador y aprenden a apoyarse en software para correcta y en el orden adecuado, el camino se puede
resolver un rango amplio de problemas y tareas de tipo bloquear.
general. De esta manera, ganan habilidad considerable
tanto en la utilización de lenguajes como Scratch y
MicroMundos, como en la manipulación de ambientes
gráficos. Posteriormente, en la etapa de operaciones
Pág.23 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
2 1
3

Ilustración 2: Comienzo del nivel tres del juego “Misión Escape” de Adaptado de “Razonamiento Abstracto”, Serrano (1998)
Cartoon Network. El personaje debe alcanzar la baldosa café que
aparece en la parte inferior del cuadrado. Por su parte, juegos como Guido van robot, Tetris,
Implode y el mismo Sokoban, además de la versión para
Computadores Personales (PCs), ofrecen versiones
para los computadores OX de la iniciativa OLPC (One
Laptop Per Child). Esto es importante ya que cada día
más niños en América Latina disponen de estos equipos
1 y los utilizan como herramienta para el aprendizaje.
2

3 ACTIVIDAD
Invitar a los estudiantes a reflexionar sobre el lenguaje que utiliza
diariamente para comunicarse con sus padres, hermanos, profesores
Ilustración 3: El personaje ya ha movido los obstáculos (1, 2, 3) y y compañeros. ¿Utiliza un lenguaje preciso? ¿utiliza vocablos
está a punto de alcanzar la baldosa café que le permite avanzar al corrientes?
nivel siguiente.
ACTIVIDAD
La ilustración 2 muestra el comienzo del nivel tres del A diferencia de los seres humanos que realizan actividades sin
juego (cada nivel es más difícil que el anterior). El detenerse a pensar en los pasos que deben seguir, los
personaje de ”Chicos del Barrio” se encuentra en el computadores son muy ordenados y necesitan que el programador
punto de inicio y debe encontrar el mejor camino para les especifique cada uno de los pasos necesarios y su orden lógico
llegar a la baldosa café de la parte inferior del cuadrado. de ejecución.
Para lograrlo, debe mover las cajas precisas (marcadas Listar una serie de pasos para realizar una tarea y presentarlos a los
con 1, 2 y 3), en la dirección correcta y en el orden estudiantes en forma desordenada para que ellos los ordenen.
adecuado. En la ilustración 3 se pueden apreciar las Por ejemplo, ordenar los pasos para pescar:
cajas movidas y el personaje a punto de alcanzar la ___ El pez se traga el anzuelo.
baldosa café que le permite avanzar al nivel siguiente. ___ Enrollar el sedal.
___ Tirar el sedal al agua.
El razonamiento abstracto es otro tipo de actividad de ___ Llevar el pescado a casa.
aprestamiento que se puede llevar a cabo con los ___ Quitar el Anzuelo de la boca del pescado.
estudiantes para desarrollar los pensamientos ___ Poner carnada al anzuelo.
algorítmico y procedimental. El razonamiento abstracto ___ Sacar el pescado del agua.
básicamente es un proceso de ordenación de objetos,
situaciones o sucesos en secuencias lógicas de acuerdo ACTIVIDAD
con algún criterio previamente establecido. Para ello se Solicitar a los estudiantes que traigan para la próxima clase los
debe comprender e interpretar los cambios en función siguientes elementos:
de la forma cómo varían las características de interés de • Arroz, lentejas o maíz (medio puñado).
los objetos o sucesos estudiados. Todo cambio conduce • Una banda de caucho.
a una alteración de algún aspecto del objeto, suceso o • Un vaso plástico.
situación (Sánchez, 1993). • Un trozo de papel resistente (15cm x 15cm aproximadamente).

Actividades como la siguiente exige de los estudiantes Divida los estudiantes en dos grupos y suministre a un grupo las
un alto grado de observación para determinar qué es lo siguientes instrucciones para elaborar “Maracas”:
que cambia (figura, forma, posición, etc) y cuál es el 1. Recortar del papel resistente un trozo más grande que la boca
patrón de cambio (dirección, tamaño, color, etc): del vaso plástico.
2. Introducir el arroz, las lentejas o el maíz en el vaso (cada
elemento produce una sonoridad diferente).
3. Poner sobre la boca del vaso el papel.
Pág.24 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
4. Fijar el papel al vaso con ayuda de la banda de caucho.
5. Asegurarse que la boca del vaso quede sellada.

Suministre al otro grupo de estudiantes las siguientes instrucciones


para elaborar “Maracas”:
1. Recortar del papel resistente un trozo más grande que la boca
del vaso plástico.
2. Poner sobre la boca del vaso el papel.
3. Fijar el papel al vaso con ayuda de la banda de caucho.
4. Asegurarse que la boca del vaso quede sellada.
5. Introducir el arroz, las lentejas o el maíz en el vaso (cada
elemento produce una sonoridad diferente).

Las instrucciones dadas a ambos grupos son las mismas. Sin


embargo, esta actividad ilustra muy claramente la importancia que
tiene el orden en que se ejecutan las instrucciones de un algoritmo.

Dato Curioso
En 1936, el lógico y matemático inglés Alan Turing (1291-1954),
construyó la primera máquina conceptual como una herramienta
matemática para estudiar los procesos algorítmicos. Un cálculo en
una máquina de Turing consta de una secuencia de pasos que
ejecuta su unidad de control. Si un problema se puede resolver en la
máquina de Turing entonces es algorítmico, y recíprocamente si un
problema tiene solución algorítmica, entonces se puede resolver en
la máquina de Turing.
(Adaptado de ¿Qué es realmente un Algoritmo?, Escuela de
Ingeniería, Colombia.)

A continuación se presentan conceptos básicos que los


estudiantes deben conocer (y dominar) antes de iniciar
el aprendizaje de las estructuras básicas (secuencial,
decisión y repetitiva) del lenguaje algorítmico y de
programación que abordaremos en la Unidad 3.

Pág.25 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php


REPRESENTACIÓN DE ALGORITMOS

Los Algoritmos se puede expresar de muchas maneras,


pero en esta guía se tratarán solo dos formas: Utilizar Diagramas de Flujo para representar un
Seudocódigo y Diagrama de Flujo. En Seudocódigo la algoritmo tiene claras ventajas, especialmente cuando
secuencia de instrucciones se representa por medio de son construidos por estudiantes de básica y media.
frases o proposiciones, mientras que en un Diagrama Numerosas investigaciones han mostrado que el
de Flujo se representa por medio de gráficos. Aprendizaje Visual es uno de los mejores métodos para
enseñar habilidades del pensamiento. Las técnicas que
EJEMPLO utilizan formas graficas para representar ideas e
Elaborar un Algoritmo para calcular el área de cualquier triángulo información ayudan a los estudiantes a clarificar su
rectángulo y presentar el resultado en pantalla. pensamiento, y a procesar, organizar y priorizar nueva
información. Los diagramas visuales revelan patrones,
SEUDOCÓDIGO interrelaciones e interdependencias además de
Paso 1: Inicio estimular el pensamiento creativo.
Paso 2: Asignar el número 2 a la constante "Div"
Paso 3: Conocer la base del triángulo y guardarla en la variable La utilización de Diagramas ayuda a los estudiantes a:
"Base" • Clarificar el pensamiento : Ellos pueden ver cómo se
Paso 4: Conocer la altura del triángulo y guardarla en la variable conectan los procesos y se dan cuenta de cómo
"Altura" estos se pueden organizar o agrupar para darles el
Paso 5: Guardar en la variable "Area" el valor de multiplicar "Base" orden lógico correcto.
por "Altura" • Identificar pasos erróneos : Sobre un diagrama es
Paso 6: Guardar en la variable "Area" el valor de dividir "Area" más fácil identificar los cambios que se requieren
entre "Div" para el correcto funcionamiento de un programa de
Paso 7: Reportar el valor de la variable "Area" computador que hacerlo sobre el código.
Paso 8: Final
DIAGRAMA DE FLUJO Los Diagramas de Flujo son una de las técnicas más
utilizadas para representar gráficamente la secuencia de
instrucciones de un Algoritmo. Estas instrucciones están
compuestas por operaciones, decisiones lógicas y ciclos
repetitivos, entre otros. La solución de un problema
puede contener varios conjuntos de instrucciones
(procedimientos o métodos) que tienen como finalidad
ejecutar cada uno de los procesos necesarios para
llegar a la solución de un problema a partir de los datos
disponibles (estado inicial).

Las ventajas de diseñar un Diagrama de Flujo antes de


empezar a generar el código de un programa (Rojas &
Ñacato, 1980) son, entre otras:
• Forzar la identificación de todos los pasos de una
solución de forma clara y lógica;
• Establecer una visión amplia y objetiva de la
solución;
• Verificar si se han tenido en cuenta todas las
Ilustración 2-4: Algoritmo para calcular el área de cualquier posibilidades;
triángulo rectángulo • Comprobar si hay procedimientos duplicados;
• Representar gráficamente una solución (es más
El seudocódigo está compuesto por proposiciones simple hacerlo con gráficas que mediante palabras);
informales en español que permiten expresar
• Facilitar a otras personas la comprensión de la
detalladamente las instrucciones que llevan desde un secuencia lógica de la solución planteada;
estado inicial (problema) hasta un resultados deseado
• Posibilitar acuerdos con base en la aproximación
(solución). Por lo regular, los algoritmos se escriben por
común a una solución de un problema, resolver
refinamiento: se escribe una primera versión que luego
ambigüedades o realizar mejoras;
se descompone en varios subproblemas (el número
• Establecer posibles modificaciones (resulta más fácil
depende de la complejidad del problema)
depurar un programa con el diagrama que con el
independientes entre sí. Si es necesario se va refinando
listado del código);
cada vez las instrucciones hasta que las proposiciones
generales en español como las del ejemplo anterior se • Agilizar la codificación (traducción) del algoritmo en
puedan codificar en el lenguaje seleccionado para hacer un lenguaje de programación;
la programación (en el caso de esta guía será Logo). • Servir como elemento de documentación de la
solución del problema.
Pág.26 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
ACTIVIDAD
Basándose en la última actividad planteada en la unidad 1, elaborar
un algoritmo en seudocódigo para cada uno de los siguientes
problemas (se puede utilizar una copia de la plantilla que aparece en
el anexo 7):
1. Hallar el perímetro de un cuadrado cuyo lado mide 5 cm
2. Hallar el área de un cuadrado cuyo lado mide 5 cm.
3. Hallar uno de los lados de un rectángulo cuya área es de 15 cm2
y uno de sus lados mide 3 cm.
4. Hallar el área y el perímetro de un círculo cuyo radio mide 2 cm.
5. Hallar el área de un pentágono regular de 6 cm de lado y con 4
cm de apotema.

SIMBOLOGÍA DE LOS DIAGRAMAS DE FLUJO

La estandarización de los símbolos para la elaboración de Diagramas de Flujo tardó varios años. Con el fin de evitar la
utilización de símbolos diferentes para representar procesos iguales, la Organización Internacional para la
Estandarización (ISO, por su sigla en inglés) y el Instituto Nacional Americano de Estandarización (ANSI, por su sigla en
inglés), estandarizaron los símbolos que mayor aceptación tenían en 1985. Los siguientes son los principales símbolos
para elaborar Diagramas de Flujo:

Inicio/Final Decisión
Se utiliza para indicar el inicio y el final Indica la comparación de dos datos y
de un diagrama; del Inicio sólo puede dependiendo del resultado lógico
salir una línea de flujo y al Final sólo (falso o verdadero) se toma la
debe llegar una línea. decisión de seguir un camino del
diagrama u otro.
Entrada General Iteración
Entrada/Salida de datos en General (en Indica que una instrucción o grupo de
esta guía, solo la usaremos para la instrucciones deben ejecutarse varias
Entrada). veces.

Entrada por teclado Salida Impresa


Instrucción de entrada de datos por Indica la presentación de uno o varios
teclado. Indica que el computador debe resultados en forma impresa.
esperar a que el usuario teclee un dato
que se guardará en una variable o
constante.
Llamada a subrutina Salida en Pantalla
Indica la llamada a una subrutina o Instrucción de presentación de
procedimiento determinado. mensajes o resultados en pantalla.

Acción/Proceso General Conector


Indica una acción o instrucción general Indica el enlace de dos partes de un
que debe realizar el computador diagrama dentro de la misma página.
(cambios de valores de variables,
asignaciones, operaciones aritméticas,
etc).
Flujo Conector
Indica el seguimiento lógico del Indica el enlace de dos partes de un
diagrama. También indica el sentido de diagrama en páginas diferentes.
ejecución de las operaciones.

El Diagrama de Flujo es una herramienta gráfica valiosa para la representación esquemática de la secuencia de
instrucciones de un algoritmo o de los pasos de un proceso. Se recomienda consultar el siguiente componente curricular
que apoya la elaboración de Diagramas de Flujo: http://www.eduteka.org/modulos.php?catx=4&idSubX=124.

Pág.27 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php


REGLAS PARA LA ELABORACIÓN DE DIAGRAMAS DE FLUJO

Cuando el algoritmo se desea expresar en forma de


diagrama de flujo, se deben tener en cuenta algunas
reglas o principios básicos para su elaboración (Rojas &
Ñacato, 1980):
• Poner un encabezado que incluya un título que
identifique la función del algoritmo; el nombre del
autor; y la fecha de elaboración;
• Sólo se pueden utilizar símbolos estándar (ISO
5807);
• Los diagramas se deben dibujar de arriba hacía
abajo y de izquierda a derecha;
• La ejecución del programa siempre empieza en la
parte superior del diagrama; Ilustración 2-6: Plantilla StandardGraph ISO 5807 para la elaboración
• Los símbolos de “Inicio” y “Final” deben aparecer manual de Diagramas de Flujo.
solo una vez;
• La dirección del flujo se debe representar por medio También existe software especial para elaborar
de flechas (líneas de flujo); Diagramas de Flujo en forma rápida y fácil. Los
• Todas las líneas de flujo deben llegar a un símbolo o programas para esta tarea permiten a los estudiantes:
a otra línea; • Almacenar digitalmente los diagramas construidos;
• Una línea de flujo recta nunca debe cruzar a otra. • Introducirles modificaciones fácilmente;
Cuando dos líneas de flujo se crucen, una de ellas • Imprimir copias de los diagramas para compartirlos
debe incluir una línea arqueada en el sitio donde con compañeros o documentar sus trabajos;
cruza a la otra (ilustración 2-5); • Exportarlos en varios formatos gráficos para
• Se deben inicializar las variables que se utilicen o utilizarlos en otros programas;
permitir la asignación de valores mediante consulta al • Alinear y organizar los símbolos automáticamente;
usuario; • Agregar colores, tamaño de letra y sombreados para
• Las bifurcaciones y ciclos se deben dibujar lograr una apariencia profesional;
procurando una cierta simetría; • Ahorrar tiempo en la modificación de un diagrama ya
• Cada rombo de decisión debe tener al menos dos que no es necesario hacer todo el dibujo
líneas de salida (una para SI y otra para NO); nuevamente;
• Las acciones y decisiones se deben describir
utilizando el menor numero de palabras posible; sin En las siguientes direcciones de Internet se puede
que resulten confusas o poco claras; encontrar información de software para la elaboración
• Si el Diagrama se vuelve complejo y confuso, es de Diagramas de Flujo:
mejor utilizar símbolos conectores para reducir las • Eduteka – Diagramas de Flujo
http://www.eduteka.org/modulos.php?catx=4&idSubX=117
líneas de flujo;
• GraFI-co
• Todo el Diagrama debe ser claro, ordenado y fácil de http://www.eduteka.org/pdfdir/graFIco.rar
recorrer; • SmartDraw
• El Diagrama se debe probar recorriéndolo con datos http://www.smartdraw.com
iniciales simples (prueba de escritorio). • WinEsquema
http://www.softonic.com/ie/27771/WinEsquema
• Dia Win32 Installer
http://www.softonic.com/ie/33781/dia
• DFD 1.0
http://www.softonic.com/ie/16035/DFD
• Paraben's Flow Charter
Incorrecto Correcto http://www.paraben.com/html/flow.html
Ilustración 2-5: Cruce de líneas de flujo • Edraw Flowchart
http://www.edrawsoft.com/flowchart.php
Los Diagramas se pueden dibujar utilizando lápiz y • Novagraph Chartist
http://www.tucows.com/preview/289535.html
papel, en cuyo caso resultan muy útiles las plantillas
• Flow Charting 6
plásticas como la de la ilustración 2-6. Estas descargan http://www.patton-patton.com
al estudiante de la preocupación por lograr uniformidad • OrgPlus
en el dibujo. http://www.tucows.com/preview/281861.html
• Antechinus Draw Magic
http://www.tucows.com/preview/254904.html

Pág.28 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php


ACTIVIDAD matemático Pierre Fermat, 1601-1665), para averiguar si se trataba
Basándose en la actividad anterior, convertir los algoritmos de un número primo. Al cabo de 10 días, el resultado fue "NO". Este
elaborados en seudocódigo en diagramas de flujo: es el cálculo realizado por un computador en el que se ha tardado
1. Hallar el área de un cuadrado cuyo lado mide 5 cm. más en dar una respuesta de "sí" o "no". (Libro Gunness de los
2. Hallar uno de los lados de un rectángulo cuya área es de 15 cm2 Records 2002)
y uno de sus lados mide 3 cm.
3. Hallar el área y el perímetro de un círculo cuyo radio mide 2 cm.
4. Hallar el área de un pentágono regular de 6 cm de lado y con 4 Para avanzar en el tema de los Algoritmos resulta
cm de apotema. indispensable que los estudiantes comprendan algunos
conceptos básicos (variables, constantes,
identificadores, funciones, operadores, etc), los cuales
Dato Curioso serán indispensables tanto para diseñar algoritmos
En el año 1986, se introdujo en el supercomputador CRAY-2 la cifra como para traducirlos a un lenguaje de programación,
2^220+1, o número de Fermat 20 (que debe su nombre al cualquiera que este sea (Logo, Java, Visual Basic, etc).

CONCEPTOS BÁSICOS DE PROGRAMACIÓN

Variables
Para poder utilizar algoritmos con diferentes conjuntos Las variables Globales se crean con los comandos da
de datos iniciales, se debe establecer una o nombra. Estas variables solo pierden su valor cuando
independencia clara entre los datos iniciales de un se cierra MicroMundos o cuando se borran con el
problema y la estructura de su solución. Esto se logra comando bnombres.
mediante la utilización de Variables (cantidades que se
suelen denotar con letras –identificadores- y que pueden En Scratch, se debe hacer clic en el botón “Variables” de
tomar cualquier valor de un intervalo de valores la paleta de bloques.
posibles).

En programación, las Variables son espacios de trabajo


(contenedores) reservados para guardar datos (valores).
El valor de una Variable puede cambiar en algún paso
del Algoritmo o permanecer invariable; por lo tanto, el
valor que contiene una variable es el del último dato
asignado a esta. En el Algoritmo de la Ilustración 2-4,
"área" es un ejemplo de Variable; en el paso 5 se
guardó en ella el resultado de multiplicar "base" por
"altura" y en el paso 6 se utilizó nuevamente para
guardar el valor de dividir su propio contenido ("área")
entre la Constante "div".

MicroMundos ofrece tres tipos de variables: Locales,


Globales y de Estado. Las primeras retienen su valor el
tiempo que dure la ejecución del procedimiento en el
cual se utiliza. Las variables Locales se pueden crear
con las primitivas asigna y local o en la línea del título de
un procedimiento.
Luego se hace clic en el botón “Nueva variable” y se
En MicroMundos se utiliza el comando da para asignar asigna un nombre a la variable, en este caso “Puntaje”.
un valor a una variable o constante. La sintaxis es: Cuando se genera una variable, aparecen los bloques
da “nombreVariable valor correspondientes a ella. Se puede escoger si la variable
que es equivalente a la forma nombreVariable=Valor es para todos los Objetos (global) o solo para un Objeto
que se utiliza en la mayoría de los lenguajes de (local).
programación.
Con el botón “Borrar una variable” se borran todos los
Para utilizar el valor almacenado en una variable o bloques asociados con una variable.
constante se debe anteponer dos puntos (:) al nombre;
en
:nombreVariable Al hacer clic sobre el cuadrito de selección, se empieza
los dos puntos significan “no quiero que ejecutes el a Informar el valor de la variable “Puntaje” en el
comando nombreVariable; quiero el valor almacenado escenario.
en nombreVariable”.
Pág.29 - 9-nov-09 - Segunda Edición - Descargue gratuitamente esta Guía: http://www.eduteka.org/GuiaAlgoritmos.php
PROGRAMACION / Clave: 11214
UABC Facultad de Ingenieria Arquitectura y Diseño

BIBLIOGRAFIA:
COMO PROGRAMAR EN C/C++,Deitel & Deitel, Prentice Hall,
ISBN:9688804711

C/C++ CURSO DE PROGRAMACIÓN, Fco. Javier Ceballos, Alpha


Omega ISBN:978847897628

FUNDAMENTOS DE PROGRAMACIÓN, Jose Luis Joyanes A, ed.


McGrawhill, ISBN:9788448139865

http://yepiz.webs.com

Pedro Núñez Yépiz


Email: pedro_yepiz@uabc.edu.mx

También podría gustarte