Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Conceptos
bsicos
INTRODUCCIN
1.2. ALGORITMO
La palabra algoritmo se deriva de la traduccin al latn de la palabra rabe
alkhowarizmi, nombre de un matemtico y astrnomo rabe que escribi
un tratado sobre manipulacin de nmeros y ecuaciones en el siglo IX.
La solucin a cualquier problema de cmputo involucra la ejecucin de
una serie de acciones en orden especfico. Un procedimiento para resolver
un problema en trminos de: a) Las acciones a ejecutarse y b) el orden
en el cual estas acciones deben ejecutarse se llama algoritmo. Un ejemplo
de un algoritmo para llegar a la escuela:
Salir de la cama
Quitarse la pijamas
Darse un bao
Vestirse
Desayunar
1.3 PROGRAMA
Secuencia de instrucciones mediante las cuales se ejecutan diferentes
acciones de acuerdo con los datos que se estn procesando. Es un
algoritmo desarrollado para ser utilizado por la computadora. Expresin
de un algoritmo en un lenguaje preciso que puede llegar a entender una
mquina de cmputo.
CAPITULO 2
Los datos y
operaciones
bsicas
Fases para la creacin de un programa.
Esta fase est dada por el enunciado del problema, el cual requiere una
definicin clara y precisa. Es importante que se conozca lo que se desea
que realice la computadora; mientras esto no se conozca del todo no tiene
mucho caso continuar con la siguiente etapa.
2.6 DOCUMENTACIN
TIPOS DE DATOS. Todos los datos tienen un tipo asociado con ellos. Un
dato puede ser un simple carcter, tal como b, un valor entero tal como
35. El tipo de dato determina la naturaleza del conjunto de valores que
puede tomar una variable.
Tipo entero: representa nmeros enteros con o sin signo, que estarn
compuestos por los dgitos del 0 al 9, pudiendo ser precedidos por los
signos + o -.
Algunos ejemplo de datos enteros son: 0, 23, -176, -1, etc.
Para definir variables en C se antepone la palabra reservada del tipo al
identificador de la variable. El tipo de datos entero se define en el lenguaje
de programacin C por la palabra reservada int.
Para definir un tipo de dato en C se escribe lo siguiente:
int nombre_variable = valor;
No es necesario que la variable tenga un valor predeterminado. Se puede
definir sin asignarle ningn valor. Si tenemos varios datos que son del
mismo tipo, se pueden definir todas en la misma lnea de cdigo
escribiendo un nico int, separando el nombre de las variables por ,.
Una vez que se haya acabado de definir variables, se cierra la lnea de
cdigo con ;,
Por ejemplo: int edad = 24;
int edad;
int edad, num, contador;
Tipo real: Se emplean para representar nmeros reales (con decimales).
Para definir datos reales se antepone la palabra reservada float al
identificador de la variable.
float identificador = valor;
Por ejemplo: float numero1, numero2;
float numero3 = 123.43;
float numero3;
Tipo carcter: Este tipo de datos se emplea para representar un carcter
perteneciente a un determinado cdigo utilizado por el ordenador
(normalmente el cdigo ASCII). Para representar este tipo de dato se
antepone la palabra reservada char al identificador de la variable.
Char identificador = valor;
Una constante tipo char se representa como un solo carcter encerrado
entre comillas simples.
Por ejemplo: char letra, letra2;
char letra=a;
Ejecucin secuencial
Seleccin if simple
Se trata de una estructura de control que permite redirigir un curso de
accin segn la evaluacin de una condicin simple, sea falsa o verdadera.
Si la condicin es verdadera, se ejecuta el bloque de sentencias 1, de lo
contrario, se ejecuta el bloque de sentencias 2.
switch-case
Esta sentencia permite ejecutar una de entre varias acciones en funcin
del valor de una expresin. Es una alternativa a if then else cuando se
compara la misma expresin con diferentes valores.
Select (Expresin)
Case Valor1
(Bloque de sentencias 1)
Case Valor2
(Bloque de sentencias 2)
Case Valor n
(Bloque de sentencias n)
Case Else
(Bloque de sentencias "Else")
End Select
if (condicin) {
} else {
// Haz esto
} En caso contrario {
2- BUCLES: WHILE
If else nos permita decidir si queramos ejecutar o no una instruccin en
funcin de una condicin, los bucles nos permiten utilizar una condicin
para determinar cuntas veces queremos ejecutar una instruccin.
While (condicin) {
}
3- BUCLES: DO WHILE
Los bucles do while, son muy parecidos a los bucles while, slo que
comprobamos si la condicin es cierta al final del bucle en lugar de al
principio. As nuestras instrucciones se ejecutan siempre al menos una
vez, lo que no ocurre en las condiciones while si la condicin es falsa.
$cantidad = 1;
Do {
echo ($cantidad);
} while ($cantidad<1);
En nuestro lenguaje seria
$cantidad = 1
Do (// ejecuta
PSEUDOCODIGO LENGUAJE C
Entero a[100], x[50] Int a[100], x[50];
PSEUDOCODIGO LENGUAJE C
Tipo_dato_ident_arreglo[tam_arreglo] Tipo_dato_ident_arreglo[tam_arreglo];
Dnde:
Tipo_dato: Se refiere al tipo de dato de cada elemento del arreglo; puede
ser entero, real, carcter, etctera.
ident_arreglo: Es el nombre que representa a todo el arreglo
tam_arreglo: Es la cantidad de elementos que contiene el arreglo.
ARREGLOS EN LA MEMORIA:
Si tomamos la declaracin del arreglo lista del ejemplo anterior, as se
representara en memoria entero lista [4]:
Posicin de memoria 1000 1001 1002 1003 1004 1005 1006 1007
Lista 0 1 2 3
PSEUDOCODIGO LENGUAJE C
Real x[8] Float x[8];
ELEMENTOS
PSEUDOCODIGO LENGUAJE C
a <- x[0] + x[1] + x[2] a = x[0] + x[1] + x[2]
Imprimir a printf(%f,a)
PSEUDOCODIGO LENGUAJE C
Tipo_dato identif[tam_arreglo]<-{valores} Tipo_dato identif[tam_arreglo] =
Entero lista[5] <- [10, 17, 8, 4, 9] {valores}
Int lista [5] = {10, 17, 8, 4, 9}
PSEUDOCODIGO LENGUAJE C
Tipo_dato ident_arr[pos]<-valor Tipo_dato ident_arr[pos] = valor;
Entero b[3] <- 18 Int b[3] = 18;
Donde valor es un dato, el resultado de una llamada a funcin o de alguna
operacin lgica o aritmtica, etc. En este ejemplo se le asigna el valor
18 al cuarto elemento del arreglo que se encuentra en la posicin 3.
ARREGLOS DE CARACTERES
Los arreglos son necesarios para la implementacin de cadenas de
caracteres. Una cadena de texto es un conjunto de caracteres. Hay que
recordar que en el lenguaje C no existe el tipo de dato cadena (string)
como en otros lenguajes de programacin, por lo que se utiliza un arreglo
de caracteres, para poder almacenar una cadena:
PSEUDOCODIGO LENGUAJE C
caracter cad[ ]<-Lenguaje Char cad[ ]=Lenguaje;
PSEUDOCODIGO LENGUAJE C
Tipo_dato ident_arr[tam_fila] [tam_col] Tipo_dato ident_arr [tam_fila] [tam_col];
Entero b[3] [4] Int b [3][4];
Dnde:
PSEUDOCODIGO LENGUAJE C
t_dato identif[fil] [col] <- {valores} T_dato identif[fil] [col={valores};
Entero a[3][3]<-[1, 2, 3, 4, 5, 6, 7, 8, 9} Int a [3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
PSEUDOCODIGO LENGUAJE C
Desde( i<-0, i<3, <-i+1) for( i<-0, i<3, <-i+1)
Desde( j<-0, j<4, <-j+1) for( j<-0, j<4, <-j+1)
Leer mat[i][j] scanf(%d, &mat[i][j]);
PSEUDOCODIGO LENGUAJE C
tipo_dato ident_arr[fil] [col] <- valores tipo_dato ident_arr[fil] [col=valores;
Entero b[3][5]<- 18 Int a [3][5] = 18;
Ejemplo:
Programa que guardar los nombres de los alumnos de un saln de clases
en un arreglo y posteriormente imprimirlos.
Note que el arreglo x slo tiene un ndice i, esto quiere decir que se est
almacenando en uno de los 50 posibles lugares y en los 20 posibles sitios
que tiene para cada carcter.
Una de las funciones es main (), donde se inicia la ejecucin del programa.
El resto de las funciones se llaman desde main () y desde el interior de
otras funciones.
Funcin
void Identif_funcion ( )
{
Declaracin de variables;
Cuerpo de la funcin;
}
VARIABLES
RECURSIVIDAD
#include <conio.h>
#include <stdio.h>
float factorial(int n)
{
float f;
if (n==0) f=1;
else f=n*factorial(n-1);
return f;
}
main()
{
float fact;
int n;
printf("\nDame un numero: ");
scanf("%d",&n);
fact=factorial(n);
printf("\nEl factorial=%f\n",fact);
getch();
return 0;
TIPO * nombre_puntero ;
Donde TIPO es cualquier tipo definido. Asi, un puntero a caracter se
declararia de la siguiente forma:
char *pchar;
#include <stdio.h>
#include <malloc.h>
char *pchar;
int *pint;
.
.
.
int *pint2;
pint2 = pint;
GENERACIN DE CDIGO
ERRORES MS COMUNES
PRIMER CASO
SEGUNDO CASO
char *inicializa();
void otra_funcion();
main()
{
char *buff;
.
.
.
buff = NULL;
buff = inicializa();
/* hasta aqui todo parece correcto */
otra_funcion();
/* aqui ya no se puede asegurar buff = "hola"*/
.
.
.
}
char *inicializa()
{
char buffer[5];
sprintf(buffer,"hola");
return(buffer);
}
.
.
.
Volvamos a analizar la pila:
| |
SP --->+---------------+
| 5 bytes para | <------- Espacio reservado para la variable
| buffer | local buffer
+---------------+
| @ de retorno |
+---------------+
| buff = NULL |
+---------------+
| resto de vars |
| locales al |
| main |
+---------------+
Cuando la funcion retorna tenemos la siguiente situacin:
| |
+---------------+
| "hola\0" | @ base de 'buffer'
+---------------+
| @ de retorno |
SP --->+---------------+
| buff= @buffer |
+---------------+
| resto de vars |
| locales al |
| main |
+---------------+
En cuanto se llama a otra funcin, el espacio destinado a 'buffer' es
destinado a parmetros de la llamada o a las variables locales de la
funcin invocada, con lo que "hola\0" ser machacado por otros valores.
Solo funcionaria si el resto de funciones invocadas no tuvieran ni
parmetros ni variables locales.
char *inicializa();
main()
{
char *buff;
.
.
.
buff=inicializa();
.
.
.
}
char *inicializa()
{
char *buffer;
buffer = malloc (5);
sprintf(buffer,"hola");
return (buffer);
}
.
.
.
ya que tendramos la siguiente disposicin en memoria:
PILA HEAP
| | | |
+---------------+ | |
| @ de "hola\0" | --------------+ | |
+---------------+ | | |
| @ de retorno | | | |
SP --->+---------------+ | | |
| buff | --------------+ | |
+---------------+ | +-----------------+
| resto de vars | +----->| "hola\0" |
| locales al | +-----------------+
| main | | |
+---------------+ | |
TERCER CASO
La cuestin es que este error algunas veces pasa por alto, sobre todo en
mquinas gobernadas por un SO sin proteccin de memoria, caso de los
PC's con MS-DOS. En una maquina Unix tambin puede ocurrir si el valor
del puntero cae dentro de nuestro espacio de memoria, con lo que el
problema llega a ser muy grave y prcticamente indetectable sin la
utilizacin del debugger.
Ejemplo:
main()
{
char *pchar;
int *pint;
*pchar='a';
printf("Direccion de 'a': %p",pchar);
pint=malloc(sizeof(int));
*pint=0;
/* Ahora lo apuntado por pchar puede haber cambiado de valor */
}