0% encontró este documento útil (0 votos)
338 vistas30 páginas

Ejemplos Array

El documento describe el uso de registros (struct) en C++. Los registros permiten agrupar múltiples datos de diferentes tipos bajo una sola variable. El documento explica cómo definir registros, acceder a los campos de datos dentro de un registro, crear arrays de registros, anidar registros dentro de otros registros, y proporciona un ejemplo completo de un programa que utiliza registros para almacenar y manipular datos de archivos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
338 vistas30 páginas

Ejemplos Array

El documento describe el uso de registros (struct) en C++. Los registros permiten agrupar múltiples datos de diferentes tipos bajo una sola variable. El documento explica cómo definir registros, acceder a los campos de datos dentro de un registro, crear arrays de registros, anidar registros dentro de otros registros, y proporciona un ejemplo completo de un programa que utiliza registros para almacenar y manipular datos de archivos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 30

7.

Registros (struct)
  Curso: Introducción a C++

7. Registros (Struct)

7.1. Definición y acceso a los datos


Un registro es una agrupación de datos, los cuales no necesariamente son
del mismo tipo. Se definen con la palabra “struct”.

Para acceder a cada uno de los datos que forman el registro, tanto si
queremos leer su valor como si queremos cambiarlo, se debe indicar el
nombre de la variable y el del dato (o campo) separados por un punto:

// Introducción a C++, Nacho Cabanes


// Ejemplo 07.01:
// Registros (struct)
 
#include <iostream>
using namespace std;
 
int main()
{
struct
{
string nombre;
char inicial;
int edad;
float nota;
} persona;
 
persona.nombre = "Juan";
persona.inicial = 'J';
persona.edad = 20;
persona.nota = 7.5;
cout << "La edad es " << persona.edad;
 
return 0;
}
 

Como es habitual en C++, para declarar la variable hemos indicado primero


el tipo de datos (struct { ...} ) y después el nombre que tendrá esa variable
(persona).

También podemos declarar primero cómo van a ser nuestros registros, y


más adelante definir variables de ese tipo:

// Introducción a C++, Nacho Cabanes


// Ejemplo 07.02:
// Registros (2)
 
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
struct datosPersona
{
string nombre;
char inicial;
int edad;
float nota;
};
 
datosPersona persona;
 
persona.nombre = "Juan";
persona.inicial = 'J';
persona.edad = 20;
persona.nota = 7.5;
cout << "La edad es " << persona.edad;
 
return 0;
}
 

Ejercicios propuestos:

 (7.1.1) Un “struct” que almacene datos de una canción en formato


MP3: Artista, Título, Duración (en segundos), Tamaño del fichero (en
KB). Un programa debe pedir los datos de una canción al usuario,
almacenarlos en dicho “struct” y después mostrarlos en pantalla.

7.2. Arrays de registros


Hemos guardado varios datos de una persona. Se pueden almacenar los
de varias personas si combinamos el uso de los “struct” con las tablas
(arrays) que vimos anteriormente. La sintaxis no es exactamente la misma,
y tendremos que añadir la palabra "new" en el momento de reservar
espacio. Por ejemplo, si queremos guardar los datos de 100 alumnos
podríamos hacer:

// Introducción a C++, Nacho Cabanes


// Ejemplo 07.03:
// Array de registros
 
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
struct datosPersona
{
string nombre;
char inicial;
int edad;
float nota;
};
 
datosPersona *persona = new datosPersona[50];
 
for (int i=0; i<5; i++)
{
cout << "Dime el nombre de la persona " << i << endl;
cin >> persona[i].nombre;
}
 
cout << "La persona 3 es " << persona[2].nombre << endl;
 
return 0;
}
 

La inicial del primer alumno sería “alumnos[0].inicial”, y la edad del último


sería “alumnos[99].edad”.

Ejercicios propuestos:

 (7.2.1) Ampliar el programa del ejercicio 7.1.1, para que almacene


datos de hasta 100 canciones. Deberá tener un menú que permita las
opciones: añadir una nueva canción, mostrar el título de todas las
canciones, buscar la canción que contenga un cierto texto (en el
artista o en el título). Nota: si te parece demasiado complicado, en el
apartado 7.4 tienes un ejemplo parecido, desarrollado de principio a
fin.
 (7.2.2) Un programa que permita guardar datos de "imágenes"
(ficheros de ordenador que contengan fotografías o cualquier otro tipo
de información gráfica). De cada imagen se debe guardar: nombre
(texto), ancho en píxeles (por ejemplo 2000), alto en píxeles (por
ejemplo, 3000), tamaño en Kb (por ejemplo 145,6). El programa debe
ser capaz de almacenar hasta 700 imágenes (deberá avisar cuando
su capacidad esté llena). Debe permitir las opciones: añadir una ficha
nueva, ver todas las fichas (número y nombre de cada imagen),
buscar la ficha que tenga un cierto nombre.

7.3. Estructuras anidadas


Podemos encontrarnos con un registo que tenga varios datos, y que a su
vez ocurra que uno de esos datos esté formado por varios datos más
sencillos. Para hacerlo desde C++, incluiríamos un “struct” dentro de otro,
así:

// Introducción a C++, Nacho Cabanes


// Ejemplo 07.04:
// Registros anidados
 
#include <iostream>
#include <string>
using namespace std;
 
struct fechaNacimiento
{
int dia;
int mes;
int anyo;
};
 
struct datosPersona
{
string nombre;
char inicial;
struct fechaNacimiento diaDeNacimiento;
float nota;
};
 
int main()
{
datosPersona persona;
 
persona.nombre = "Ignacio";
persona.inicial = 'I';
persona.diaDeNacimiento.mes = 8;
persona.nota = 7.5;
cout << "La nota es " << persona.nota;
 
return 0;
}
 

Ejercicios propuestos:

 (7.3.1) Ampliar el programa del ejercicio 7.2.1, para que el campo


“duración” se almacene como minutos y segundos, usando un “struct”
anidado que contenga a su vez estos dos campos.

7.4. Ejemplo completo


Vamos a hacer un ejemplo completo que use tablas (“arrays”), registros
(“struct”) y que además manipule cadenas.

La idea va a ser la siguiente: Crearemos un programa que pueda almacenar


datos de hasta 1000 ficheros (archivos de ordenador). Para cada fichero,
debe guardar los siguientes datos: Nombre del fichero (max 40 letras),
Tamaño (en KB, número de 0 a 2.000.000.000). El programa mostrará un
menú que permita al usuario las siguientes operaciones:

1- Añadir datos de un nuevo fichero


2- Mostrar los nombres de todos los ficheros almacenados
3- Mostrar ficheros que sean de más de un cierto tamaño (por ejemplo,
2000 KB).
4- Ver todos los datos de un cierto fichero (a partir de su nombre)
5- Salir de la aplicación (como todavía no sabemos almacenar los datos,
éstos se perderán).

No debería resultar difícil. Vamos a ver directamente una de las formas en


que se podría plantear y luego comentaremos alguna de las mejoras que se
podría (incluso se debería) hacer.

Una opción que podemos a tomar para resolver este problema es la de


contar el número de fichas que tenemos almacenadas, y así podremos
añadir de una en una. Si tenemos 0 fichas, deberemos almacenar la
siguiente (la primera) en la posición 0; si tenemos dos fichas, serán la 0 y la
1, luego añadiremos en la posición 2; en general, si tenemos “n” fichas,
añadiremos cada nueva ficha en la posición “n”. Por otra parte, para revisar
todas las fichas, recorreremos desde la posición 0 hasta la n-1, haciendo
algo como

for (i=0; i<=n-1; i++) { ... más órdenes ...}

o bien algo como

for (i=0; i<n; i++) { ... más órdenes ...}

El resto del programa no es difícil: sabemos leer y comparar textos y


números. Sólo haremos dos consideraciones:

 No se comportará correctamente si los textos (nombre del fichero, por


ejemplo) contienen espacios, porque aún no sabemos leer textos con
espacios.
 Hemos limitado el número de fichas a 1000, así que, si nos piden
añadir, deberíamos asegurarnos antes de que todavía tenemos hueco
disponible.

Con todo esto, nuestro fuente quedaría así:

// Introducción a C++, Nacho Cabanes


// Ejemplo 07.05:
// Array con muchos struct y menu para manejarla
 
#include <iostream>
#include <string>
using namespace std;
 
struct tipoDatos
{
string nombreFich; // Nombre del fichero
long tamanyo; // El tamaño en bytes
};
 
int numeroFichas=0; // Número de fichas que ya tenemos
int i; // Para bucles
int opcion; // La opcion del menu que elija el usuario
 
string textoTemporal; // Para pedir datos al usuario
int numeroTemporal;
 
int main()
{
tipoDatos *fichas = new tipoDatos[1000];
 
do
{
// Menu principal
cout << endl;
cout << "Escoja una opción:" << endl;
cout << "1.- Añadir datos de un nuevo fichero" << endl;
cout << "2.- Mostrar los nombres de todos los ficheros" << endl;
cout << "3.- Mostrar ficheros que sean de mas de un cierto
tamaño" << endl;
cout << "4.- Ver datos de un fichero" << endl;
cout << "5.- Salir" << endl;
 
cin >> opcion;
 
// Hacemos una cosa u otra según la opción escogida
switch(opcion)
{
case 1: // Añadir un dato nuevo
if (numeroFichas < 1000) // Si queda hueco
{
cout << "Introduce el nombre del fichero: ";
cin >> fichas[numeroFichas].nombreFich;
cout << "Introduce el tamaño en KB: ";
cin >> fichas[numeroFichas].tamanyo;
numeroFichas++; // Y tenemos una ficha más
}
else // Si no hay hueco para más fichas, avisamos
cout << "Máximo de fichas alcanzado (1000)!" << endl;
break;
 
case 2: // Mostrar todos
for (i=0; i<numeroFichas; i++)
cout << "Nombre: " << fichas[i].nombreFich
<< "; Tamaño: " << fichas[i].tamanyo
<< "Kb" << endl;
break;
 
case 3: // Mostrar según el tamaño
cout << "¿A partir de que tamaño quieres que te muestre?
";
cin >> numeroTemporal;
for (i=0; i<numeroFichas; i++)
if (fichas[i].tamanyo >= numeroTemporal)
cout << "Nombre: " << fichas[i].nombreFich
<< "; Tamaño: " << fichas[i].tamanyo
<< " Kb" << endl;
break;
 
case 4: // Ver todos los datos (pocos) de un fichero
cout << "¿De qué fichero quieres ver todos los datos?";
cin >> textoTemporal;
for (i=0; i<numeroFichas; i++)
if (fichas[i].nombreFich == textoTemporal)
cout << "Nombre: " << fichas[i].nombreFich
<< "; Tamaño: " << fichas[i].tamanyo
<< " Kb" << endl;
break;
 
case 5: // Salir: avisamos de que salimos
cout << "Fin del programa" << endl;
break;
 
default: // Otra opcion: no válida
cout << "Opción desconocida!" << endl;
break;
}
} while (opcion != 5); // Si la opcion es 5, terminamos
 
return 0;
}
 
Funciona, y hace todo lo que tiene que hacer, pero es mejorable. Por
supuesto, en un caso real es habitual que cada ficha tenga que guardar más
información que sólo esos dos apartados de ejemplo que hemos previsto
esta vez. Si nos muestra todos los datos en pantalla y se trata de muchos
datos, puede ocurrir que aparezcan en pantalla tan rápido que no nos dé
tiempo a leerlos, así que sería deseable que parase cuando se llenase la
pantalla de información (por ejemplo, una pausa tras mostrar cada 25
datos). Por supuesto, se nos pueden ocurrir muchas más preguntas que
hacerle sobre nuestros datos. Y además, cuando salgamos del programa se
borrarán todos los datos que habíamos tecleado, pero eso es lo único “casi
inevitable”, porque aún no sabemos manejar ficheros.

Ejercicios propuestos:

 (7.4.1) Un programa que pida el nombre, el apellido y la edad de una


persona, los almacene en un “struct” y luego muestre los tres datos
en una misma línea, separados por comas.
 (7.4.2) Un programa que pida datos de 8 personas: nombre, dia de
nacimiento, mes de nacimiento, y año de nacimiento (que se deben
almacenar en una tabla de structs). Después deberá repetir lo
siguiente: preguntar un número de mes y mostrar en pantalla los
datos de las personas que cumplan los años durante ese mes.
Terminará de repetirse cuando se teclee 0 como número de mes.
 (7.4.3) Un programa que sea capaz de almacenar los datos de 50
personas: nombre, dirección, teléfono, edad (usando una tabla de
structs). Deberá ir pidiendo los datos uno por uno, hasta que un
nombre se introduzca vacío (se pulse Intro sin teclear nada).
Entonces deberá aparecer un menú que permita:
o Mostrar la lista de todos los nombres.
o Mostrar las personas de una cierta edad.
o Mostrar las personas cuya inicial sea la que el usuario indique.
o Salir del programa
(lógicamente, este menú debe repetirse hasta que se escoja la
opción de “salir”).
 (7.4.4) Mejorar la base de datos de ficheros (ejemplo 07.05) para que
no permita introducir tamaños incorrectos (números negativos) ni
nombres de fichero vacíos.
 (7.4.5) Ampliar la base de datos de ficheros (ejemplo 07.05) para que
incluya una opción de búsqueda parcial, en la que el usuario indique
parte del nombre y se muestre todos los ficheros que contienen ese
fragmento.
 (7.4.6) Ampliar la base de datos de ficheros (ejemplo 07.05) para que
se pueda borrar un cierto dato (habrá que “mover hacia atrás” todos
los datos que había después de ese, y disminuir el contador de la
cantidad de datos que tenemos).
 (7.4.7) Mejorar la base de datos de ficheros (ejemplo 07.05) para que
se pueda modificar un cierto dato a partir de su número (por ejemplo,
el dato número 3). En esa modificación, se deberá permitir al usuario
pulsar Intro sin teclear nada, para indicar que no desea modificar un
cierto dato, en vez de reemplazarlo por una cadena vacía.
 (7.4.8) Ampliar la base de datos de ficheros (ejemplo 07.05) para que
se permita ordenar los datos por nombre. Para ello, deberás buscar
información sobre algún método de ordenación sencillo, como el
"método de burbuja" (en el siguiente apartado tienes algunos), y
aplicarlo a este caso concreto.
1. Que rellene un array con los 100 primeros números enteros y los muestre en pantalla en orden
ascendente.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
            int x,tabla[100];
           
            for (x=1;x<=100;x++)
            {
        tabla[x]=x;
    }
           
            for (x=1;x<=100;x++)
            {
        printf("%d\n",tabla[x]);
    }
           
    system("PAUSE");     
    return 0;
}

2. Que rellene un array con los 100 primeros números enteros y los muestre en pantalla en orden
descendente.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
            int x,tabla[100];
           
            for (x=1;x<=100;x++)
            {
        tabla[x]=x;
    }
           
            for (x=100;x>=1;x--)
            {
        printf("%d\n",tabla[x]);
    }
           
    system("PAUSE");     
    return 0;
}
3. Que rellene un array con los números primos comprendidos entre 1 y 100 y los muestre en pantalla
en orden ascendente.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
            int x,cont,z,i,tabla[100];
           
            i=0;
            for (x=1;x<=100;x++)
            {
        cont=0;
        for (z=1;z<=x;z++)
        {
            if (x%z==0)
            {
               cont++;
            }
        }
       
        if (cont==2 || z==1 || z==0)
        {
         tabla[i]=x;
         i++;
        }
       
    }
           
            for (x=0;x<i;x++)
            {
        printf("%d\n",tabla[x]);
    }
           
    system("PAUSE");     
    return 0;
}

4. Que rellene un array con los números pares comprendidos entre 1 y 100 y los muestre en pantalla
en orden ascendente.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
            int x,cont,z,i,tabla[100];
           
            i=0;
            for (x=1;x<=100;x++)
            {
        cont=0;
        if (x%2==0)
        {
           tabla[i]=x;
           i++;
        }
    }
           
            for (x=0;x<i;x++)
            {
        printf("%d\n",tabla[x]);
    }
           
    system("PAUSE");     
    return 0;
}

5. Que rellene un array con los números impares comprendidos entre 1 y 100 y los muestre en pantalla
en orden ascendente.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
            int x,cont,z,i,tabla[100];
           
            i=0;
            for (x=1;x<=100;x++)
            {
        cont=0;
        if (x%2==1)
        {
           tabla[i]=x;
           i++;
        }
    }
           
            for (x=0;x<i;x++)
            {
        printf("%d\n",tabla[x]);
    }
           
    system("PAUSE");     
    return 0;
}

6. Que lea 10 números por teclado, los almacene en un array y muestre la suma, resta, multiplicación y
división de todos.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
            int x,tabla[10];
            int sum,res,mul,div;
           
            for (x=0;x<10;x++)
            {
        printf("Introduzca número\n");
        scanf("%d",&tabla[x]);
    }
           
            sum=tabla[0];
    res=tabla[0];
    mul=tabla[0];
    div=tabla[0];
           
            for (x=1;x<10;x++)
            {
        sum=sum+tabla[x];
        res=res-tabla[x];
        mul=mul*tabla[x];
        div=div/tabla[x];
    }
           
            printf("Suma: %d\n",sum);
            printf("Resta: %d\n",res);
            printf("Multiplicación: %d\n",mul);
            printf("División: %d\n",div);
           
    system("PAUSE");     
    return 0;
}

7. Que lea 10 números por teclado, los almacene en un array y los ordene de forma ascendente.

#include <stdio.h>
#include <stdlib.h>

int main()
{
  float aux, numeros[10];
  int i,j,n=10;

  for (i=0;i<n;i++){
                    printf("Escriba un número");
                    scanf("%f",&numeros[i]);
      }

  for(i=0;i<n-1;i++)
 {
   for(j=i+1;j<n;j++)
   {
       if(numeros[i]<numeros[j])
       {
           aux=numeros[i];
           numeros[i]=numeros[j];
           numeros[j]=aux;
       }
   }
 }
 
  for (i=n-1;i>=0;i--){
      printf("%f\n",numeros[i]);
 }
     
  system("PAUSE");     
  return 0;
}

8. Que lea 10 números por teclado, 5 para un array y 5 para otro array distinto. Mostrar los 10 números
en pantalla mediante un solo array.

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int aux, numeros1[5],numeros2[5],numeros3[10];
  int i,j;

  for (i=0;i<5;i++){
                    printf("Escriba un número");
                    scanf("%d",&numeros1[i]);
      }
     
  for (i=0;i<5;i++){
                    printf("Escriba un número");
                    scanf("%d",&numeros2[i]);
      }
 
 
  for(i=0;i<5;i++)
 {
   numeros3[i]=numeros1[i];
 }
 
  for(i=0;i<5;i++)
 {
   numeros3[5+i]=numeros2[i];
 }
 
  for (i=0;i<10;i++){
      printf("%d\n",numeros3[i]);
 }
     
  system("PAUSE");     
  return 0;
}

9. Que lea 5 números por teclado, los copie a otro array multiplicados por 2 y muestre el segundo
array.

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int aux, numeros1[5],numeros2[5];
  int i,j;

  for (i=0;i<5;i++){
                    printf("Escriba un número");
                    scanf("%d",&numeros1[i]);
      }
     
  for(i=0;i<5;i++)
 {
   numeros2[i]=numeros1[i]*2;
 }
 
  for (i=0;i<5;i++){
      printf("%d\n",numeros2[i]);
 }
     
  system("PAUSE");     
  return 0;
}

10. Que lea 5 números por teclado, los copie a otro array multiplicados por 2 y los muestre todos
ordenados usando un tercer array.

#include <stdio.h>
#include <stdlib.h>
int main()
{
  int aux, numeros1[5],numeros2[5],numeros3[10];
  int i,j;

  for (i=0;i<5;i++){
                    printf("Escriba un número");
                    scanf("%d",&numeros1[i]);
      }
     
  for(i=0;i<5;i++)
 {
   numeros2[i]=numeros1[i]*2;
 }
 
  for(i=0;i<5;i++)
 {
   numeros3[i]=numeros1[i];
 }
 
  for(i=0;i<5;i++)
 {
   numeros3[5+i]=numeros2[i];
 }
 
  for (i=0;i<10;i++){
      printf("%d\n",numeros3[i]);
 }
     
  system("PAUSE");     
  return 0;
}

11. Que rellene un array con los 100 primeros números pares y muestre su suma.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
            int x,cont,sum,i,tabla[100];
           
            i=0;
            sum=0;
            for (x=1;x<=100;x++)
            {
        cont=0;
        if (x%2==0)
        {
           tabla[i]=x;
           i++;
        }
    }
           
            for (x=0;x<i;x++)
            {
        sum=sum+tabla[x];
    }
   
    printf("%d\n",sum);
           
    system("PAUSE");     
    return 0;
}

12. Que lea 10 números por teclado, los almacene en un array y muestre la media.

#include <stdio.h>
#include <stdlib.h>

int main()
{
  float sum, numeros1[10];
  int i;

  sum=0;
  for (i=0;i<10;i++){
                    printf("Escriba un número");
                    scanf("%f",&numeros1[i]);
      }
     
  for(i=0;i<10;i++)
 {
   sum=sum+numeros1[i];
 }
 
  printf("%f\n",sum/10);
     
  system("PAUSE");     
  return 0;
}

13. Que mediante un array almacene números tanto positivos como negativos y los muestre
ordenados.

#include <stdio.h>
#include <stdlib.h>

int main()
{
  float aux, numeros[10];
  int i,j,n=10;

  for (i=0;i<n;i++){
                    printf("Escriba un número");
                    scanf("%f",&numeros[i]);
      }

  for(i=0;i<n-1;i++)
 {
   for(j=i+1;j<n;j++)
   {
       if(numeros[i]<numeros[j])
       {
           aux=numeros[i];
           numeros[i]=numeros[j];
           numeros[j]=aux;
       }
   }
 }
 
  for (i=n-1;i>=0;i--){
      printf("%f\n",numeros[i]);
 }
     
  system("PAUSE");     
  return 0;
}

14. Que rellene un array con 20 números y luego busque un número concreto.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

    int  i,x=0,vector[20], n=20, dato, centro,inf=0,sup=n-1;


  
    for (i=0;i<20;i++){
        printf("Escriba un número");
        scanf("%d",&vector[i]);
    }
  
    printf("Escriba el número a buscar");
    scanf("%d",&dato);
  
    while(inf<=sup)
    {
     centro=(sup+inf)/2;
     if (vector[centro]==dato)
     {
        printf("Existe\n");
        x=1;
        break;
     } 
     else if(dato < vector [centro] )
     {
        sup=centro-1;
     }
     else
     {
       inf=centro+1;
     }
    }
   
    if (x==0)
    {
       printf("No existe\n");     
    }
  
    system("PAUSE");     
    return 0;

15. Que pinte un tablero de ajedrez, los peones con la letra P, las torres con T, los caballos con C, los
alfiles con A, el rey con R y la reina con M.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{
    int x,y;
   
    for (x=0;x<8;x++)
    {
        for (y=0;y<8;y++)
        {
            //peones
            if (x==1 || x==6)
            {
             printf("P");
            }
            //torres
            else if ((x==0 && y==0) ||
                    (x==7 && y==0) ||
                    (x==0 && y==7) ||
                    (x==7 && y==7)
                    )
            {
             printf("T");
            }
            //caballos
            else if ((x==0 && y==1) ||
                    (x==7 && y==1) ||
                    (x==0 && y==6) ||
                    (x==7 && y==6)
                    )
            {
             printf("C");
            }
            //alfiles
            else if ((x==0 && y==2) ||
                    (x==7 && y==2) ||
                    (x==0 && y==5) ||
                    (x==7 && y==5)
                    )
            {
             printf("A");
            }
            //reina
            else if ((x==0 && y==3) ||
                    (x==7 && y==3)
                    )
            {
             printf("M");
            }
            //rey
            else if ((x==0 && y==4) ||
                    (x==7 && y==4)
                    )
            {
             printf("R");
            }
            else
            {
                printf(" ");
            }
        }
        printf("\n");
    }
   
    system("PAUSE");     
    return 0;
}

16. Que muestre los primeros 100 números de izquierda a derecha usando un array de dos
dimensiones.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

    int x,y, numeros[10][10];


   
    for (x=0;x<10;x++)
    {
        for (y=0;y<10;y++)
        {
            numeros[x][y]=(x*10)+1+y;
        }
       
    }
   
    for (x=0;x<10;x++)
    {
        for (y=0;y<10;y++)
        {
            printf("%d ",numeros[x][y]);
        }
        printf("\n");
    }
   
    system("PAUSE");     
    return 0;

17. Que muestre los primeros 100 números de izquierda a derecha usando un array de dos
dimensiones, la última fila a mostrará la suma de sus respectivas columnas.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

    int x,y,sum, numeros[11][10];


   
    for (y=0;y<10;y++)
    {
        sum=0;
        for (x=0;x<10;x++)
        {
            numeros[x][y]=(x*10)+1+y;
            sum=sum+numeros[x][y];
        }
        numeros[10][y]=sum;
    }
   
    for (x=0;x<11;x++)
    {
        for (y=0;y<10;y++)
        {
            printf("%d ",numeros[x][y]);
        }
        printf("\n");
    }
   
    system("PAUSE");     
    return 0;
}

18. Que rellene un array de dos dimensiones con números pares, lo pinte y después que pida una
posición X,Y y mostrar el número correspondiente.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

    int x,y,num=2, numeros[3][3];


   
    for (x=0;x<3;x++)
    {
        for (y=0;y<3;y++)
        {
            numeros[x][y]=num;
            num=num*2;
        }
    }
   
    printf("Introduzca coordenada x: ");
    scanf("%d",&x);
    printf("Introduzca coordenada y: ");
    scanf("%d",&y);
   
    printf("El número es: %d\n",numeros[x][y]);
   
    system("PAUSE");     
    return 0;
}

19. Que rellene una matriz de 3x3 y muestre su traspuesta (la traspuesta se consigue intercambiando
filas por columnas y viceversa).

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

    int x,y,num=0, numeros[4][4];


   
    for (x=0;x<3;x++)
    {
        for (y=0;y<3;y++)
        {
            numeros[x][y]=num;
            num++;
        }
    }
   
    printf("El array original es: \n\n\n");
   
    for(x = 0;x < 3;x++)
    {
      for(y = 0;y < 3;y++)
      {
          printf("    %d     ", numeros[x][y]);
      }
      printf("\n\n\n");
    }
   
    printf("La traspuesta es: \n\n\n");
   
    for(x = 0;x < 3;x++)
    {
      for(y = 0;y < 3;y++)
      {
          printf("    %d     ", numeros[y][x]);
      }
      printf("\n\n\n");
    }
   
    system("PAUSE");     
    return 0;
}

20. Que lea una cadena y la muestre al revés.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

    int indice,x;


    char frase[50];
   
    printf("Introduzca una frase: ");
    gets(frase);
   
    for(x = 0;x < 50;x++)
    {
      if (frase[x]=='\0')
      {
       indice=x;
       break;
      }
    }
   
    printf("La frase al reves es: \n\n");
   
    for(x = indice-1;x >=0;x--)
    {
      printf("%c",frase[x]);
    }
   
    printf("\n\n");
   
    system("PAUSE");     
    return 0;
}

21. Que lea una cadena y diga cuantas vocales hay.


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{

    int sum=0,x;


    char frase[50];
   
    printf("Introduzca una frase: ");
    gets(frase);
   
    for(x = 0;x < 50;x++)
    {
      switch (frase[x])
      {
           case 'a':
                sum++;
                break;
           case 'e':
                sum++;
                break;
           case 'i':
                sum++;
                break;
           case 'o':
                sum++;
                break;
           case 'u':
                sum++;
                break;            
           default:
                break;
      }
     
    }
   
    printf("\n\nEn la frase hay %d vocales\n\n",sum);
   
    printf("\n\n");
   
    system("PAUSE");     
    return 0;
}

22. Que lea una cadena y diga cuantas mayúsculas hay.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{
    int sum=0,x;
    char frase[50];
   
    printf("Introduzca una frase: ");
    gets(frase);
   
    for(x = 0;x < 50;x++)
    {
      if (frase[x]>=65 && frase[x]<=90)
      {
       sum++;
      }
    }
   
    printf("\n\nEn la frase hay %d mayúsculas\n\n",sum);
   
    printf("\n\n");
   
    system("PAUSE");     
    return 0;
}

23. Que lea una cadena y la encripte sumando 3 al código ASCII de cada carácter. Mostrar por pantalla.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])


{
    int sum=0,x;
    char frase[50];
   
    printf("Introduzca una frase: ");
    gets(frase);
   
    for(x = 0; x < 50;x++)
    {
      if (frase[x]!='\0')
      {
       frase[x]=frase[x]+3;
      }
    }
   
    printf("\n\nLa nueva frase es:\n\n",sum);
    printf("\n\n%s\n\n",frase);
    printf("\n\n");
   
    system("PAUSE");     
    return 0;
}

24. Que gestione los datos de stock de una tienda de comestibles, la información a recoger será:
nombre del producto, precio, cantidad en stock. La tienda dispone de 10 productos distintos. El
programa debe ser capaz de:

1. Dar de alta un producto nuevo.


2. Buscar un producto por su nombre.
3. Modificar el stock y precio de un producto dado.

#include <stdio.h>
#include <stdlib.h>

struct producto {
    char nombre[50];
    float precio;
    int cantidad;
};

int main(int argc, char *argv[])


{
    struct producto prod,productos[10];
   
    int x,opcion=1;
   
    for (x=0;x<10;x++)
        {
            strcpy(productos[x].nombre,"X");
            productos[x].precio=0;
            productos[x].cantidad=0;
        }
   
    while ((opcion==1 || opcion==2 || opcion==3) && (opcion!=4))
    {
   
        printf("1- Alta de producto\n");
        printf("2- Buscar por nombre\n");
        printf("3- Modificar stock y precio\n");
        printf("4- Salir\n");
        printf("Introduzca una opción: ");
        scanf("%d",&opcion);
               
        if (opcion==1)
        {
           printf("Introduzca un nombre: ");
           gets(prod.nombre);
           gets(prod.nombre);
           printf("Introduzca un precio: ");
           scanf("%f",&prod.precio);
           printf("Introduzca un stock: ");
           scanf("%d",&prod.cantidad);
          
           for(x = 9; x >=0; x--)
           {
            if (x!=0)
            {
                strcpy(productos[x].nombre,productos[x-1].nombre);
                productos[x].precio=productos[x-1].precio;
                productos[x].cantidad=productos[x-1].cantidad;
            }
            else
            {
               strcpy(productos[x].nombre,prod.nombre);
               productos[x].precio=prod.precio;
               productos[x].cantidad=prod.cantidad;
            }
           }
           printf("\nProducto creado. \n\n");
        }
        else if (opcion==2)
        {
           printf("Introduzca un nombre: ");
           gets(prod.nombre);
           gets(prod.nombre);

           for(x = 0; x < 10;x++)


           {
                
             if (strcmp(productos[x].nombre,prod.nombre)==0)
             {
               printf("\nNombre: %s\n",productos[x].nombre);
               printf("Precio: %f\n",productos[x].precio);
               printf("Cantidad en Stock: %d\n",productos[x].cantidad);
             }
           }
           printf("\n\n");
        }
        else if (opcion==3)
        {
           printf("Introduzca un nombre: ");
           gets(prod.nombre);
           gets(prod.nombre);

           for(x = 0; x < 10;x++)


           {
             if (strcmp(productos[x].nombre,prod.nombre)==0)
             {
               printf("Introduzca un precio: ");
               scanf("%f",&productos[x].precio);
               printf("Introduzca un stock: ");
               scanf("%d",&productos[x].cantidad);
               printf("\nProducto modificado.");
             }
           }
           printf("\n\n");
        }
    }
       
   
    system("PAUSE");     
    return 0;
}

25. Que gestiona las notas de una clase de 20 alumnos de los cuales sabemos el nombre y la nota. El
programa debe ser capaz de:

1. Buscar un alumno.
2. Modificar su nota.
3. Realizar la media de todas las notas.
4. Realizar la media de las notas menores de 5.
5. Mostrar el alumno que mejores notas ha sacado.
6. Mostrar el alumno que peores notas ha sacado.

#include <stdio.h>
#include <stdlib.h>

struct alumno {
    char nombre[50];
    float nota;
};

int main(int argc, char *argv[])


{
    struct alumno alum,alumnos[5];
   
    int x,opcion=1;
    float sum=0,cont=0,mejor,peor;
   
   
    for (x=0;x<5;x++)
    {
        printf("Introduzca nombre alumno:");
        gets(alumnos[x].nombre);
        gets(alumnos[x].nombre);
        printf("Introduzca nota:");
        scanf("%f",&alumnos[x].nota);
    }
   
    while ((opcion==1 || opcion==2 ||
            opcion==3 || opcion==4 ||
            opcion==5 || opcion==6) && (opcion!=7))
    {
   
        printf("1- Buscar un alumno\n");
        printf("2- Modificar nota\n");
        printf("3- Media de todas las notas\n");
        printf("4- Media de todas las notas inferiores a 5\n");
        printf("5- Alumno con mejores notas\n");
        printf("6- Alumno con peores notas\n");
        printf("7- Salir\n");
        printf("Introduzca una opción: ");
        scanf("%d",&opcion);
               
        if (opcion==1)
        {
           printf("Introduzca un nombre: ");
           gets(alum.nombre);
           gets(alum.nombre);
          
           for(x = 0; x < 5;x++)
           {
             if (strcmp(alumnos[x].nombre,alum.nombre)==0)
             {
               printf("\nNombre: %s\n",alumnos[x].nombre);
               printf("Nota: %f\n",alumnos[x].nota);
             }
           }
           printf("\n\n");
        }
        else if (opcion==2)
        {
           printf("Introduzca un nombre: ");
           gets(alum.nombre);
           gets(alum.nombre);

           for(x = 0; x < 5;x++)


           {
             if (strcmp(alumnos[x].nombre,alum.nombre)==0)
             {
               printf("Introduzca una nota: ");
               scanf("%f",&alumnos[x].nota);
               printf("\nNota modificada.");
             }
           }
           printf("\n\n");
        }
        else if (opcion==3)
        {
          sum=0;
          for(x = 0; x < 5;x++)
          {
             sum=sum+alumnos[x].nota;
          }
          printf("\nLa media de las notas es de: %f \n",(sum/5));
        }
        else if (opcion==4)
        {
          sum=0;
          cont=0;
          for(x = 0; x < 5;x++)
          {
             if (alumnos[x].nota<5)
             {
              sum=sum+alumnos[x].nota;
              cont++;
             }
          }
          printf("\nLa media de las notas inferiores a 5 es: %f \n",sum/cont);
        }
        else if (opcion==5)
        {
          mejor=0;
          for(x = 0; x < 5;x++)
          {
             if (alumnos[x].nota>mejor)
             {
              mejor=alumnos[x].nota;
              alum.nota=alumnos[x].nota;
              strcpy(alum.nombre,alumnos[x].nombre);
             }
          }
          printf("\nEl alumno con mejores notas es: %s \n",alum.nombre);
        }
        else if (opcion==6)
        {
          peor=10;
          for(x = 0; x < 5;x++)
          {
             if (alumnos[x].nota<peor)
             {
              peor=alumnos[x].nota;
              alum.nota=alumnos[x].nota;
              strcpy(alum.nombre,alumnos[x].nombre);
             }
          }
          printf("\nEl alumno con peores notas es: %s \n",alum.nombre);
        }
    }
       
   
    system("PAUSE");     
    return 0;
}

También podría gustarte