Está en la página 1de 31

Programacin estructurada

Arreglos multidimensionales
Cadenas de caracteres
Dr. No Alejandro Castro Snchez
Arreglos bidimensionales
Matrices, tablas, vector de vectores.
Conjunto finito y ordenado de elementos
homogneos en el que se necesita
especificar dos subndices para acceder a
un elemento.
Col 1 Col 3 Col 5

Fila 0
Fila 1
Fila 2
Fila 3
Arreglos bidimensionales
Declaracin
tipo nombre[filas][columnas]
Ejemplo: int estante[2][2];
Procesamiento de elementos:
Insercin:
estante[1][0] = 5;
Lectura:
libro = estante[1][1];
El acceso a los elementos se hace mediante
bucles anidados.
Arreglos multidimensionales
Arreglos de ms de dos dimensiones.
Raramente los datos del mundo
requieren ms de 2 o 3 dimensiones.
Arreglo tridimensional:
Arreglos multidimensionales
Declaracin:
tipo nombre[t1][t2][t3][tn]

int nombre[5][10][5][10];

Ejemplo:

char libro[pag][lineas][col];
Ejemplo
Llenar una matriz de 3 x 4 con unos e
imprimirla

Ejercicio
Realice la impresin en forma matricial:

1 1 1 1
1 1 1 1
1 1 1 1
Ejercicio 1
Se desean capturar desde teclado las
calificaciones de tres exmenes parciales
de 5 alumnos
Calcular e imprimir el promedio de cada
alumno
Imprimir qu alumnos (referenciados por
el nmero de rengln) no exentan
Ejercicio II
Lea valores para una matriz de 4 x 4 y
realice lo siguiente:
Identifique el menor y el mayor elemento, e
imprima su posicin (rengln/columna)
Sume los valores de la segunda y cuarta
columna
Sume los valores del segundo y cuarto
rengln
Ejercicio III
Dada una matriz cuadrada, sumar todos
sus valores excepto los de la periferia.
Ejemplo:
3 6 4 0
9 1 9 5
7 2 8 4
1 6 0 3

acum = 1 + 9 + 2 + 8
Nota: Los valores de cada casilla sern
asignados aleatoriamente
Generacin de aleatorios I
#include<stdio.h>
#include<stdlib.h> // libreria para uso de rand()
#include<conio.h>
#include<time.h> // libreria para uso de time()

main(void) {
int tiempo = time(NULL), num;

srand(tiempo); //Semilla para generar aleatorio

num = rand()%100; // Generacin de aleatorio

printf("%d ", num);

getch();
}
Generacin de aleatorios II
rand() genera un nmero aleatorio. Siempre
que se reinicie el programa, generar el mismo
nmero. Esto no es muy til.
srand(numero) le proporciona a rand() un
nmero a partir del cual generar el aleatorio
(por ello se llama a dicho nmero semilla).
Pero si siempre usamos el mismo nmero, generar
los mismos aleatorios.
Si pasamos un nmero que vare constantemente,
(como el tiempo) generar aleatorios diferentes
Generacin de aleatorios III
time(NULL) devuelve la cantidad de segundos
transcurridos desde las 00:00 horas, del 1 de
enero de 1970, fecha conocida como poca
UNIX (o UNIX Epoch)
Bajo estas consideraciones, entonces:
Generar valores entre 0 y 1:
rand() % 2;
Generar valores entre 0 y 99:
rand() % 100;
Etc.
Ejercicio IV
Realice un programa que trasponga una
matriz de 4 x 4. Considere lo siguiente:
La matriz se llenar con nmeros aleatorios
comprendidos entre 10 y 99.
Imprimir matriz original y matriz traspuesta

14 22 10 91 14 34 54 66
34 82 13 33 22 82 10 81
54 10 39 71 10 13 39 50
66 81 50 12 91 33 71 12
Cadenas y arreglos
Cadenas y arreglos
Cadenas de texto: secuencia de
caracteres (e. g., abcde, hola mundo).
C trata las cadenas de texto como
arreglo de caracteres.

Array A B C D E F

Cadena A B C D E F \0
Cadenas y arreglos (II)
Las cadenas terminan con el carcter nulo
(\0) al final del arreglo.
C no tiene un tipo predefinido para
manipular cadenas de caracteres (string).
Inicializacin
char cad1[] = Hola;
char cad2[] = {H,o,l,a,0};
char cad3[] = {H,o,l,a, \0};

cad: H O L A \0

4 + 1
Tratamiento de cadenas
Incluir librera string.h
strlen(cadena)
Devuelve la longitud de la cadena sin tomar en
cuenta el caracter de final de cadena.
strcpy(cad_destino, cadena_origen)
Copia el contenido de <cad_origen> en
<cad_destino>.
strcat(cadena_destino, cadena_origen)
Concatena el contenido de <cadena_origen> al
final de <cadena_destino>.
Tratamiento de cadenas (II)
strcmp(cadena1, cadena2) :
Compara las dos cadenas. Devuelve:
0 si las dos cadenas son iguales,
< 0 (nmero negativo) si <cadena1> es menor
que (precede alfabticamente a) <cadena2> y
> 0 (nmero positivo) si <cadena1> es mayor
que <cadena2>.
Lectura
scanf()
char cad[20];
printf(Ingresa nombre:);
/* leer cadena */
scanf(%s, cad);
/* leer un carcter */
scanf(%c, &cad[15]);

scanf() lee datos hasta encontrar un espacio


en blanco.
Lectura (II)
Lectura de HOLA MUNDO usando scanf()

H O L A \0 % = @ ~

Basura
gets()
Lee caracteres separados por espacios en
blanco hasta el salto de lnea.
gets(cad);
Escritura
printf()

printf(%s, cad);

puts()
reemplaza el carcter nulo por salto de lnea.

puts(cad);
Ejemplo
#include <stdio.h>
#include <conio.h>

main(void){
char a[20];

printf("Ingrese la cadena: ");


scanf("%s", a);
printf("La cadena es : %s", a);
getch();
}
Ejercicio 1
Remplace la lectura de la cadena con la
funcin gets y la impresin de ella con
puts.
Ejemplo II
#include <stdio.h>
#include <stdlib.h>

main(void)
{
char a[20], b[20];

printf("Ingrese cadena con algn espacio: ");


scanf("%s", a);
Ejemplo II (continuacin)
printf("Ingrese la misma cadena: ");
gets(b);

printf("La impresin en <a> es: ");


puts(a);

printf("La impresin en <b> es: ");


printf("%s", b);

getch();
}
Ejercicio
Ejecute el programa qu ocurre?
Ejercicio
Ejecute el programa qu ocurre?
El buffer contiene los caracteres despus
del primer espacio en blanco
una cadena

Salto de lnea (\n)

La funcin gets() extrae el contenido del


buffer, y el salto de lnea la invoca.
Solucin
Invoque la funcin fflush(stdin)
inmediatamente despus de scanf()
Ejercicios
Lea una cadena desde teclado e imprmala
en forma inversa:
Entrada Recorrido monumental
Salida: latnemunom odirroceR
Imprima la cadena de entrada en el
siguiente orden: primer carcter, ltimo;
segundo, penltimo; tercero,
antepenltimo; y as sucesivamente
Ejercicios
1. Lea una cadena de caracteres y cuente
el nmero de dgitos que tiene, letras y
caracteres especiales, e imprima la
frecuencia
2. Lea una cadena de caracteres con varios
espacios en blanco entre las palabras y
elimnelos para que slo quede uno
entre ellas. Imprima la cadena resultante

También podría gustarte