Arreglos multidimensionales Cadenas de...

Post on 06-Feb-2018

262 views 2 download

Transcript of Arreglos multidimensionales Cadenas de...

Programación estructurada Arreglos multidimensionales Cadenas de caracteres

Dr. Noé Alejandro Castro Sánchez

Arreglos bidimensionales

Matrices, tablas, vector de vectores. Conjunto finito y ordenado de elementos

homogéneos en el que se necesita especificar dos subíndices para acceder a un elemento.

Fila 0

Fila 1

Fila 2 Fila 3

Col 1 Col 3 Col 5

Arreglos bidimensionales

Declaración ◦ tipo nombre[filas][columnas] ◦ Ejemplo: int estante[2][2];

Procesamiento de elementos: ◦ Inserción: estante[1][0] = 5;

◦ Lectura: libro = estante[1][1];

◦ El acceso a los elementos se hace mediante bucles anidados.

Arreglos multidimensionales

Arreglos de más de dos dimensiones. Raramente los datos del mundo

requieren más de 2 o 3 dimensiones. Arreglo tridimensional:

Arreglos multidimensionales

Declaración: 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 impresión 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 exámenes parciales de 5 alumnos

Calcular e imprimir el promedio de cada alumno

Imprimir qué alumnos (referenciados por el número de renglón) 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 posición (renglón/columna) ◦ Sume los valores de la segunda y cuarta

columna ◦ Sume los valores del segundo y cuarto

renglón

Ejercicio III

Dada una matriz cuadrada, sumar todos sus valores excepto los de la periferia. Ejemplo:

acum = 1 + 9 + 2 + 8

Nota: Los valores de cada casilla serán asignados aleatoriamente

3 6

9 1

0 7

5 9

4 2 1

0 4

8 6 3

Generación 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; // Generación de aleatorio

printf("%d ", num);

getch(); }

Generación de aleatorios II rand() genera un número aleatorio. Siempre

que se reinicie el programa, generará el mismo número. Esto no es muy útil.

srand(numero) le proporciona a rand() un número a partir del cual generará el aleatorio (por ello se llama a dicho número semilla). ◦ Pero si siempre usamos el mismo número, generará

los mismos aleatorios. ◦ Si pasamos un número que varíe constantemente,

(como el tiempo) generará aleatorios diferentes

Generación 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 números aleatorios

comprendidos entre 10 y 99. ◦ Imprimir matriz original y matriz traspuesta

14 22 10 91

34 82 13 33

54 10 39 71

66 81 50 12

14 34 54 66

22 82 10 81

10 13 39 50

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.

A B C D E F

A B C D E F \0

Array

Cadena

Cadenas y arreglos (II)

Las cadenas terminan con el carácter nulo (\0) al final del arreglo.

C no tiene un tipo predefinido para manipular cadenas de caracteres (string).

Inicialización char cad1[] = “Hola”; char cad2[] = {‘H’,‘o’,‘l’,‘a’,0}; char cad3[] = {‘H’,‘o’,‘l’,‘a’, ‘\0’};

H O L A \0 cad:

4 + 1

Tratamiento de cadenas Incluir librería 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 (número negativo) si <cadena1> es menor

que (precede alfabéticamente a) <cadena2> y ◦ > 0 (número positivo) si <cadena1> es mayor

que <cadena2>.

Lectura

scanf() char cad[20]; printf(“Ingresa nombre:”); /* leer cadena */

scanf(“%s”, cad);

/* leer un carácter */ scanf(“%c”, &cad[15]);

◦ scanf() lee datos hasta encontrar un espacio en blanco.

Lectura (II) Lectura de “HOLA MUNDO” usando scanf()

gets()

Lee caracteres separados por espacios en blanco hasta el salto de línea.

gets(cad);

H O L A \0 % = @

Basura

8

~

Escritura

printf() printf(“%s”, cad);

puts() ◦ reemplaza el carácter nulo por salto de línea.

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 función gets y la impresión de ella con puts.

Ejemplo II #include <stdio.h>

#include <stdlib.h>

main(void)

{

char a[20], b[20];

printf("Ingrese cadena con algún espacio: ");

scanf("%s", a);

Ejemplo II (continuación)

printf("Ingrese la misma cadena: ");

gets(b);

printf("La impresión en <a> es: ");

puts(a);

printf("La impresión en <b> es: ");

printf("%s", b);

getch();

}

Ejercicio

Ejecute el programa ¿qué ocurre?

Ejercicio

Ejecute el programa ¿qué ocurre? El buffer contiene los caracteres después

del primer espacio en blanco una cadena

Salto de línea (\n)

La función gets() extrae el contenido del

buffer, y el salto de línea la invoca.

Solución

Invoque la función fflush(stdin) inmediatamente después de scanf()

Ejercicios

Lea una cadena desde teclado e imprímala en forma inversa: ◦ Entrada “Recorrido monumental” ◦ Salida: “latnemunom odirroceR”

Imprima la cadena de entrada en el siguiente orden: primer carácter, último; segundo, penúltimo; tercero, antepenúltimo; y así sucesivamente

Ejercicios

1. Lea una cadena de caracteres y cuente el número de dígitos 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 elimínelos para que sólo quede uno entre ellas. Imprima la cadena resultante