UTN FRBA Algoritmos y Estructura de Datos Examen Final 18/07/2014. Apellido y nombre: Legajo: Cursó con Prof:

Documentos relacionados
Tipos de datos y Operadores Básicos

Práctica 2 - Manejo de estructuras de datos y punteros

UTN FRBA Algoritmos y Estructura de Datos Examen Final 13/02/2015. Apellido y nombre: Legajo: Cursó con Prof:

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

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

Algoritmos y Programación I

Examen Fundamentos de Programación 15 de enero de 2016 Curso 2015/16

Informática II Vectores y Matrices

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

Escuela Politécnica Superior de Elche

Funciones y paso de parámetros

Introducción al lenguaje C

Auxiliar 1 - CC31A Programación de software sistema

Sintaxis de C Ing. Jose Maria Sola Dr. Oscar Ricardo Bruno

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

DEFINICIONES BÁSICAS DE LAS ESTRUCTURAS DE DATOS

identificador: Es el nombre que le damos a la variable matriz y por el cual la referenciaremos en nuestro programa.

Tipos de Arreglos. Notación Algoritmica de los Arreglos multidimensionales tipo_dato nombre[dim 1. , dim 2. ,..., dim n

Escuela Politécnica Superior de Elche

Principal material bibliográfico utilizado

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Práctica 3: Vectores y matrices en C.

UNIVERSIDAD NACIONAL DE SALTA Sede Regional Orán AÑO: 2013 Carreras: TIG - TUP

Práctica 1 Arreglos n-dimensionales y operaciones con bits PRÁCTICA I

Fundamentos de Programación Visual Basic

Examen de Repetición. Lenguajes de Programación

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Examen Teórico (1/3 de la nota final)

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Elabore un diagrama de flujo, diseñe la forma y la codificación de un programa que:

Objetivo N 2. Conocer la Estructura General de un Programa en C++ Estructura de Datos Prof. Egilde Márquez

PROGRAMACIÓN ESTRUCTURADA

EJERCICIOS. Algo de C CADENAS

Práctica 7c: Uso de estructuras en C.

Instituto Técnico Jesús Obrero 4to año Programación Profesor: Luis Vallenilla

Macros LENGUAJE DE PROGRAMACIÓN ESTRUCTURADO

Informática I (2014-2) Taller Lenguaje C Prof. Sebastián Isaza Departamento de Ingeniería Electrónica Facultad de Ingeniería Universidad de Antioquia

Tema 2. Tipos y Estructuras Básicas

Programación I Funciones

Estructuras de Datos Estáticas. Diseñar y programar en lenguaje C soluciones utilizando estructuras de datos estáticas

Fundamentos de Informática. Primer Curso de Ingenieros Industriales

Elabore un diagrama de flujo y la codificación de un programa para:

Tema 1. Programación modular. Programación Avanzada Ingeniería Técnica en Informática de Gestión Jorge Badenas

Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Objetivos. El alumno conocerá y aplicará el concepto de archivo para el almacenamiento y recuperación de datos persistentes.

Elementos de un programa en C

Tema: Clases y Objetos en C#. Parte II.

Capitulo 2. Programación Modular

ESTRUCTURAS. Struct Identificador_ tipo_estructura { Tipo miembro_1; /*Declaración de los miembros*/

Programación Estructurada

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

Programación estructurada (Introducción a lenguaje C)

Definición de estructuras. Estructuras, uniones y enumeraciones. Declaración. Definición y declaración. (struct, union y enum)

Tema: Funciones Virtuales y Polimorfismo.

Tema: Funciones Virtuales y Polimorfismo.

Examen escrito de Programación 1

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

Cadenas de caracteres

1.1 Tipos de Datos Primitivos. 1.2 Tipos de datos estructurados. 1.3 Definición de estructura de datos

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Arboles Binarios de Búsqueda en C++

Fundamentos de programación JAVA

Objetivo El alumno conocerá y aplicará los conceptos de arreglo y estructura en la realización de programas que resuelvan problemas de tipo numérico.

Algebra de Matrices 1

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

GUIA 1: Repaso sobre uso de C#. Funciones, procedimientos y arreglos.

Introducción a la Programación

Descripción de un Programa

Programación Orientada a Objetos en C++

Modularización en lenguaje C. Funciones

FUNCIONES. Identificador valido. Tipo-Funcion Identificador_de_la_funcion (Tipo par1,tipo par2 )

GUIA DE LABORATORIO # 13 Arreglos unidimensionales y bidimensionales

Tema 6: Memoria dinámica

En el siguiente ejemplo se declara un registro y luego variables de ese tipo de registro:

Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS. Departamento de Ciencias de la Computación e IA. Subprogramas en C

REPRESENTACIÓN DE DATOS

INTRODUCCIÓN A LA POO EN C++

Tema 10: Tipos de datos definidos por el usuario

TEORÍA. N T f n h g $ S S P f C n S S P f C n S S C h P n S S C h P n S S P P f P n f P

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

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

Abelardo Pardo. Iria Estévez Ayres. Damaris Fuentes Lorenzo. Pablo Basanta Val. Pedro J. Muñoz Merino. Hugo A. Parada.

Cadenas y Estructuras

Tema: Plantillas en C++.

Programación I Teoría II.

Practicas de Programación Estructurada. Clave: 12125

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

Estructuras. //identificador del cliente

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Unidad I Tipos de Datos en C

Especificación IEEE-754, para representar valores decimales en punto flotante de simple precisión.

Tema 16: Tipos de datos estructurados en lenguaje C

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I

/* Compilador del Lenguaje Micro (Fischer) */ #include <stdio.h> #include <string.h> #include <ctype.h>

/**********************Prototipos de ciones************************/ TOKEN scanner(); int columna(int c);

WHILE Y DO WHILE BREAK EN LENGUAJE C. BUCLES MIENTRAS. FORZAR SALIDA O TERMINACIÓN. EJEMPLO (CU00534F)

Punteros. Programación en C 1

Dobles: Es el caso de la instrucción if-else (punto 1.2).

INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN C

Transcripción:

UTN FRBA Algoritmos y Estructura de Datos Examen Final 18/07/2014 Distancias entre localidades Temas evaluados: Resolución de problemas, estructuras de datos, matrices, y lenguaje de programación Contexto Usted es miembro de un equipo de desarrollo de software. El equipo debe desarrollar un sistema para consultar distancias y rutas entre localidades. Cada localidad se representa con un número entre 1 y 100, y las distancias y rutas con enteros positivos. Usted es responsable de realizar las consultas sobre los datos que ya están en memoria. Problema Desarrollar las funciones que permiten consultar información acerca de rutas entre localidades; utilizar los recursos disponibles. Recursos disponibles Vector (arreglo de una dimensión) Rutas. Contiene la distancia en kilómetros entre todas las localidades que están relacionadas por una ruta directa. Cada ruta se representa como una 4-upla: localidad 1 (1..100), localidad 2 (1..100), distancia (entero positivo) y ruta (entero positivo). Una ruta está descripta solo una vez; por ejemplo, si la localidad α está a 10 km de la localidad β y los une la ruta 5, entonces, el arreglo contiene la 4-upla (α, β, 10, 5), ó la 4-upla (β, α, 10, 5), pero no ambas. Matriz (arreglo de dos dimensiones) M. Es una matriz de enteros cuadrada de tamaño 100, contiene las distancias y números de rutas entre las localidades. Por ejemplo, para las localidades i y j, M i j representa la distancia de la localidad i a la j, mientras que M j i representa el número de ruta que conecta j con i; y M i i y M j j están en cero. Recuerde que: 1. Si M i j pertenece al triangulo inferior, entonces i > j (distancia) 2. El elemento simétrico respecto la diagonal principal es M i j (ruta) [0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3] [2][0] [2][1] [2][2] [2][3] [3][0] [3][1] [2][2] [3][3] Se pide 1. Codifique todas las declaraciones para el arreglo Rutas. 2. Codifique el prototipo (no la definición) de la función InicializarM que inicializa M con los datos necesarios para resolver las consultas. Decida los parámetros y justifique su decisión. 3. Diseñe o codifique la función MostrarRuta que dado tres parámetros localidad 1, localidad 2, y M, muestra por cout (la salida estándar) el identificador de la ruta y la distancia que une localidad 1 con localidad 2. Si no hay ruta, muestra un mensaje apropiado. 4. Diseñe o codifique la función MostrarVecinas. Dada dos parámetros localidad, y M, muestra por cout las localidades con las que localidad tiene ruta directa. Si no hay vecinas, muestra un mensaje apropiado.

Distancias entre localidades Temas evaluados: Resolución de problemas, estructuras de datos, matrices, y lenguaje de programación Contexto Usted es miembro de un equipo de desarrollo de software. El equipo debe desarrollar un sistema para consultar distancias y rutas entre localidades. Cada localidad se representa con un nombre (cadena de 20 caracteres), y las distancias y rutas con enteros positivos. Usted es responsable de tomar los datos desde un flujo binario y llevar los a memoria en una representación que facilite las consultas. Problema Desarrollar las funciones que permiten llevar a memoria los datos disponibles en archivos binarios para permitir, luego, consultar información acerca de rutas entre localidades; utilizar los recursos disponibles. Recursos disponibles Un flujo de registros (archivo abierto) Rutas. Contiene la distancia en kilómetros entre todas las localidades que están relacionadas por una ruta directa. Cada ruta se representa como una 4-upla: localidad 1 (Cadena 20 caracteres), localidad 2 (Cadena de 20 caracteres), distancia (entero positivo) y ruta (entero positivo). Una ruta está descripta solo una vez; por ejemplo, si la localidad α está a 10 km de la localidad β y los une la ruta 5, entonces, el arreglo contiene la 4-upla (α, β, 10, 5), ó la 4-upla (β, α, 10, 5), pero no ambas. Una matriz (arreglo de dos dimensiones) M. Es una matriz de enteros cuadrada de tamaño 100, no está incializada. Un vector (arreglo) Localidades con los nombres de cada una de las 100 ciudades, ordenados alfabéticamente en forma creciente. La posición de la localidad en este vector, determina la fila y columna en M. Por ejemplo, si la localidad San Pedro está en la posición 21 del vector, entonces en la fila 21 y en la columna 21 están las distancias y rutas de las vecinas de San Pedro. Una función BuscarLocalidad que dado el nombre de una localidad y el vector localidades, retorna la posición en ese vector. La función está disponible, pero usted debe definir su prototipo. Se pide 1. Codifique las todas las declaraciones necesarias para Rutas, M, y Localidades. 2. Codifique el prototipo (no la definición) de la función BuscarLocalidad. Decida los parámetros y justifique su decisión. 3. Diagrame o codifique la función InicializarM que dados el flujo binario Ruta, el vector Localidades, y la matriz M, cargue en M los datos del flujo, y establezca en cero los elementos de M no utilizados. La función debe dejar cargar en M las distancias y números de rutas entre las localidades. Por ejemplo, para las localidades i y j, M i j debe representar la distancia de la localidad i a la j, mientras que M j i debe representar el número de ruta que conecta j con i; y M i i, y M j j debe estar en cero. Como las localidades en el flujo son representadas como cadenas y en la matriz como índices, es necesario en el transformar la representación, para eso debe invocar la función BuscarLocalidad con el vector Localidades. Tenga en cuenta que: Si M i j pertenece al triangulo inferior, entonces i > j (distancia) El elemento simétrico respecto la diagonal principal es M i j (ruta) [0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3] [2][0] [2][1] [2][2] [2][3] [3][0] [3][1] [2][2] [3][3]

Solucion primera fecha 18/07 /* UTN FRBA AED * Final 20140718 - Rutas * OB&JMS #include <stdio.h> // printf #define LOCS 100 // Cantidad de localidades. /* 1. Codifique todas las declaraciones para el arreglo Rutas. // typedef tipo Nuevo nombre crea un sinónimo con el nombre Nuevo de un tipo. typedef struct { unsigned localidad1; // int es válido. unsigned localidad2; unsigned distancia; unsigned ruta; Ruta; Ruta Rutas[LOCS*LOCS]; /* 2. Codifique el prototipo función InicializarM /* La función no retorna valores, por eso es void. El parámetro m tiene la referencia de la matriz a inicializar, es un parámetro out, ya que va a ser utilzada para almacenar la información de r de una forma que facilite las consultas. El parámetro r tiene la referencia a las rutas, como es un parámetro in, se lo califica con const. Se decide no pasar el tamaño de R porque se deriva de LOCS. void InicializarM(unsigned m[][locs], const Ruta r[]);

/*3. Diseñe o codifique la función MostrarRuta void MostrarRuta(unsigned localidad1, unsigned localidad2, unsigned m[][locs]) { // Determino si está en la diagonal principal if(localidad1==localidad2){ printf("ya está en %d\n", localidad1); return; // Determino si hay ruta int ruta = m[localidad1][localidad2]; if(ruta == 0){ printf("no hay ruta entre %d y %d\n", localidad1, localidad2); return; int distancia = m[localidad2][localidad1];//en el simétrico a ruta. // Determino si m[localidad1][localidad2] es triangulo inferior. if(localidad2<localidad1){ // En triángulo inferior ruta tiene la distancia, intercambio. int temp=ruta; ruta=distancia, distancia=temp; // Informo printf("la localidad %d est a %d km de la localidad %d, y se unen por la ruta %d\n", localidad1, distancia, localidad2, ruta);

/*4. Dise e o codifique la funci n MostrarVecinas. Dada dos par metros localidad, y M, muestra por cout las localidades con las que localidad tiene ruta directa. Si no hay vecinas, muestra un mensaje apropiado. Las dejamos para ustedes. Gracias profesor Sola

Solución segunda fecha /* UTN FRBA AED * Final 20140801 - Rutas * OB&JMS&HC #include <stdio.h> // #define LOCS 100 // Cantidad de localidades. /* 1. Codifique todas las declaraciones. // Registro del flujo struct Ruta{ char localidad1[20 + 1]; char localidad2[20 + 1]; unsigned distancia; unsigned ruta; ; FILE *f = fopen( C:\\micarpeta\\rutas, rb ); unsigned M[LOCS][LOCS]; /* 2. Codifique el prototipo (no la definición) de la función BuscarLocalidad. Decida los parámetros y justifique su decisión. /* int BuscarLocalidad(const char *localidades[], const char *localidad); int BuscarLocalidad(const char localidades[][20+1], const char localidad[]); int BuscarLocalidad(const string localidades[], const string localidad);

/*3. Diagrame o codifique la función CargarMatriz void IncializarM(FILE *f, unsigned m[][locs], const string v[]) { Ruta r; Int l1,l2; //Incializar en cero for(int i for(int j M[i][j]=0; while(fread(&r, sizeof(r),1,f){ l1 = BuscarCiudad(v, r.localidad1); l2 = BuscarCiudad(v, r.localidad2); // puede simplificar // Si m[l1][l2] no es triangulo inferior (l1 >l2) intercambio. if(l2>l1){ // intercambio int temp = l1; l1 = l2; l2 = temp; //en le siempre está el mayor // actualizo la matríz M[l1][l2] = r.distancia; M[l2][l1] = r.ruta; //Nota: aquí no se validan los valores, es decir si hay ciudades inexistentes o si en una cuatroupla se hace referencia a la misma ciudad. Como hipótesis de trabajo suponemos que eso se valida en otro contexto (por ejemplo los datos del archivo fueron validados antes)