Vous êtes sur la page 1sur 20

Departamento de Sistemas Informáticos Informática

Universidad de Castilla-La mancha EDII

Tema 4. MATRICES Y CADENAS DE CARACTERES

3.1 Introducción.
3.2 Matrices.
3.2.1 Matrices de una dimensión.
3.2.2 Matrices multidimesionales.
3.3 Cadenas de caracteres.

1
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

3.1 Introducción.

Ejercicio. Obtener la media de 3 notas y calcular la diferencia entre la media y cada una de
las notas.

Solución:

#include <stdio.h>

void main(void)
{
int n1,n2,n3;
float suma = 0,media;
printf("n1=");
scanf("%d",&n1);
printf("n2=");
scanf("%d",&n2);
printf("n3=");
scanf("%d",&n3);
suma=n1+n2+n3;
media = suma / 3;
printf("n1-media= %f\n", n1 - media);
printf("n2-media= %f\n", n2 - media);
printf("n3-media= %f\n", n3 - media);
} 2
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

Ejercicio. Obtener la media de 300 notas y calcular la diferencia entre la media y cada una de
las notas.

3.2 Matrices.

Definición.
Una matriz es una colección de variables del mismo tipo a las que se hace referencia por
mismo nombre.

Formato general para definir matrices:


Tipo_de_dato Nombre_de_la_Matriz [dimensión1] . . . . [dimensiónN];

3.2.1 Matrices de una dimensión (vectores).

Formato para definir vectores:


Tipo_de_dato Nombre_de_la_Matriz [dimensión] ;

3
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

Ejemplo:

int a, b, c; es equivalente a int vars[3];

Para acceder a un elemento del vector se usa un índice. El primer elemento del vector
tiene asociado el índice 0.

a = 2; vars[0] = 2;
b = 4; vars[1] = 4;
c = 6; vars[2] = 6;

Ejemplo. Obtener la media de 300 notas y calcular la diferencia entre la media y cada una
de las notas.

4
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

#include <stdio.h>

void main(void)
{
float notas[300],suma=0,media,resultado;
int contador;
for(contador=0; contador<=299; contador=contador+1){
printf("\nDame la nota %d:",contador);
scanf("%f ",&notas[contador]);
suma=suma+notas[contador];
}

media=suma/300;

for(contador=0; contador<=299; contador=contador+1){


resultado=media-notas[contador];
printf("Nota %d: %f - %f = %f\n",contador,media,notas[contador],resultado);
}

5
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

- Inicialización de vectores en la definición de los mismos:


Tipo_de_Dato Nombre_del_Vector [] = {valor1,valor2, ... ,valorN};

#include <stdio.h>
void main(void)
{
int edades[]={20,25,30,35,40,45,50};
int indice;

for(indice=0; indice<=6; indice=indice+1)


printf("Edad %d = %d\n",indice,edades[indice]);

edades[5]=70;

for(indice=0; indice<=6; indice=indice+1)


printf("Edad %d = %d\n",indice,edades[indice]);

edades[7]=90; //ERROR: índice fuera de los límites del vector


}

6
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

Ejemplo. Hacer un programa que inicialice un vector con el doble del valor de la componente
anterior, empezando con el valor 1, y mostrar por pantalla dicho vector.

#include <stdio.h>

#define tamano 10

void main(void)
{
int vector[tamano];
int indice;
vector[0]=1;
for(indice=1; indice<tamano; indice=indice+1)
vector[indice]=vector[indice-1]*2;
for(indice=0; indice<tamano; indice=indice+1)
printf("El valor del componente %d del vector es %d\n",indice,vector[indice]);
}

7
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

3.2.1 Matrices multidimensionales.


Una matriz puede tener más de una dimensión surgiendo así el concepto de matriz
bidimensional, matriz tridimensional, etc.

Formato para definir matrices bidimensionales:


Tipo_de_dato Nombre_de_la_Matriz [dimensión1] [dimensión2];

Formato para definir matrices tridimensionales:


Tipo_de_dato Nombre_de_la_Matriz [dimensión1] [dimensión2] [dimensión3];

8
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

Ejemplo 1. Hacer un programa en C que obtenga las tablas de multiplicar del 1 al 9 y mostrar
el resultado en pantalla.

0 1 2 3 4 5 6 7 8 9

0
0 0 0 0 0 0 0 0 0 0
1
0 1 2 3 4 5 6 7 8 9
2
0 2 4 6 8 10 12 14 16 18
3 0 3 6 9 12 15 18 21 24 27
4
0 4 8 12 16 20 24 28 32 36
5 0 5 10 15 20 25 30 35 40 45
6 0 6 12 18 24 30 36 42 48 54
7 0 7 14 21 28 35 42 49 56 63
8 0 8 16 24 32 40 48 56 68 72
9 0 9 18 27 36 45 54 63 72 81
9
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

#include <stdio.h>

void main(void)
{

int tablamult[10][10],indice1,indice2;
for(indice1=0; indice1<=9; indice1=indice1+1)
for(indice2=0;indice2<=9;indice2=indice2+1)
tablamult[indice1][indice2]=indice1*indice2;

for(indice1=0; indice1<=9; indice1=indice1+1)


{
for(indice2=0;indice2<=9;indice2=indice2+1)
printf("%d ",tablamult[indice1][indice2]);
printf("\n");
}

10
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

¿Qué hace este programa?

#include <stdio.h>

void main(void)
{
char dia;
int fila,columna, primerdia, comienzo=1;
int diasdelmes[6][7];
int nombremes,mes;
int cuantosdias[]={31,28,31,30,31,30,31,31,30,31,30,31};

printf("Para que mes quieres calcular el calendario ?\n\n");


printf("1. Enero.\n");
printf("2. Febrero.\n");
printf("3. Marzo.\n");
printf("4. Abril.\n");
printf("5. Mayo.\n");
printf("6. Junio.\n");
printf("7. Julio.\n");
printf("8. Agosto.\n");
printf("9. Septiembre.\n");
printf("10. Octubre.\n");
printf("11. Noviembre.\n");
printf("12. Diciembre.\n");
scanf("%d",&nombremes); 11
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

switch (nombremes) {
case 1: mes=0;
break;
case 2: mes=1;
break;
case 3: mes=2;
break;
case 4: mes=3;
break;
case 5: mes=4;
break;
case 6: mes=5;
break;
case 7: mes=6;
break;
case 8: mes=7;
break;
case 9: mes=8;
break;
case 10: mes=9;
break;
case 11: mes=10;
break;
case 12: mes=11;
break; 12
}
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

printf("En que cae el primer dia del mes ?\n");


printf("L / M / X / J / V / S / D\n");
fflush(stdin);
dia=getchar();
switch (dia) {
case 'L': primerdia=0;
break;
case 'M': primerdia=1;
break;
case 'X': primerdia=2;
break;
case 'J': primerdia=3;
break;
case 'V': primerdia=4;
break;
case 'S': primerdia=5;
break;
case 'D': primerdia=6;
break;
}
13
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

for(fila=0; fila<=5; fila=fila+1)


for(columna=0; columna<=6; columna=columna+1)
diasdelmes[fila][columna]=0;

for(columna=primerdia; columna<=6; columna=columna+1)


{
diasdelmes[0][columna]=comienzo;
comienzo=comienzo+1;
}
for(fila=1; fila<=5; fila=fila+1)
for(columna=0; columna<=6; columna=columna+1)
{
if (comienzo<=cuantosdias[mes]) {
diasdelmes[fila][columna]=comienzo;
comienzo=comienzo+1;
}
}

14
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

printf("\n\n");
switch (nombremes) {
case 1: printf("Enero\n");
break;
case 2: printf("Febrero\n");
break;
case 3: printf("Marzo\n");
break;
case 4: printf("Abril\n");
break;
case 5: printf("Mayo\n");
break;
case 6: printf("Junio\n");
break;
case 7: printf("Julio\n");
break;
case 8: printf("Agosto\n");
break;
case 9: printf("Septiembre\n");
break;
case 10: printf("Octubre\n");
break;
case 11: printf("Noviembre\n");
break;
case 12: printf("Diciembre\n");
break;
} 15
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

for(fila=0; fila<=5; fila=fila+1)


{
for(columna=0; columna<=6; columna=columna+1)
printf("%d ",diasdelmes[fila][columna]);
printf("\n");
}

Ejemplo 3. Hacer un programa en C para jugar al buscaminas.

Solución

Otra solución

Ejemplo 4. Hacer un programa en C para jugar al Tetris.

16
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

3.3 Cadenas de caracteres.

Definición: Es una secuencia de caracteres ASCII almacenados en un vector y donde el


último carácter del vector es el carácter nulo ( ‘\0’ ).

Ejemplos:

#include <stdio.h>
void main(void)
{
int indice;
char cadena1[]={'E','s','t','o',' ','e','s',' ','u','n','a',' ','c','a','d','e','n','a','.','\0'};
char cadenaerronea[]={'E','s','t','o‘,' ','e','s',' ','u','n','a',' ','c','a','d','e','n','a','.'};
char cadena2[]="Esto es una cadena.";
char cadena3[20]="Esto es una cadena.";
char apellido[10];

printf("%s\n",cadena1);
printf("%s\n",cadenaerronea);
printf("%s\n",cadena2);
printf("%s\n",cadena3);
printf("Esto es una cadena.\n");
17
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

for(indice=0;indice<=3;indice=indice+1)
printf("%c",cadena2[indice]);
printf("\n");

printf("Teclea tu nombre: ");


scanf("%s",cadena1);
printf("Tu nombre es %s\n",cadena1);
printf("Teclea tu apellido: ");
scanf("%s",apellido);
printf("Tu apellido es %s\n",apellido);

18
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

Manipulación de cadenas de caracteres.

1. Indicar que vamos manipular en el programa cadenas de caracteres.


#include <string.h>

2. Manipularlas con:

a) strcpy(cadena_destino, cadena_origen)
Copia la cadena_origen en la cadena_destino.

b) strcat(cadena_destino, cadena_origen)
Pega (concatena) al final de la cadena_destino la cadena_origen.

c) strlen(cadena)
Devuelve la longitud de la cadena como un int.

d) strcmp(cadena1, cadena2)
Compara la cadena1 con la cadena2 y devuelve :
0 si cadena1 es exactamente igual a cadena2.
<0 si cadena1 está antes que cadena2 en el diccionario.
>0 si cadena1 está después que cadena2 en el diccionario
19
Departamento de Sistemas Informáticos Informática
Universidad de Castilla-La mancha EDII

Ejemplo:

#include <stdio.h>
#include <string.h>

void main(void)
{
char palabra1[20], palabra2[20];
int resultado,longitud;
printf("Teclea una palabra: ");
scanf("%s",palabra1);
printf("Teclea otra palabra: ");
scanf("%s",palabra2);

longitud=strlen(palabra1);
printf("La longitud de %s es %d\n",palabra1,longitud);

resultado=strcmp(palabra1,palabra2);
if (resultado == 0) printf("%s es igual que %s\n",palabra1,palabra2);
else printf("%s no es igual que %s\n",palabra1,palabra2);

printf("El resultado de pegar %s con %s es ",palabra1,palabra2);


strcat(palabra1,palabra2);
printf("%s\n",palabra1);
} 20

Vous aimerez peut-être aussi