Arreglos Un arreglo es un grupo indexado de

  • Slides: 20
Download presentation
Arreglos Un arreglo es un grupo “indexado” de elementos del mismo tipo. Los arreglos

Arreglos Un arreglo es un grupo “indexado” de elementos del mismo tipo. Los arreglos siempre Empiezan con el índice 0! 0 1 2 N elementos elemento 3 n-2 índice n-1

Arreglos • Sintaxis: declaración: tipo nombre [capacidad] uso: nombre [indice] • Semántica: declara un

Arreglos • Sintaxis: declaración: tipo nombre [capacidad] uso: nombre [indice] • Semántica: declara un arreglo identificado por ‘nombre’ con ‘capacidad’ elementos del mismo ‘tipo’. Se usa indicando el ‘nombre’ y su posición en el arreglo (desde 0). • Ejemplo: float notas [5]; . . . notas [0] = 4. 5; notas [1] = 5. 2; . . .

Recorrido de arreglos • Normalmente, mediante un índice que varia de 0 a n-1

Recorrido de arreglos • Normalmente, mediante un índice que varia de 0 a n-1 • Ejemplo 1: guardar valores en el arreglo int arreglo [20], indice; . . . for (indice = 0; indice < 20; indice ++) arreglo [indice] = 0; . . . • Ejemplo 2: imprimir el contenido del arreglo int arreglo [50], indice; . . . for (indice = 0; indice < 50; indice ++) printf (“%d “, arreglo [indice]); . . .

Problema Dado un conjunto de notas de un curso, obtenidas desde teclado, imprimir el

Problema Dado un conjunto de notas de un curso, obtenidas desde teclado, imprimir el promedio y cuántas están sobre éste. El proceso de obtención de notas debe detenerse al ingresar una nota 0. Si una nota no está en el rango válido, 1. 0 a 7. 0, debe ignorarse. Algoritmo: 1. Obtener nota a nota, guardándolas en un arreglo 2. Recorrer el arreglo sumando las notas y contando cuántas son 3. Calcular el promedio 4. Recorrer el arreglo contando cuántas están sobre el promedio 5. Imprimir el resultado 6. Terminar

Solución int main ( ) { float notas [100], promedio, suma = 0. 0,

Solución int main ( ) { float notas [100], promedio, suma = 0. 0, nota = -1. 0; int num_notas, sobre = 0, indice = 0; // Obtencion de las notas while (nota != 0. 0 && indice < 100) { scanf (“%f”, &nota); if (nota >= 1. 0 && nota <= 7. 0) notas [indice ++] = nota; } num_notas = indice; // Calculo del promedio for (indice = 0; indice < num_notas; indice ++) suma += notas [indice]; promedio = suma / (num_notas > 0 ? num_notas : 1); // Contar notas sobre el promedio for (indice = 0; indice < num_notas; indice ++) sobre += notas [indice] > promedio ? 1 : 0; } printf (“Promedio: %3. 1 f y sobre el hay %d notasn”, promedio, sobre); return (0);

Arreglos de Strings • Sintaxis: declaración: char nombre [capacidad] [largo] uso: nombre [indice] •

Arreglos de Strings • Sintaxis: declaración: char nombre [capacidad] [largo] uso: nombre [indice] • Semántica: declara el arreglo ‘nombre’ con ‘capacidad’ elementos del tipo string, c/u con un ‘largo’ máximo. Se usa indicando el ‘nombre’ y su posición en el arreglo (desde 0). • Ejemplo: char nombres [5] [30]; . . . strcpy (nombre [0], “Pedro Urdemales”); strcpy (nombre [1], “Mickey Mouse”); . . . printf (“%s”, nombre [3]); . . .

Problema Dada una lista de nombres, obtenidas desde teclado, imprimir el nombre más largo

Problema Dada una lista de nombres, obtenidas desde teclado, imprimir el nombre más largo y cuántos caracteres tiene. El ingreso de nombres termina al recibir “fin”. Algoritmo: 1. Obtener los nombres, guardándolos en un arreglo de strings 2. Recorrer el arreglo determinando el número de caracteres de cada elemento y guardando la posición del más largo 3. Imprimir el resultado 4. Terminar

Solución int main ( ) { int indice, num_nombres, largo_maximo, indice_max; char nombres [100]

Solución int main ( ) { int indice, num_nombres, largo_maximo, indice_max; char nombres [100] [30]; // Obtencion de los nombres for (indice = 0; indice < 100; indice ++) { scanf (“%s”, nombres [indice]); if (strcmp (nombres [indice], “fin”) == 0) break; } num_nombres = indice; // Determinacion del nombre mas largo_maximo = strlen (nombres [0]); indice_max = 0; for (indice = 1; indice < num_nombres; indice ++) { largo = strlen (nombres [indice]); if (largo > largo_maximo) { largo_maximo = largo; indice_max = indice; } } } printf (“El nombre mas largo es: %s y tiene %d caracteresn”, nombres [indice_max], largo_maximo); return (0);

Tarea Una empresa decide realizar una encuesta acerca de los refrescos más consumidos por

Tarea Una empresa decide realizar una encuesta acerca de los refrescos más consumidos por los chilenos. La pregunta es muy simple: "cuál bebida prefiere ? ", a lo cual el usuario responde con un nombre de bebida. Su tarea es construir un programa que permita ingresar las respuestas de los usuarios y contabilice el numero de veces que cada una de ellas ha sido mencionada.

Solución #include <stdio. h> int main ( ) { int num_bebidas, menciones [100], indice;

Solución #include <stdio. h> int main ( ) { int num_bebidas, menciones [100], indice; char bebidas [100] [20], bebida [20]; num_bebidas = 0; strcpy (bebida, ""); while (num_bebidas < 100) { printf ("Cual bebida prefiere? : "); if (strcmp (bebida, "fin") == 0) break; scanf ("%s", bebida); for (indice = 0; indice < num_bebidas; indice ++) { if (strcmp (bebidas [indice], bebida) == 0) { menciones [indice] ++; break; } } } if (indice == num_bebidas) { strcpy (bebidas [indice], bebida); menciones [indice] = 1; num_bebidas ++; }

Solución if (num_bebidas == 100) printf ("Hay 100 bebidas mencionadas. Terminamos la encuesta. n");

Solución if (num_bebidas == 100) printf ("Hay 100 bebidas mencionadas. Terminamos la encuesta. n"); for (indice = 0; indice < num_bebidas; indice ++) printf ("%s ha sido mencionada %d vecesn", bebidas [indice], menciones [indice]); } return (0);

Problema El juego del Loto consiste en escoger 6 números, de un universo de

Problema El juego del Loto consiste en escoger 6 números, de un universo de 38, en una cartilla diseñada para ello, con el objetivo de acertar a 6 números sorteados. Llegado el momento del sorteo, se eligen los 6 números que serán los que implican un premio para los jugadores que los hayan elegido. Se pide construir un programa que reciba los 6 números ganadores e imprima el premio (3, 4, 5 o 6 coincidencias) obtenido por cartillas ingresadas a continuación. El ingreso de cartillas a consultar se debe terminar al recibir un valor – 1.

Solución Algorítmica 1. Construir una función que determine si un número cualquiera está entre

Solución Algorítmica 1. Construir una función que determine si un número cualquiera está entre los números ganadores. 2. En el programa principal, ingresar los 6 números ganadores. 3. En forma cíclica, hacer lo siguiente: 1. Solicitar los 6 números de la cartilla jugada. 2. Si algún número es – 1, terminar el programa. 3. Usando la función inicial, calcular el número de aciertos en la cartilla ingresada. 4. Imprimir el resultado en función del número de aciertos de la cartilla.

Solución 1. Construir una función que determine si un número cualquiera está entre los

Solución 1. Construir una función que determine si un número cualquiera está entre los números ganadores. int ganador (int sorteado [ ], int numero) { int indice; for (indice = 0; indice < 6; indice ++) if (sorteado [indice] == numero) return (1); } return (0);

Solución 2. En el programa principal, ingresar los 6 números ganadores. int main (

Solución 2. En el programa principal, ingresar los 6 números ganadores. int main ( ) { int sorteo [6], cartilla [6], indice, premio; printf ("Ingrese los 6 numeros ganadores: "); for (indice = 0; indice < 6; indice ++) scanf ("%d", &sorteo [indice]);

Solución 3. En forma cíclica, hacer los siguiente: • Solicitar los 6 números de

Solución 3. En forma cíclica, hacer los siguiente: • Solicitar los 6 números de la cartilla jugada. • Si algún número es – 1, terminar el programa. • Usando la función inicial, calcular el número de aciertos en la cartilla ingresada. while (1) { printf ("Ingrese la cartilla a consultar: "); for (indice = 0; indice < 6; indice ++) { scanf ("%d", &cartilla [indice]); if (cartilla [indice] == -1) return (0); } premio = 0; for (indice = 0; indice < 6; indice ++) premio += ganador (sorteo, cartilla [indice]);

Solución 3. En forma cíclica, hacer los siguiente: . . . 4. Imprimir el

Solución 3. En forma cíclica, hacer los siguiente: . . . 4. Imprimir el resultado en función del número de aciertos de la cartilla. } } if (premio < 3) printf ("Su cartilla no tiene premion"); else if (premio == 3) printf ("Su cartilla tiene ternan"); else if (premio == 4) printf ("Su cartilla tiene cuaternan"); else if (premio == 5) printf ("Su cartilla tiene quinan"); else if (premio == 6) printf ("Felicitaciones!!! Ha ganado el Loton");

Arreglos Multidimensionales • Sintaxis: declaración: tipo nombre [lim 1]. . . [limx] uso: nombre

Arreglos Multidimensionales • Sintaxis: declaración: tipo nombre [lim 1]. . . [limx] uso: nombre [indice 1]. . . [indicex] • Semántica: declara un arreglo identificado por ‘nombre’ con ‘lim 1’ *. . . * ‘limx’ elementos del mismo ‘tipo’. Se usa indicando el ‘nombre’ y su posición en el arreglo (desde 0) en cada una de las dimensiones. • Ejemplo: int matrix [5] [3] [7]; . . . matrix [0] [0] = 35; matrix [4] [1] [5] = 22; . . .

Problema Construir un programa que reciba el nombre y las notas obtenidas en 4

Problema Construir un programa que reciba el nombre y las notas obtenidas en 4 controles de los 50 alumnos de un curso, calcule el promedio de notas e imprima la planilla de notas.

#include <stdio. h> int main ( ) { float planilla [50] [5]; int ix

#include <stdio. h> int main ( ) { float planilla [50] [5]; int ix 1, ix 2, num_alumnos; char nombres [50] [20]; Solución printf ("Ingrese el numero de alumnos del curso: "); scanf ("%d", &num_alumnos); for (ix 1 = 0; ix 1 < num_alumnos; ix 1 ++) { printf ("Ingrese nombre y notas del alumno %d: ", ix 1+1); scanf ("%s", nombres [ix 1]); for (ix 2 = 0; ix 2 < 4; ix 2 ++) scanf ("%f", &planilla [ix 1] [ix 2]); } planilla [ix 1] [4] = 0; for (ix 2 = 0; ix 2 < 4; ix 2 ++) planilla [ix 1] [4] += planilla [ix 1] [ix 2]; planilla [ix 1] [4] /= 4; printf ("n. Planilla de Notasn---------n"); for (ix 1 = 0; ix 1 < num_alumnos; ix 1 ++) printf ("%d. %s %3. 1 fn", ix 1+1, nombres [ix 1], planilla [ix 1] [0], planilla [ix 1] [1], planilla [ix 1] [2], planilla [ix 1] [3], planilla [ix 1] [4]); } return (0);