• No se han encontrado resultados

Programación 2 Curso 2017/2018. Práctica 0 Conceptos básicos

N/A
N/A
Protected

Academic year: 2021

Share "Programación 2 Curso 2017/2018. Práctica 0 Conceptos básicos"

Copied!
5
0
0

Texto completo

(1)

Pr´

actica 0

Conceptos b´

asicos

Esta pr´actica consiste en la realizaci´on de una serie de ejercicios con el objetivo de repasar conceptos b´asicos de programaci´on.

1.

Normas generales

1.1.

Entrega

1. El ´ultimo d´ıa para entregar esta pr´actica es el mi´ercoles 23 de mayo, hasta las 23:59. No se admitir´an entregas fuera de plazo. Se puede entregar la pr´actica a lo largo de todo el cuatrimestre, aunque es recomendable acabarla lo antes posible.

2. La pr´actica debe tener s´olo un fichero llamado “repaso.cc”.

1.2.

Detecci´

on de plagios/copias

En el Grado en Ingenier´ıa Inform´atica, la Programaci´on es una materia fundamental, que se aprende programando y haciendo las pr´acticas de las diferentes asignaturas (y otros programas, por supuesto). Si alguien pretende aprobar las asignaturas de programaci´on sin programar (copiando), obviamente tendr´a serios problemas para aprobar y para seguir otras asignaturas, y cuando intente trabajar. Concretamente, en Programaci´on 2 es muy dif´ıcil que alguien que no ha hecho las pr´acticas supere el examen de teor´ıa, por lo que copiar una pr´actica es una de las peores decisiones que se puede tomar.

La pr´actica debe ser un trabajo original de la persona que la entrega; en caso de detectarse indicios de copia de una o m´as pr´acticas se tomar´an las medidas disciplinarias correspondientes, informando a la direcci´on de la EPS por si hubiera lugar a otras medidas disciplinarias adicionales.

1.3.

Otras normas

1. La pr´actica se debe entregar exclusivamente a trav´es del servidor de pr´acticas del departamento de Lenguajes y Sistemas Inform´aticos, al que se puede acceder desde la p´agina principal del departamento (www.dlsi.ua.es, “Entrega de pr´acticas”) o directamente en la url https://pracdlsi.dlsi.ua.es.

No se admitir´an entregas por otros medios (correo electr´onico, UACloud, etc.).

El usuario y contrase˜na para entregar pr´acticas es el mismo que se utiliza en el UACloud.

La pr´actica se puede entregar varias veces, pero s´olo se corregir´a la ´ultima entrega (las anteriores entregas no se borran).

2. El programa debe poder ser compilado sin errores con el compilador de C++ existente en la distribuci´on de Linux de los laboratorios de pr´acticas; si la pr´actica no se puede compilar su calificaci´on ser´a 0.

3. La correcci´on de la pr´actica se har´a de forma autom´atica, por lo que es imprescindible respetar estrictamente los textos y los formatos de salida que se indican en este enunciado.

4. Al principio de todos los ficheros fuente entregados se debe incluir un comentario con el nombre y el NIF (o equivalente) de la persona que entrega la pr´actica, como en el siguiente ejemplo:

// NIF 12345678X GARCIA GARCIA, JUAN MANUEL

5. El c´alculo de la nota de la pr´actica y su influencia en la nota final de la asignatura se detallan en las transpa-rencias de la presentaci´on de la asignatura.

(2)

2.

Descripci´

on de la pr´

actica

Esta pr´actica consiste en una colecci´on de ejercicios que se describen a continuaci´on; deben aparecer todos en el mismo fichero fuente,repaso.cc, y en dicho fichero no debe haber una funci´onmain en el momento de la entrega. En la web de la asignatura se publicar´a un fichero fuente, mainRepaso.cc,1 con los ejemplos que aparecen en el enunciado, que se puede ampliar con pruebas adicionales, y en el que se pueden comentar los ejercicios que todav´ıa no se haya implementado. Para compilar estemain con el fuenterepaso.ccse debe utilizar esta orden:

g++ -Wall mainRepaso.cc repaso.cc -o main

Para corregir la pr´actica se corregir´a cada ejercicio por separado, a˜nadiendo una funci´on main (en otro fichero fuente, parecido almainRepaso.cc) dise˜nada por los profesores de la asignatura.

2.1.

Ejercicios

1. Sentencia condicional: dise˜na una funci´on que reciba un n´umero entero positivon y devuelvatrue sines m´ultiplo de 2 o de 5, pero no es m´ultiplo de 30; si nno es positivo debe devolver false. El prototipo de la funci´on debe ser el siguiente:

bool multiple2or5not30(int n); Ejemplos:

Llamada Valor devuelto

multiple2or5not30(0) false multiple2or5not30(60) false multiple2or5not30(-20) false multiple2or5not30(230) true

2. Sentencia repetitiva: dise˜na una funci´on que imprima los n´umeros pares de un vector hasta que encuentre en el vector el n´umero51; debe devolver el n´umero de pares que ha impreso por pantalla. El prototipo de la funci´on debe ser el siguiente:

int printPairs(int v[],int maxV);

El par´ametrovtiene el vector de n´umeros, ymaxVindica el n´umero de elementos que hay en el vector.

Nota: debes usar una ´unica sentencia repetitiva (un bucle for o while, no un do-while), y una variable booleana para que termine el bucle.

Ejemplos:

v maxV Salida valor devuelto

(1,−4,−7,2,275,5) 6 -4 2 2

(2,4,−8,0,24,8) 6 2 4 -8 0 24 8 6

(9,7,8,51,3,2) 6 8 1

3. N´umeros impares: dise˜na una funci´on que obtenga los n´umeros impares que contiene un vector, y los almacene en otro vector. El prototipo de la funci´on debe ser el siguiente:

int odds(int v[],int n,int iv[]);

La funci´on debe recorrer el vector v, que tendr´a n n´umeros enteros, y debe almacenar en el vector iv los n´umeros impares (en el mismo orden en que aparecen en v); adem´as, debe devolver la cantidad de n´umeros impares encontrados.2 Ejemplos: v n iv valor devuelto (1,−4,−7,2,275,5) 6 (1,−7,275,5) 4 (2,4,−8,0,24,8) 6 () 0 (9,7,5,3,1) 5 (9,7,5,3,1) 5 1Este fichero no se debe entregar, solamente el fuenterepaso.cc.

(3)

4. Tri´angulo: Dise˜na una funci´on que reciba como par´ametro un n´umero entero positivo3e imprima un tri´angulo como los de los ejemplos. El prototipo de la funci´on debe ser el siguiente:

void triangle(int n); Ejemplos: n Salida 1 * 4 * ** * * **** 6 * ** * * * * * * ******

5. N´umeros primos: Dise˜na una funci´on que, dado un n´umero entero n(que ser´a siempre mayor que 0, no es necesario comprobarlo), devuelva el n-simo n´umero primo. Por ejemplo, si n es 1 debe devolver 2(que es el primer n´umero primo), sin es 2 debe devolver 3 (el segundo n´umero primo), sin es 7 debe devolver 17. El prototipo de la funci´on debe ser:

int nPrime(int n);

Debes utilizar una funci´on auxiliar que indique si un n´umero es primo o no,4con el siguiente prototipo: bool isPrime(int n);

6. Descomposici´on de un n´umero en factores: dise˜na una funci´on que reciba como par´ametro un n´umero entero, que debe ser positivo (en caso contrario debe imprimir el mensaje “Error” y nada m´as), y que imprima por pantalla (en una sola l´ınea) la descomposici´on del n´umero en factores primos.5 El prototipo de la funci´on debe ser el siguiente:

void deco(int n); Ejemplos: Llamada Salida deco(264) 2 2 2 3 11 deco(221) 13 17 deco(4123) 7 19 31 deco(-3) Error

Para implementar esta funci´on necesitar´as utilizar la funci´on isPrime del ejercicio anterior, y posiblemente tambi´en la funci´onnPrime.

7. B´usqueda de una subcadena: dadas dos cadenasayb, dise˜na una funci´on que encuentre la primera aparici´on de bdentro de a, y devuelva su posici´on (o -1 si no est´a). Ambas cadenas ser´an vectores de caracteres, con el car´acter especial “\0” que indica el final de la cadena (recuerda que la funci´onstrlendevuelve la longitud de una cadena terminada en “\0”). Por ejemplo, sia es"hola caracola"yb es"la", la funci´on debe devolver 2. El prototipo de la funci´on es:

int search(const char a[],const char b[]); 3Si no es positivo no debe imprimir nada.

4Un n´umero es primo si es mayor que 1 y solamente es divisible por s´ı mismo y por 1. Por tanto, el 1 no es primo (ni el 0, por supuesto).

(4)

Debes implementar esta funci´on sin utilizar funciones est´andar de las librer´ıas del compilador (exceptostrlen), el objetivo es que practiques el manejo de cadenas.

8. Sustituci´on: dise˜na una funci´on que, dada una cadena, sustituya un car´acter por una cadena, y devuelva el n´umero de sustituciones realizadas. Puedes asumir que el vector que almacena la cadena original tiene espacio suficiente para almacenar la cadena resultante de la sustituci´on, y no puedes utilizar vectores auxiliares ni string, debes realizar las sustituciones sobre la propia cadena. El prototipo de la funci´on debe ser:

int subs(char cad[],char c,char sus[]);

Ejemplos:

Llamada cad valor devuelto

subs("hola",’o’,"abuE") "habuEla" 1 subs("como comes",’o’,"OO") "cOOmOO cOOmes" 3 subs("coomo comes",’o’,"oo") "coooomoo coomes" 4

Nota: en este caso concreto, es recomendable utilizar bucleswhileen lugar de buclesforcuando el recorrido de la cadena podr´ıa no ser lineal, es decir, si es necesario hacersaltos en el recorrido.

9. Extracci´on de datos: Dado el siguiente registro con datos de cazas espaciales const int MAXMODEL=20;

struct Fighter { char model[MAXMODEL]; int speed; int attack; int shield; };

dise˜na una funci´on que extraiga los datos de un caza espacial a partir de una cadena como la del siguiente ejemplo:

X-Wing : 120 (75,80)

donde “X-Wing” es el modelo, “120” es la velocidad, “75” la capacidad de ataque (attack) y “80” la fuerza de los escudos (shield). El n´umero de espacios en blanco puede variar, pero el formato ser´a siempre correcto (no es necesario comprobarlo).6

El prototipo de la funci´on debe ser el siguiente: void extractData(char cad[],Fighter &fighter);

Notas:

La cadena con los datos terminar´a en “\0”.

Los n´umeros no tendr´an signo, no es necesario tenerlo en cuenta.

El modelo no contendr´a espacios en blanco ni “:”, pero s´ı cualquier otro car´acter. Tampoco habr´a espacios en blanco antes del modelo.

El nombre del modelo debe almacenarse como una cadena, es decir, terminado en “\0”. Si el nombre completo (a˜nadiendo el “\0”) no cabe en el campomodel, se deberecortar para que quepa (incluyendo el “\0”).

Para convertir una cadena en un n´umero entero se puede usar la funci´onatoi(aunque tambi´en se puede hacer con un bucle).

6Para hacer bien esa comprobaci´on se necesitan unos conocimientos que se imparten en la asignaturaProcesamiento de Lenguajesde cuarto curso.

(5)

10. Matriz de binarios: dada una cadena de caracteres (acabada en “\0”) con varios n´umeros en binario separados por “\n”, dise˜na una funci´on que convierta a decimal e imprima los n´umeros binarios, comprobando a la vez que todos tienen el mismo n´umero de bits (debe ser el n´umero de bits que tenga el primer n´umero).

Por ejemplo, si la cadena es "010\n110\n001\n101", debe imprimir:

2 6 1 5

El ´ultimo n´umero puede o no llevar “\n” al final, y si se detecta un error se debe imprimir el mensaje “Error” y terminar de procesar la cadena; por ejemplo, si la cadena fuera "0010\n1001\n000101\n0101\n", se debe imprimir:

2 9 Error

El prototipo de la funci´on debe ser el siguiente: void convertBinary(char cad[]);

Puedes asumir que en la cadena solo habr´a “0”, “1” y “\n”, y que el primer n´umero tendr´a al menos un bit (es decir, el primer car´acter no va a ser “\n”). No es imprescindible hacer una funci´on auxiliar para convertir una cadena de binario a decimal, aunque est´a permitido.

Referencias

Documento similar