Sei sulla pagina 1di 17

Universidad Nacional de Asuncin

Facultad Politcnica Carrera de Ingeniera en Informtica


Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Gua Rpida de Conversin:

Pag. 1

SL

DE ALGORITMOS
El presente documento constituye una referencia para la conversin de
algoritmos construidos en el lenguaje SL al lenguaje C, abarcando
conceptos fundamentales estudiados en el curso.
El lenguaje C se ha convertido en una de las herramientas ms
importantes en el mbito profesional de la programacin y cuenta con
una completa gama de posibilidades para el tratamiento de todo tipo de
problemas. Para una profundizacin en el uso de estas caractersticas
se recomienda recurrir a la literatura especializada.
Ms all de la libertad que ofrece el propio lenguaje y las cualidades
individuales que ofrece cada versin particular del C, el desarrollo de
los ejercicios de ejemplo se ajusta al standard ANSI del lenguaje,
buscando uniformidad y coherencia en la forma de escribir los
programas, conservando as su claridad y legibilidad.

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 2

GUA RPIDA DE CONVERSIN DE ALGORITMOS DE SL A C

TIPOS BSICOS DE DATOS


SL
numerico

C
int ( enteros )
float ( reales )
char
No existe.
Las operaciones de relacin retornan
valores enteros ( 1 = verdadero; 0 = falso )

cadena
lgico

OPERADORES ARITMTICOS
Operacin

SL

Suma
Resta
Multiplicacin
Divisin
Resto

+
*
/
%

+
*
/
%

El resultado de una operacin aritmtica en C es siempre del mismo tipo que los operandos.
Si los operandos son de tipo entero, el resultado ser tambin de tipo entero, truncando la parte decimal si la
hubiera.
Cuando en una operacin se combinan dos tipos de datos (como float e int) el C convierte todos a un mismo
tipo (en el ejemplo: float)

OPERADORES DE RELACIN
Operacin

SL

Igual que
Mayor que
Menor que
Mayor o igual que
Menor o igual que
Distinto que

==
>
<
>=
<=
<>

==
>
<
>=
<=
!=

OPERADORES LGICOS
Operacin

SL

Y
O
NO

and
or
not

&&

ESTRUCTURAS BSICAS DE CONTROL


SL

si (condicion)
{
sentencias
}

if (condicion)
{
sentencias;
}

si (condicion)
{
sentencias 1
sino
sentencias 2
}

if (condicion)
{
sentencias 1;
}
else
{
sentencias 2;
}

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 3

ESTRUCTURAS BSICAS DE CONTROL


SL

mientras (condicion)
{
sentencias
}
desde I = 1 hasta N paso P
{
sentencias
}

while (condicion)
{
sentencias;
}
for ( I = 1; I <= N; I = I + P )
{
sentencias;
}

PROBLEMAS RESUELTOS:
1. Calcular la suma de dos nmeros enteros
SL

/* programa sumador */

/* programa sumador */

var
num1,num2,suma:numerico

#include <stdio.h>

inicio

main()
{
int num1,num2,suma;
imprimir (ingrese el primer nmero \n)
leer (num1)
imprimir (ingrese el segundo nmero \n)
leer (num2)
suma = num1 + num2
imprimir (La suma es ,suma)

printf (ingrese el primer nmero \n) ;


scanf (%d,&num1) ;
printf (ingrese el segundo nmero \n) ;
scanf (%d,&num2) ;
suma = num1 + num2 ;
printf (La suma es %d,suma) ;

fin

return 0 ;
}

2. Calcular la suma de dos nmeros reales


SL

/* programa sumador */

/* programa sumador */

var
num1,num2,suma:numerico

#include <stdio.h>

inicio

main()
{
float num1,num2,suma;
printf (ingrese el primer nmero \n) ;
scanf (%f,&num1) ;
printf (ingrese el segundo nmero \n) ;
scanf (%f,&num2) ;
suma = num1 + num2 ;
printf (La suma es %f,suma) ;

imprimir (ingrese el primer nmero \n)


leer (num1)
imprimir (ingrese el segundo nmero \n)
leer (num2)
suma = num1 + num2
imprimir (La suma es ,suma)
fin

return 0 ;
}

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 4

3. Encontrar el mayor de dos nmeros reales

SL

/* programa comparador */

/* programa comparador */

var
num1,num2 :numerico

#include <stdio.h>

inicio

main()
{
float num1,num2;
printf (ingrese el primer nmero \n) ;
scanf (%f, &num1) ;
printf (ingrese el segundo nmero \n) ;
scanf (%f, &num2) ;
if (num1 > num2)
{
printf (%f es mayor a %f , num1 , num2) ;
}
else
{
printf (%f es mayor que %f , num2 , num1) ;
}

imprimir (ingrese el primer nmero \n)


leer (num1)
imprimir (ingrese el segundo nmero \n)
leer (num2)
si ( num1 > num2)
{
imprimir (num1 , es mayor que , num2)
sino
imprimir (num2 , es mayor que ,num1)
}

return 0 ;

fin

4. Imprimir los nmeros enteros de 1 a N


SL

/* Enteros de 1 a N */

/* Enteros de 1 a N */

var
i , n : numerico

#include <stdio.h>

inicio

main()
{
int i, n;
printf (ingrese el valor de N \n) ;
scanf (%d , &n ) ;
for ( i = 1 ; i <= 10 ; i = i + 1)
{
printf (%d \n , i ) ;
}

imprimir (ingrese el valor de N \n)


leer (n)
desde i = 1 hasta n
{
imprimir ( i , \n )
}
fin

return 0 ;
}

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 5

5. Imprimir los nmeros pares decrecientemente de 20 a 2


SL

/* Pares 20a 2 */

/* Pares 20 a 2*/

var
i :numerico

#include <stdio.h>

inicio

main()
{
int i ;
for ( i = 20 ; i >= 2 ; i = i - 2 )
{
printf (%d \n , i ) ;
}

desde i = 20 hasta 2 paso -2


{
imprimir ( i , \n )
}

return 0 ;

fin

6. Hallar la suma de una lista de nmeros enteros positivos, sabiendo que el


ltimo valor es 1 y no debe ser procesado.
SL

/* Suma de nmeros */

/* Suma de nmeros */

var
num, suma :numerico

#include <stdio.h>

inicio

main()
{
int num, suma ;
scanf ( %d,&num) ;
while ( num != -1 )
{
suma = suma + num ;
scanf ( %d,num) ;
}
printf (%d , suma ) ;

leer (num)
mientras (num <> -1)
{
suma = suma + num
leer (num)
}
imprimir (suma)
fin

return 0 ;
}

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 6

ARREGLOS: VECTORES Y MATRICES EN C


En lneas generales, los conceptos y procedimientos aplicados para el tratamiento de arreglos son
similares en SL y C.
Sin embargo, existen ciertos detalles importantes que deben ser tenidos en cuenta durante la
conversin de los algoritmos :
1- En C los arreglos comienzan con la posicin 0, esto es, un vector de A de cuatro elementos est
compuesto por A[0], A[1], A[2] y A[3].
2- La dimensin de un arreglo debe ser definida en su declaracin y es fija durante toda la ejecucin
del algoritmo. Esto implica que no es posible definir el tamao del arreglo durante la ejecucin.
3- El C no posee verificacin del lmite de un arreglo y por lo tanto, el algoritmo deber incluir las
precauciones necesarias para evitar referirse a un ndice que resulte fuera del rango establecido
en la declaracin del arreglo.
4- Los elementos de una matriz se identifican con la siguiente nomenclatura M [ i ] [ j ].

1. Clculo de la cantidad de das transcurridos desde el 01/01/1980 hasta una


fecha dada.
programa dias_desde_1980
const
AO_BASE = 1980
var
DIA, MES, AO, A, CDA, M, CDM, CDD, CD: numerico
DIAS_MES: vector [12] numerico

#include <stdio.h>
#define ANHO_BASE 1980
main()
{

inicio
int DIA, MES, ANHO, A, CDA, M, CDM, CDD, CD;
int DIAS_MES [11] = {31,28,31,30,31,30,31,31,30,31,30,31} ;
leer (DIA, MES, AO)

CDA= 0
CDM= 0

desde A = AO_BASE hasta AO - 1


{
CDA = CDA + 365
si ( A % 4 == 0 )
{
CDA = CDA + 1
}
}

scanf (%d%d%d , &DIA, &MES, &ANHO);


for (A = ANHO_BASE ; A<= ANHO 1; A ++)
{
CDA = CDA + 365 ;
if ( A % 4 == 0 )
{
CDA = CDA + 1 ;
}
}

DIAS_MES = {31,28,31,30,31,30,31,31,30,31,30,31} ;
si ( AO % 4 == 0 )
{
DIAS_MES [2] = 29
}
desde M = 1 hasta MES -1
{
CDM = CDM + DIAS_MES [M]
}

if ( ANHO % 4 == 0 )
{
DIAS_MES [1] = 29 ;
}
for (M = 0 ; M<= MES 2 ; M++)
{
CDM = CDM + DIAS_MES [M] ;
}

CDD = DIA 1
CDD = DIA 1;
CD = CDA + CDM + CDD
CD = CDA + CDM + CDD ;
imprimir (CD)
printf (%d , CD) ;
fin
return 0 ;
}

Observacin: ANHO_BASE es una constante simblica cuyo valor es 1980. Antes de compilar el
programa, el lenguaje C reemplaza todas las apariciones del texto ANHO_BASE por el valor 1980.
Observacin: Recuerde siempre inicializar los sumadores y contadores utilizados en un programa C,
puesto que a diferencia del SL, el C no necesariamente inicializa las variables al comenzar la
ejecucin del programa.

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 7

2. Ordenamiento de un vector por el Mtodo de Bsqueda del Mnimo

SL

#include <stdio.h>
#define N 100
main()
{
var
N, I, MIN, POS_MIN, J, AUX: numerico
VEC : vector [*] numerico

int I, POS_MIN, J ;
float MIN, AUX ;
float VEC [ N ] ;

inicio
leer (N)
dim (VEC,N)
desde I = 1 hasta N
{
leer (VEC[I])
}
desde I = 1 hasta N
{
MIN = VEC [I]
POS_MIN = I
desde J = I+1 hasta N
{
si (VEC[J] < MIN)
{
MIN = VEC[J]
POS_MIN = J
}
}

AUX = VEC[POS_MIN]
VEC[POS_MIN] = VEC[I]
VEC[I] = AUX
}
desde I= 1 hasta N
{
imprimir (VEC[I])
}
fin

for ( I = 0; I <= N-1 ; I++)


{
scanf (% f , &VEC [ I ] ) ;
}
for ( I = 0; I <= N-1 ; I++ )
{
MIN = VEC [ I ] ;
POS_MIN = I ;
for ( J = I+1; J <= N-1 ; J++ )
{
if (VEC[J] < MIN)
{
MIN = VEC [ J ] ;
POS_MIN = J ;
}
}
AUX = VEC [ POS_MIN ] ;
VEC [ POS_MIN ] = VEC [ I ] ;
VEC [ I ] = AUX ;
}
for ( I= 0 ; I <= N-1 ; I++ )
{
printf ( %f ,VEC [ I ] ) ;
}
return 0 ;
}

Observaciones: debido a la exigencia de definir el tamao


del arreglo antes de la ejecucin, se ha introducido una
constante simblica N, a la cual se le asigna este tamao.
Pero N no puede ser definida por el usuario, sino que
debe ser modificada en el propio programa antes de su
compilacin. Otra alternativa sera declarar un tamao
mximo para el vector (300 por ejemplo) y luego en el
programa solicitar el valor del lmite N, el cual deber ser
menor que el tamao mximo previsto.

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 8

3. Divisin de los elementos de una matriz MAT de 3 filas y 2 columnas por una
constante real K.
#include <stdio.h>
main()
{
int I, J ;
float K ;
float MAT [ 3 ] [ 2 ] ;
printf (Divisor ) ;
scanf (% f , &K ) ;
for ( I = 1; I <= 3 ; I++ )
{
for ( J = 1; J <= 2 ; J++ )
{
printf (Matriz [%d] [%d] = , I , J ) ;
scanf (% f , &MAT [ I ][ J ] ) ;
}
}
for ( I = 1; I <= 3 ; I++ )
{
for ( J = 1; J <= 2 ; J++ )
{
MAT [ I ][ J ] = MAT [ I ][ J ] / K ;
}
}
for ( I = 1; I <= 3 ; I++ )
{
for ( J = 1; J <= 2 ; J++ )
{
printf ( Matriz [%d] [%d] = %f \n, I , J, MAT [ I ][ J ] ) ;
}
}
return 0 ;
}
Observacin: note que no se han utilizado la fila 0 y la columna 0 de la matriz.

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 9

Funciones
Las funciones permiten estructurar la solucin de problemas a partir de mdulos constructivos con
objetivos definidos.
Por lo general, los programas en C se escriben combinando funciones que el programador escribe con
funciones pre-existentes , disponibles en la biblioteca standard del C. Esta biblioteca contiene una
amplia variedad de funciones para llevar a cabo clculos numricos, manipulacin de caracteres y
cadenas, operaciones de entrada/salida y otras que brindan una importante ayuda para la
construccin de los programas.

Funciones de Biblioteca
Rigurosamente hablando, las funciones estndar de biblioteca no forman parte del lenguaje C, pero
siempre son provedas junto al lenguaje. Como ejemplo, tenemos las funciones scanf y printf que
hemos utilizado en ejemplos anteriores.
Una lista parcial de las funciones matemticas disponibles se presenta a continuacin:
Funcin

Descripcin

sqrt(x)
exp(x)
log (x)
log10 (x)
fabs (x)
ceil (x)
floor(x)
pow (x,y)
fmod (x,y)
sin (x)
cos (x)

raz cuadrada de x
e elevado a la x
logaritmo natural de x
logaritmo en base 10 de x
valor absoluto de x
redondea el valor de x al primer entero mayor que x
redondea el valor de x al primer entero menor que x
x elevado a la potencia y
resto del cociente de dos nmeros reales
seno de x
coseno de x

Observaciones:
Para acceder a estas funciones debe incluirse, al comienzo del programa, la directiva
#include <math.h>
Para una lista completa de las funciones matemticas y otras disponibles, consulte con la
documentacin de la versin de C que est utilizando.

Las funciones de biblioteca se agrupan de acuerdo con su finalidad. Para utilizar un grupo
determinado de funciones, es necesario incorporarlas al programa utilizando la directiva #include.
En la siguiente lista se muestran algunas de las ms utilizadas:
Archivo de cabecera de
la biblioteca estndar

Contenido

<stdio.h>
<math.h>
<string.h>

Funciones de entrada y salida stndard.


Funciones matemticas.
Funciones para procesamiento de cadenas de caracteres.

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 10

Funciones creadas por el programador


La definicin de una funcin en C tiene la siguiente estructura:
tipo de valor de regreso nombre de la funcin (lista de parmetros)
{
declaracin de variables
instrucciones
}

Como ejemplo, se muestra a seguir la funcin cuad que calcula el cuadrado de un nmero entero.
int cuad( int X )
{
int Y;
Y=X*X
return ( Y );
}

Las variables declaradas dentro de la funcin, as como los parmetros de entrada, son variables
locales a la misma.
La funcin cuad se utiliza a continuacin para imprimir los cuadrados de los nmeros enteros entre 1
yN:
#include <stdio.h>
int cuad(int);
main ()
{
int N , I , C ;
printf ( Ingrese el valor de N = );
scanf(%d,&N);
for ( I =1; I <= N ; I++)
{
C = cuad ( I ) ;
printf ( El cuadrado de %d es %d \n, I , C ) ;
}
return 0;
}
int cuad( int X )
{
int Y;
Y=X*X;
return ( Y ) ;
}
Notese atentamente la inclusin al principio del programa de la linea int cuad( int );
Esta lnea representa un prototipo de la funcin cuad y permite al compilador verificar que las llamadas a la
funcin son correctas con relacin a los tipos de datos utilizados, la cantidad de parmetros, etc. Asimismo, el
compilador verifica si el prototipo coincide con la definicin de la funcin.
Cuando el prototipo de la funcin no se incluye en el programa, el compilador formar su propio prototipo
utilizando la primera ocurrencia de la funcin, ya sea su definicin o una llamada a dicha funcin. Por omisin, el
compilador asumir que la funcin regresa un int y no se supone nada con respecto a los argumentos. Por lo
tanto, si los argumentos pasados a la funcin no son los correctos, los errores no sern detectados durante la
compilacin.
Un prototipo de funcin colocado fuera de una definicin de funcin se aplica a todas las llamadas de funcin que
aparezcan despus del prototipo de funcin. Un prototipo de funcin colocado en una funcin se aplica slo a las
llamadas efectuadas en esa funcin.

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 11

En C, el paso de parmetros se realiza por valor (aunque existen ciertas formas de simular el paso por
referencia).
Una situacin particular se presenta cuando una funcin no retorna ningn valor o cuando la misma no
requiere de ningn parmetro. En tales casos, se utiliza la palabra void para representar este hecho.
Ejemplo: la siguiente funcin imprime los valores de dos variables sin retornar ningn valor. Observar
la ausencia de la instruccin return debido a que la funcin no retorna ningn valor.
void imprimir ( int A , int B )
{
printf ( los valores son %d y %d , A , B );
}
Ejemplo: la siguiente funcin imprime un mensaje, sin requerir ni retornar ningn valor.
void mensaje( void )
{
printf (El valor introducido es incorrecto, vuelva a intentarlo);
}

Problema ejemplo
Escribir un programa en C capaz de realizar la suma de dos fracciones.
#include <stdio.h>

int mcd ( int A, int B )


{

int mcd ( int , int ) ;


int mcm ( int , int ) ;
void imprimefracc ( int , int) ;

int C, DIVIDENDO, DIVISOR, RESTO;


if (A<B)
{

main()
{
int N1, D1, N2, D2 , DENOM , NUMER, FACTORCOMUN ;

C = A;
A = B;
B = C;

printf (Ingrese el numerador de la primera fraccin ) ;


scanf (%d,&N1) ;
printf (Ingrese el denominador de la primera fraccin ) ;
scanf (%d,&D1) ;
printf (Ingrese el numerador de la segunda fraccin ) ;
scanf (%d,&N2) ;
printf (Ingrese el denominador de la segunda fraccin ) ;
scanf (%d,&D2) ;
DENOM = mcm (D1,D2) ;
NUMER = (N1*DENOM/D1) + (N2*DENOM/D2) ;
FACTORCOMUN = mcd (NUMER,DENOM) ;
DENOM = DENOM / FACTORCOMUN ;
NUMER = NUMER / FACTORCOMUN ;

}
DIVISOR = A;
DIVIDENDO = B;
RESTO = DIVIDENDO % DIVISOR;

while (RESTO != 0)
{
DIVIDENDO = DIVISOR;
DIVISOR = RESTO;
RESTO = DIVIDENDO % DIVISOR;
}
return (DIVISOR);
}

imprimefracc (NUMER,DENOM) ;
return 0;
}

int mcm ( int A , int B )


{
int C, I, MIN;

void imprimefracc (int X , int Y )


{
printf ( El resultado es %d / %d , X , Y );
}

if (A<B)
{
C = A;
A = B;
B = C;
}
for ( I = A ; I <= A*B ; I = I + A)
{
if ( I % B == 0 )
{
MIN = I;
I = A*B;
}
}
return (MIN);
}

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 12

Funciones recursivas
El lenguaje C permite la definicin de funciones recursivas. El comportamiento de este tipo de
funciones ya fue estudiado en su oportunidad con ejemplos aplicados al SL. A continuacin se
presentan ejemplos de aplicacin de funciones recursivas en C.

/*CALCULO RECURSIVO DEL FACTORIAL */

/*CALCULO RECURSIVO DE UN PRODUCTO */

#include <stdio.h>

#include <stdio.h>

int fact ( int );

int prod ( int , int );

main()
{

main()
{
int X , F;

int X , Y , P;

printf ("Ingrese el valor de N = ");


scanf ("%d",&X);
F = fact (X);
printf ("El factorial de %d es %d",X,F);
return 0;

printf ("Ingrese el valor de X = ");


scanf ("%d",&X);
printf ("Ingrese el valor de Y = ");
scanf ("%d",&Y);
P = prod (X,Y);
printf ("El producto de %d y %d es %d",X,Y,P);
return 0;

}
}
int fact ( int N )
{
int FACTORIAL;

int prod (int A, int B)


{

if ( N == 0 )
{
FACTORIAL = 1;
}
else
{
FACTORIAL = N * fact (N - 1);
}
return (FACTORIAL);

int PRODUCTO;
if ( B == 1 )
{
PRODUCTO = A;
}
else
{
PRODUCTO = prod ( A , B-1 ) + A;
}
return ( PRODUCTO );

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 13

Caracteres.
En el lenguaje C se utiliza el tipo de dato char para guardar caracteres. Sin embargo, el tipo char es
un tipo de dato numrico similar al int . Esto es debido a que los caracteres individuales son tratados
por el C a travs de su cdigo de identificacin en el computador (Cdigo ASCII, por ejemplo).
As, si asignamos a una variable de tipo char el valor a, la variable almacenar realmente el valor 97,
que corresponde al cdigo ASCII de la letra a.
Una pregunta interesante: si el C almacena los caracteres como nmeros enteros, cmo sabe si el
valor almacenado es la letra a o el nmero 97 ?. La respuesta es:
a) Si se usa la variable en alguna parte del programa donde el C espera un caracter, entonces
su valor ser interpretado como tal.
b) Si la variable en algn lugar donde el C espera un nmero, ser interpretada como nmero.
La declaracin de variables de tipo char sigue las mismas reglas ya estudiadas para otros tipos de
datos:
int a,b,c;
char letra, digito;
En el ejemplo anterior se declaran las variables enteras a, b , c y las variables letra y digito de tipo
caracter. Notese que estas variables solo pueden almacenar un caracter cada una.
Las funcion printf() puede ser utilizada para leer e imprimir variables de tipo char utilizando la
secuencia de control %c.
printf( la letra es %c , letra )

Cadenas de caracteres.
Una cadena es una serie de caracteres tratados como una unidad, pudiendo incluir letras, dgitos y
caracteres especiales. Una cadena termina siempre con un caracter especial conocido como caracter
nulo (\0).
Para almacenar cadenas en C recurrimos a un vector de tipo char. De esta forma, cada componente
del vector almacena un caracter de la cadena.
As, por ejemplo, la declaracin : char palabra [ 10 ]; define un arreglo capaz de almacenar 9
caracteres (el ltimo se reserva para el \0 ).
A seguir se presentan algunas de las operaciones bsicas con cadenas en C.

PARA DECLARAR UNA CADENA


Utilice el tipo de datos char
char TEXTO[15], ABC[30];
Declara una cadena TEXTO de 15 caracteres y otra ABC de 30 caracteres.

PARA LEER UNA CADENA


Utilice la funcin gets(). No se requiere el smbolo & antes de la variable.
gets (TEXTO)

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 14

PARA IMPRIMIR UNA CADENA


Utilice la funcin printf() con la cadena de formato %s
printf( El texto es %s ,TEXTO);

PARA CALCULAR LA LONGITUD DE UNA CADENA


Utilice la funcin strlen()
P = strlen(TEXTO1)
La funcin strlen() no cuenta el caracter nulo.

PARA COMPARAR DOS CADENAS


Utilice la funcin strcmp()

En C

En SL

if ( strcmp(TEXTO1,TEXTO2) == 0 )
if ( strcmp(TEXTO1,TEXTO2) < 0 )
if ( strcmp(TEXTO1,TEXTO2) > 0 )

si ( TEXTO1 == TEXTO2 )
si ( TEXTO1 < TEXTO2 )
si ( TEXTO1 > TEXTO2 )

PARA CONCATENAR DOS CADENAS


Utilice la funcin strcat()
strcat(TEXTO1,TEXTO2);
concatena el TEXTO2 a continuacin del TEXTO1 almacenando el resultado en TEXTO1.
Equivalente a la sentencia TEXTO1 = TEXTO1 + TEXTO2 en SL

PARA REFERIRSE A LOS CARACTERES QUE COMPONEN UNA CADENA


Como la cadena constituye un vector de caracteres, podemos referirnos a los caracteres
individuales de TEXTO utilizando la notacin TEXTO [ I ].

OTRAS OPERACIONES CON CADENAS.


El lenguaje C permite realizar un amplio conjunto de operaciones adicionales con los datos
alfanumricos. La mayora de ellas utiliza el concepto de apuntadores o punteros. Para una
mayor comprensin acabada de estos aspectos se recomienda recurrir a la bibliografa adecuada.
Recuerde que para utilizar las funciones especficas de tratamiento de cadenas (como strlen() y
otras ) es necesario incluir el archivo <string.h>

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

PROBLEMAS DE EJEMPLO
/* EJEMPLO BASICO DE ENTRADA Y SALIDA DE CADENAS */
#include <stdio.h>
main()
{
char TEXTO[25];
printf("Ingrese su texto :");
gets(TEXTO);
printf("El texto ingresado es: %s ",TEXTO);
return 0;
}
/* EJEMPLO DE CONCATENACIN DE TEXTOS */
#include <stdio.h>
#include <string.h>
#include <conio.h>
main()
{
char TEXTO1[50], TEXTO2[25];
clrscr();
printf("Ingrese el primer texto :");
gets(TEXTO1);
printf("Ingrese el segundo texto :");
gets(TEXTO2);
strcat (TEXTO1,TEXTO2);
printf( "Textos concatenados : %s",TEXTO1);
return 0;
}
/* EJEMPLO DE COMPARACIN DE TEXTOS */
#include <stdio.h>
#include <string.h>
#include <conio.h>
main()
{
char TEXTO1[25], TEXTO2[25];
clrscr();
printf("Ingrese el primer texto :");
gets(TEXTO1);
printf("Ingrese el segundo texto :");
gets(TEXTO2);
if ( strcmp(TEXTO1,TEXTO2) == 0 )
{
printf("%s es igual a %s",TEXTO1,TEXTO2);
}
else if ( strcmp(TEXTO1,TEXTO2) < 0 )
{
printf("%s es menor que %s",TEXTO1,TEXTO2);
}
else if ( strcmp(TEXTO1,TEXTO2) > 0 )
{
printf("%s es mayor que a %s",TEXTO1,TEXTO2);
}
return 0;
}

Pag. 15

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

/* CUENTA CUANTAS LETRAS A EXISTEN EN EL TEXTO */


#include <stdio.h>
#include <string.h>
#include <conio.h>
main()
{
int LTEXTO, I, CUENTA_A;
char CARACTER;
char TEXTO[25];
clrscr();
CUENTA_A = 0;
printf("Ingrese su texto :");
gets ( TEXTO );
LTEXTO = strlen ( TEXTO );
CARACTER = 65;
// El cdigo ASCII de la letra A es 65
for (I=1; I<=LTEXTO;I++)
{
if ( TEXTO[I] == CARCTER )
{
CUENTA_A = CUENTA_A + 1;
}
}
printf( "En su texto existen %d letras A" , CUENTA_A );
return 0;
}

Pag. 16

Universidad Nacional de Asuncin


Facultad Politcnica Carrera de Ingeniera en Informtica
Algoritmos y Estructuras de Datos II Prof. Carlos Luis Filippi

Pag. 17

Problemas propuestos :
Construir programas C para:
1.
2.
3.
4.
5.

Hallar el rea de un rectngulo.


Encontrar la hipotenusa de un tringulo rectngulo conociendo sus catetos b y c
Obtener el promedio de una lista de N nmeros.
Calcular el factorial de N.
Imprimir la siguiente secuencia de nmeros:
a. 8,9,10,11,12,13
b. 2,4,6,8,10,12,14,16,18,20
c. 1,4,7,10,13,16,19
d. 1,2,4,7,11,16,22,29
e. 0,1,1,2,3,5,8
f. 20,15,10,5,0,-5,-10,-15
g. 1,2,2,3,3,3,4,4,4,4,5,5,5,5,5
6. Dada una lista de nmeros, encontrar la cantidad de mltiplos de 5, de 3 y de 2 que la misma
contiene.
ARREGLOS
Ejercicios propuestos.
1.
2.
3.
4.
5.

Hallar el menor elemento de un vector A de 25 elementos.


Realizar la bsqueda binaria de un valor K elemento en un vector de 1000 elementos enteros.
Ordenar un vector por el mtodo de burbuja.
Hallar la suma de los elementos de una matriz P de 2 filas y 5 columnas
Dada la matriz M de 7 filas y 7 columnas, hallar la matriz resultante de dividir cada elemento
por el elemento de la misma columna que se encuentra sobre la diagonal principal.
6. Pasar todas las componentes de una matriz MAT de 4 filas y 3 columnas a un vector VEC.
Funciones

Problemas Propuestos
Escribir funciones adecuadas en C para:
1. Verificar si un ao es bisiesto. ( bisiesto() )
2. Verificar si una fecha es vlida. ( fecval () )
3. Calcular la cantidad de das transcurridos desde el 01/01/1980 hasta una fecha dada
posterior. (candias () )
4. Calcular la cantidad de das transcurridos entre dos fechas dadas posteriores al 01/01/1908.
(diasfec () )
5. Calcular a que da de la semana ( 1 a 7 ) corresponde una fecha dada. ( diasem () )
6. Calcular el monto acumulado de una inversin P luego de N periodos a una tasa de inters
compuesto de I% por cada periodo. ( montofinal () )
7. Encontrar el Mximo comn divisor de dos nmeros enteros.
8. Encontrar el Mnimo comn mltiplo de dos nmeros enteros.
9. Determinar si un nmero entero es primo. ( primo () )