Ejercicios de Repaso



Documentos relacionados
Programación 1 Tema 3. Información, datos, operaciones y expresiones

Ficheros: texto y binarios

Cadenas y Estructuras

Introducción a las sentencias de control

Programación 1 Tema 5. Instrucciones simples y estructuradas

324 MR Versión 1 Prueba Integral 1/3 Semana 10 Lapso

Vectores y Matrices. Dept. Ciencias de la Computación e I.A. Universidad de Granada

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

Funciones: Pasos por Referencia Recursividad

Programación 1 Tema 5. Instrucciones simples y estructuradas

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

Estructuras de control y DFDs

Vectores y matrices. Fundamentos de Programación Fundamentos de Programación I

Prof. Dr. Paul Bustamante

Cátedra I Informática Autor I Carlos Bartó

Estructuras de repetición

TEMA 5: Subprogramas. Programación modular EJERCICIOS DE TRAZAS

Examen escrito de Programación 1

Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy. Febrero 2009

Tema: Arreglos de Objetos en C++.

E/S POR CONSOLA DE C++ Parte I. Elementos Básicos Dr. Oldemar Rodríguez R.

Examen escrito de Programación 1

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

1. Juego del Ahorcado

Curso 0 de Informática

Práctica Guiada: Vectores y Matrices

Tema 4: Estructuras de Control Estructura y Contenidos

1000+(4/100)*1000 =1000 * (1+4/100) =1000 * 1.04 = Al finalizar el segundo año, el 4% se aplica sobre los 1040, y obtenemos:

Tema 3. Estructuras de control

Vectores y matrices. Fundamentos de Programación Fundamentos de Programación I

Funciones. Parámetros por valor

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

Apuntadores en C y C++

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

Prof. Dr. Paul Bustamante

PROBLEMA 1. Rellena el hueco 1 (línea 23). Realiza la reserva de memoria para almacenar los n puntos.

Examen de prácticas de Programación 1

TEMA 4: Estructuras de Control

Introduc)on to Programming (in C++) Ejemplos de tratamiento de secuencia de secuencias. Emma Rollón Departament of Computer Science

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Programación 1 Problemas del Composición condicional

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Prof. Dr. Paul Bustamante

Laboratorio 5 Tema 7. Tipos de Datos Estructurados: Arreglos, Registros y Archivos

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

Examen Junio- Grupo B Lunes 17 de Junio - Programación en C++ Pág. 1

Estructuras de control. Dept. Ciencias de la Computación e I.A. Universidad de Granada

Cadenas de Caracteres

Tema: Sobrecarga de Operadores.

Programación 1 Tema 7. Desarrollo modular y descendente de programas

Fundamentos de la programación

SESIÓN DE EJERCICIOS E1

Programación 2. Lección 4. Metodología de diseño de algoritmos recursivos

Tema 3: Ficheros en C++ Índice. Notas. Programación 2. Curso Notas

Tema 3: Ficheros en C++

Tema 2: La clase string. Índice. Notas. Programación 2. Curso Notas. Definición Declaración Entrada / salida Métodos Operaciones

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Estructura de datos y de la información Boletín de problemas - Tema 9

TEMA 6: Tipos de datos estructurados

Se guardan en archivos con extencion c y los cabezales con extension h

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

FUNDAMENTOS DE PROGRAMACIÓN. 1º ING. INFORMÁTICA (Plan 2000) 2ª Convocatoria. 21 de junio de 2001

Examen escrito de Programación 1

Introducción al tipo de dato ARRAY

EJERCICIOS DE PROGRAMACIÓN EN C. DIBUJAR UN ROMBO O DIAMANTE. CALCULAR SUMATORIOS. (CU00542F)

Desarrollo de Programas. Prof. Lisbeth C. Pérez Rivas

Programación 1 Problemas 3. Composición condicional

Informática FACULTAD DE FÍSICAS

Transcripción:

Ejercicios de Repaso Fundamentos de Programación Fundamentos de Programación I Compañías aéreas Haz un programa que almacene información sobre vuelos de compañías aéreas. Los datos almacenados son: el número de vuelo, la compañía, la ciudad origen, la ciudad destino, el número de plazas totales y el número de plazas libres. Un ejemplo puede ser: 1 Iberia Valencia Madrid 250 10 2 Iberia Madrid Buenos-Aires 300 50 3 AirFrance Valencia Paris 250 70 El programa deberá permitir realizar desde menú las siguientes operaciones: a. Añadir vuelo b. Borrar vuelo c. Modificar el número de plazas libres. d. Ver todos vuelos e. Ver vuelos con plazas libres a un cierto destino. Además el programa debe permitir cargar los datos de sesiones anteriores (desde fichero) y guardar las actualizaciones en un fichero. 1

Estructura de datos que utilizaremos en este programa Elementos del vector v[0] Num_vu elo (int) 1 Compañía Iberia Origen Madrid Destino Barcelona Totales 200 Libres 20 v[1] 2 Air France Barcelona Paris 250 150 v[2] 3 Iberia Madrid Buenos Aires 300 50 Numvuelos = 3 Vector de estructuras: VectorVuelos v; struct vuelo int id; string nombre,origen,destino; int totales, libres; ; const int MAX=200; typedef vuelo VectorVuelos[MAX]; #include <iostream> #include <stdlib.h> #include <string> using namespace std; struct vuelo int id; string nombre; string origen; string destino; int totales; int libres; ; const int MAX=200; Estructura de datos para almacenar la información typedef vuelo VectorVuelos[MAX]; void InsertarVuelo(struct vuelo &miv); void EscribirRegistro(struct vuelo miv); void MostrarTodosVuelos(VectorVuelos v, int tam); void BorrarVuelo(VectorVuelos v,int &tam,int idvuelo); void MostrarVuelosDestino(VectorVuelos v, int tam, string destino); void ModificarPlazasLibres(VectorVuelos v,int tam,int idvuelo,int libres); bool LeerRegistroFichero(ifstream &fe, struct vuelo miv); int LeerDatosdeFichero(ifstream &fe, VectorVuelos v); Void EscribirDatosAFichero(ofstream &fs,const VectorVuelos v); 2

int main() VectorVuelos losvuelos; //vector de estructuras int numvuelos = 0; //numero de elementos actuales en el vector int opcion, idvuelo, libres; bool seguir = true; string destino; do cout << "1. Insertar vuelo." <<endl; cout << "2. Borrar vuelo." << endl; cout << "3. Mostrar vuelo." << endl; cout << "4. Modificar numero de plazas libres para un vuelo." << endl; cout << "5. Mostrar vuelos con plazas libres para un destino." <<endl; cout << "6.Salir" <<endl; cin >> opcion; switch(opcion) case 1: InsertarVuelo(losvuelos[numvuelos]); numvuelos ++; case 2: cout << " Introduce el identificador del vuelo\n"; cin >> idvuelo; BorrarVuelo(losvuelos,numvuelos,idvuelo); case 3: MostrarTodosVuelos(losvuelos, numvuelos); case 4: cout << "Indica el numero de vuelo y de plazas libres\n"; cin >> idvuelo >> libres; ModificarPlazasLibres(losvuelos,numvuelos,idvuelo,libres); case 5: cout << "Consultar plazas vuelo con destino: "; cin >> destino; MostrarVuelosDestino(losvuelos, numvuelos, destino); case 6: seguir = false; while(seguir); system("pause"); return 0; void InsertarVuelo(struct vuelo &miv) //leo la información introducida por teclado cout <<"Id: "; cin >> miv.id; cout <<"Nombre: "; cin >> miv.nombre; cout <<"Origen: "; cin >> miv.origen; cout <<"Destino: "; cin >> miv.destino; cout <<"Numero de plazas totales: "; cin >> miv.totales; miv.libres = miv.totales; void EscribirRegistro(struct vuelo miv) //muestro el contenido de un registro cout << miv.id <<" "; cout << miv.nombre<<" "; cout << miv.origen<<" "; cout << miv.destino<<" "; cout << miv.totales<<" "; cout << miv.libres <<endl; void MostrarTodosVuelos(VectorVuelos v, int tam)//muestro un vector de registros por pantalla int i; for (i = 0 ; i < tam ; i++) EscribirRegistro(v[i]); 3

void BorrarVuelo(VectorVuelos v,int &tam,int idvuelo) int i= 0; int elemento; while (v[i].id!= idvuelo && i < tam) //Buscar vuelo i++; elemento = i; if ( elemento < tam) //Lo he encontrado for ( i = elemento ; i < tam -1 ; i++) //Los muevo de lugar v[i] = v[i + 1]; tam --; //decremento el tamaño del vector else cout << "No existe ese vuelo\n"; void ModificarPlazasLibres(VectorVuelos v,int tam,int idvuelo,int libres) int i, elemento; i = 0; while (v[i].id!= idvuelo && i < tam) //Buscar vuelo i++; elemento = i; if ( elemento < tam) //lo he encontrado v[elemento].libres = libres; //modifico ese elemento cout << "Modificación realizada\n"; void MostrarVuelosDestino(VectorVuelos v, int tam, string destino) int i; for (i = 0; i < tam ; i++) //busco vuelo a un destino con plazas libres y lo muestro if (destino == v[i].destino && v[i].libres > 0) EscribirRegistro(v[i]); //leo un registro del fichero especificado. Devuelvo false si hay un error. bool LeerRegistroFichero(ifstream &fe, struct vuelo & miv); //Leo cada elemento de la estructura de forma independiente fe >> miv.id; fe >> miv.nombre; fe >> miv.origen; fe >> miv.destino; fe >> miv.totales; fe >> miv.totales; La función devuelve true si puede leer todos los campos del registro correctamente //Devuelvo true si todo ha ido bien, false en caso contrario return (!fe.eof()) ; 4

int LeerDatosdeFichero(ifstream &fe, VectorVuelos v) int i = 0; while(leerregistrofichero(fe,v[i]) //la función devuelve true si ha conseguido leer i++ return i;//devuelve el número de elementos leidos void EscribirDatosAFichero(ofstream &fs,const VectorVuelos v, int tam) int i; for(i = 0 ; i< tam ; i++) EscribirRegistroFichero(fs,v[i]) //Utilizo Esta función para escribir cada registro void EscribirRegistroFichero(ofstream &fs,struct vuelo miv) //Imprimo un vuelo por fila en el fichero fs fs<< miv.id << ; fs << miv.nombre << ; fs << miv.origen << ; fs << miv.destino << ; fs << miv.totales << ; fs << miv.totales << endl; Palíndroma en una pasada Escribe un programa que calcula y visualiza los palíndromos en una pasada de los números introducidos por teclado, si los tiene. El proceso consiste en leer un número entero por teclado, calcular si el número tiene un palíndromo en una pasada e indicarlo mediante un mensaje. Ejemplos: Entrada Introduce un número: 216 Proceso Obtiene el traspuesto de 216, que es 612. Suma 216 + 612 = 828. Comprueba que es palíndromo. Salida Su palíndromo en un paso es: 828 Entrada Introduce un número(0 Salir): 154 Proceso Obtiene el traspuesto de 154, que es 451. Suma 154 + 451 = 605. Comprueba que no es palíndromo. Salida El 154 no tiene un palíndromo en una pasada. 5

#include <iostream> #include <stdlib.h> #include <string> using namespace std; void EnteroACadena (int x, string & cadena) char ch; cadena = ""; while (x > 0) ch = char( x % 10 + int( 0 )); cadena= ch + cadena; //anyado a la izquierda x = x / 10; bool CadenaAEntero (string num, int & x) bool error = false; int i; i = 0; x = 0; while ( (error == false) && (i < int (num.length () ) ) ) if ( (int (num[i]) < int('0') ) (int (num[i]) > int ('9') ) ) error = true; else x = x * 10 + int (num[i] - '0');//desplazo hacia a la izquierda i++; return error; int main() string cadena, icadena, palindro; int n1,n2,i,ultima; bool exito; cout<<"\n\tprograma QUE HALLA NUMEROS PALINDROMOS EN UN PASO\n\n"; cout<<"\tintroduce n mero(0 Salir):"; cin >> cadena; ultima=cadena.length()-1; icadena=cadena; for (i=0;i<cadena.length();i++) icadena[ultima-i]=cadena[i]; //invierto cadena exito=cadenaaentero(cadena,n1); exito=cadenaaentero(icadena,n2); //falta comprobar si hay error EnteroACadena(n1+n2,palindro); ultima=palindro.length()-1; i=0; while ((palindro[i]==palindro[ultima]) && i < ultima) i++; ultima--; if (i>=ultima) cout<<"\n\tel n mero pal ndromo es: " << n1 + n2 <<endl; else cout<<"\n\tel n mero no es pal ndromo\n"; system("pause"); return 0; compruebo si es palíndroma 6

Suma de elementos en una matriz (ejercicio examen) Escribe una función que dada una matriz realice la suma de sus elementos en una de sus dimensiones según el valor de un parámetro. El resultado lo almacenará en un vector del tamañó adecuado. Ejemplo: 1 4 5 2 5 7 3 6 9 1 4 2 5 3 6 6 15 const int MAX = 10; typedef int matriz[max][max]; typedef int vector[max]; struct Matriz matriz m; int filas; int columnas; ; Creo una estructura Que contenga también las filas y columnas void SumaMatricial(const Matriz ma,int dim,vector v, int &tam) int i,j; for (i = 0 ; i < 10 ; i++) v[i] = 0;//inicializo el vector resultado a cero for(i = 0; i < ma.filas ; i++) for (j = 0; j < ma.columnas; j++) if (dim == 1) //por filas (si sumo por filas...me quedan columnas-> j) v[j] = v[j] + ma.m[i][j]; tam = ma.columnas;//se puede sacar fuera para evitar asignar lo mismo //varias veces else if ( dim == 2) //por columnas (si sumo por columnas..me quedan filas->i) v[i] = v[i] + ma.m[i][j]; tam = ma.filas; 7

Tamaño de un string de forma recursiva Escribe una función recursiva que tome como argumento un string y devuelva su tamaño sin utilizar la función length(). Ejemplo: int LongitudCadena(string s) int longitud; int algo; if (s == "") //Condición de parada longitud = 0; else s.erase(0,1); //Actualización de parámetro longitud = 1 + LongitudCadena(s);//Construyo la solución return longitud; 8