Tema4 ExersDissenyAlgoris

You might also like

You are on page 1of 6

ExercicisDissenyd'Algorismes

DISSENYD'ALGORISMES
Exercicis
1. Dissenyeu i implementeu una funci que calculi el producte escalar de dos vectors.
Utilitzeu la funci per verificar si dos vectors sn ortogonals (dos vectors sn
ortogonals si el seu producte escalar s 0).
2. Implementeu una funci que donada una data en el format dd/mm/aaaa, retorni un
boole que indiqui si es tracta duna data correcta. Caldr tenir en compte el
nombre de dies de cada mes (sabent que quan lany s de trasps el febrer t 29
dies). Un any s de trasps si s mltiple de 4 per no de 100, o b si s mltiple de
400.
3. Comparaci d'edats. Feu un programa que demani dos llistats de nombres enters,
corresponents a les edats de dos poblacions, i compari si contenen el mateix
conjunt de nombres, s a dir, tenen els mateixos nombres encara que sigui en
posicions diferents.
4. Donada una seqencia d'enters acabada en 0 calcular quants dels nombres sn
primers.

5. Donat un nombre enter positiu n calcular i mostrar per pantalla tots els nombres
positius inferirors a ell i que sn perfectes. Un nombre perfecte s aquell que s la
suma de tots els seus divisors, excepte ell mateix. Per exemple, 6 s un nombre
perfecte: 6 = 1+2+3, 28 = 1+2+4+7+14, ....

6. Nombres amics. Dos nombres enters positius s'anomenen amics quan la suma dels
divisors propis d'un d'ells s igual al valor de l'altre. Els divisors propis d'un nombre
sn tots els divisors excepte ell mateix. Un exemple de nombres amics sn els
valors 220 i 284. Els divisors de 220 sn: 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 i 110, i la
seva suma val 284. I els divisors propis de 284 sn: 1, 2, 4, 71 i 142, i la seva suma
val 220. Es demana comprovar si els dos nmeros enters que ens indica l'usuari
per teclat sn amics.

7. Ens donen quasi construt el segent codi C que vol calcular el producte de dos
matrius quadrades que introdueix l'usuari per teclat. S'ha esborrat un conjunt de
parts de codi i es demana que refacis el que falta.

#include <stdio.h>
#define N 10
typedef int matriu[N][N];

int llegir_dimensio() {
int dim;
printf("Dona la dimensio de les matrius a multiplicar \n");
scanf("%d",&dim);
while ((dim<2) || (dim>N)) {
printf("Valor incorrecte introdueix de nou ");
scanf("%d",&dim);
}
return(dim);
}

Fonaments de Programaci 1
ExercicisDissenyd'Algorismes

void llegir_matriu(matriu m, int dim) {


int i, j;

printf("Indica valors per a la matriu fila per fila\n");


for (i=0; i<dim; i++)
for (j=0; j<dim; j++)
scanf("%d",&m[i][j]);
}

void calcular_producte(...............................................) {
......................

void mostrar_matriu(matriu m, int d) {


int i, j;

for (i=0; i<d; i++) {


for (j=0; j<d; j++)
printf("%4d ",m[i][j]);
printf("\n");
}
}

int main() {
matriu m1, m2, mprod;
int dim;

...=llegir_dimensio();
llegir_matriu(...........);
llegir_matriu(..............);
calcular_producte(..............);
mostrar_matriu(................);
return(0);
}

8. Segment ms llarg
Dissenya un algorisme que calculi quin s el segment ms llarg duna taula de valors
enters introduda per teclat. Definirem el terme segment com el conjunt de posicions
consecutives que contenen el mateix valor. Exemple de taula:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 ....
1 1 3 3 3 1 7 7 7 7 8 4 3 3 ....

Sortida: El segment ms llarg ocupa 4 posicions [6-9] i el valor que cont s


lenter 7.

Fonaments de Programaci 2
ExercicisDissenyd'Algorismes

9. Bloc creixent.
Definirem el terme bloc creixent en una taula com el conjunt de posicions
consecutives que tenen valors iguals o creixents. Dissenya un algorisme que calculi
quin s el bloc creixent ms llarg duna taula de valors enters introduda per teclat.
Exemple de taula:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 ....
1 4 3 5 8 19 71 71 7 7 8 4 3 3 ....

Sortida: El bloc creixent ms llarg ocupa 6 posicions [2-7].

10. Segment nul.


Donada una seqncia d'enters x0, x1, x2, x3, x4, ..., xn-1 direm que el conjunt d'enters
xi, xi+1, ..., xj s nul si xi + xi+1 + ...... + xj = 0. La longitud d'aquest conjunt d'enters
s j-i+1.
Suposem que tenim una taula T amb N valors enters. Es demana que dissenyeu un
algorisme que calculi la longitud del segment nul ms llarg en dos supsits diferents:
(a) Els valors de la taula estan ordenats de ms petit a ms gran
(b) No hi ha cap ordre en el contingut dels elements de la taula. Exemple per a
aquest segon supsit. Suposo que N=7
La taula T podria ser:
Posici 0 1 2 3 4 5 6
15 20 -45 3 7 35 -9
Hi ha dos segments nuls: un de la posici 0 a la 4 i l'altre de la posici 2 a la 5. I la
longitud del segment nul ms llarg seria 5 ( engloba des de la posicio 0 fins a la 4)

11. Matriu girada. Dissenya un algorisme que demani la dimensi d'una matriu
quadrada, la llegeixi i permeti girar els elements de la matriu. Loperaci de gir s la
que ve representada en el segent grfic i es pot repetir les vegades que es vulgui.
Notar que cada quatre repeticions la matriu torna al seu estat original.

1 2 3 4 13 9 5 1
5 6 7 8 14 10 6 2
9 10 11 12 15 11 7 3
13 14 15 16 16 12 8 4

12. Quadrat mgic.


Un quadrat mgic s una matriu quadrada de nro. imparell de files i columnes on la
suma dels elements de totes les seves files i les seves columnes i les dues diagonals
val igual. Els elements de les caselles van desde 1 fins a N on N s el nro. de files i
columnes i no es repeteix cap valor.
tipus quadrat=taula[N] [N] de enters; N sempre imparell.
Com construir-lo? Hi ha diferents variants per a fer-ho per una forma possible s:
El nro. 1 el situarem en el quadrat superior al central.

Fonaments de Programaci 3
ExercicisDissenyd'Algorismes

El segent nmero el situarem un quadrat a la dreta i un per sobre.


Si resulta que al fer el moviment sortim per la dreta, entendrem que
automticament entrarem per l'esquerra, s a dir, s com si la matriu estes
enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si
sortim per dalt, entrem per baix.
A ms ens podem trobar que la posici on toca anar un nmero ja es troba
ocupada. LLavors el que farem s tornar a la posici on estavem i fer el moviment que
puja dos posicions.
Un exemple de quadrat mgic per a N=5 seria:

23 6 19 2 15 = 65
10 18 1 14 22 = 65
17 5 13 21 9 = 65
4 12 25 8 16 = 65
11 24 7 20 3 = 65
= 65 = 65 = 65 = 65 = 65

13. Donat un quadrat mgic construt dissenyeu una funci que comprovi si s
correcte o no.

14. Palndroms
Un palndrom, del grec palin (endarrere)-dromos (crrer), s una paraula o frase que
es pot llegir tant d'esquerra a dreta com de dreta a esquerra, sense canviar el seu
significat. En general podem aplicar el concepte sobre qualsevol cadena de carcters.
Aix podem parlar de:
i. paraules palndromes: sis, nen, i, ala, reconocer, ...
ii. frases palndromes: Senn t sis nens i set nenes,
iii. nmeros palndroms: 1890981, 12344321, ....
iv. incls de poemes palndroms:
El baf afable
llepa la pell.
Suar trbol. Obre traus,
lleva fatiga, agita, fa vell.

Es tracta doncs de construir una srie de petits programes que ens permetin resoldre
els segents punts:
reconixer si una paraula o nmero sn palndroms,
comptar quantes paraules palndromes tenim en un text (incls els nmeros),
calcular i mostrar per pantalla la paraula palndroma ms llarga d'un text (en
cas de que hi hagi ms duna paraula amb la longitud mxima, solament caldr
mostrar-ne una),
comprovar si una frase s palndroma,
comprovar si un poema s palndrom.

Fonaments de Programaci 4
ExercicisDissenyd'Algorismes

15. Sopa de lletres.


Dissenyar una aplicaci que ens ajudi a crear sopes de lletres. En un primer moment
lusuari marcar molt el procs de construcci del joc. Lusuari donar la dimensi de
la sopa de lletres i una llista de paraules. Per a cada paraula especificar el nom, i el
programa calcular aleatriament la posici on ha danar i la direcci. A partir
d'aquests valors el que es demana a laplicaci s que vagi comprovant la validesa de
la informaci introduida, que no hi hagi solapament de caracters que no coincideixin,
que la paraula no sobresurti pels lmits de la sopa, ... Finalment un cop afegides la
llista de paraules, laplicaci omplir les posicions buides amb caracters aleatoris i
mostrar aquesta sopa per a que es pugui jugar.

16. El joc del penjat.


Volem construir una petita aplicaci que simuli el joc del penjat. Aquest joc consisteix
en que un jugador (en el nostre cas ser el computador) tria una paraula, mostra al
jugador contrari el nombre de lletres que t i aquest segon jugador ha dendevinar la
paraula triada. La forma per a fer-ho s anar indicant lletres i en el cas que formin part
de la paraula, es visualitzen en el seu lloc, i en cas contrari es comptabilitza una
errada. El joc acaba quan, o b, el segon jugador endevina la paraula, o b, quan
comet un nombre mxim derrades, en aquest segon cas el jugador perd i s penjat.
Per a que el computador pugui escollir una paraula, definirem una taula amb una llista
de paraules. La seva definici pot ser de lestil:
const MAX = 1000 /* Nro. de paraules que es guardaran */
N = 35 /* Nro. mxim de carcters de la paraula */
var diccionari : taula [MAX][N] de carcter;

Podem suposar que tenim un mtode que inicialitza aquesta taula amb MAX paraules.
En les caselles buides hi ha espais en blanc.
El computador per a simular que pensa una paraula generar un nombre aleatori
entre 0 i MAX-1. Aquest valor servir per a accedir a la taula diccionari i escollir la
paraula de la fila valor. Tamb podem suposar que tenim un mtode que ens retorna
un valor aleatori entre 0 i MAX-1.
Un cop escollida la paraula, demanar un nivell de dificultat a lusuari. Aquest nivell de
dificultat servir per a configurar el nombre de fallos que es permeten al jugador. En
general sestabliran tres nivells de joc:
0 nivell principiant
1 nivell mig
2 nivell avanat
El nivell principiant permetr que lusuari pugui cometre fins a 20 errors, el nivell mig
15 errors i el nivell avanat noms deixar fer 8 errors.
El segent pas ser mostrar a lusuari la longitud de la paraula. Per a fer-ho, es pot
visualitzar un * per cada carcter encara no endevinat ( a linici no nhi ha cap). A
partir daqu ja sentrar en la dinmica de que el jugador introdueix una lletra i el
computador comprova si pertany a la paraula o no. En cas de que hi pertanyi, es torna
a visualitzar la paraula amb la lletra en el seu lloc o llocs corresponents. En cas de no
hi pertanyi, es torna a visualitzar la paraula en lestat anterior i sinforma a lusuari de
que ja ha coms un altre error.
Lusuari agrair si a ms de mostrar la informaci de lestat de la paraula, es mostri la
llista de les lletres errnies introdudes i els errors que porta comesos.
Es demana dissenyar un algorisme que a partir de la taula carregada en memria i del
mtode de generaci de nombres aleatoris, demani a lusuari el nivell de dificultat, trii
una paraula de la llista, calculi el nombre dintents possibles a partir del nivell de
dificultat, i segueixi loperativa del joc.

Fonaments de Programaci 5
ExercicisDissenyd'Algorismes

Exemple de jugada:
Diccionari
0 VAIXELL
1 CADIRA
2 NOMBRE
3 REAL
4 VARIABLE
........ EINA
.......
MAX-1

El mtode que ens genera un aleatori ens retorna el valor 4, aix dons laplicaci escull
la paraula VARIABLE. Lusuari indica que vol el nivell 3 avanat i per tant el nmero
derrors possibles es colloca a 8.

Informaci que es presenta: ********


Introdueix una lletra: A
Informaci que es presenta: Correcte. *A**A***
Llista de lletres errnies:
Nombre derrors comesos: 0
Introdueix una lletra: O
Informaci que es presenta: Lletra no vlida. *A**A***
Llista de lletres errnies: O
Nombre derrors comesos: 1
Introdueix una lletra: E
Informaci que es presenta: Correcte. *A**A**E
Llista de lletres errnies: O
Nombre derrors comesos: 1
Introdueix una lletra: L
Informaci que es presenta: Correcte. *A**A*LE
Llista de lletres errnies: O
Nombre derrors comesos: 1
Introdueix una lletra: B
Informaci que es presenta: Correcte. *A**ABLE
Llista de lletres errnies: O
Nombre derrors comesos: 1
Introdueix una lletra: T
Informaci que es presenta: Lletra no vlida. *A**ABLE
Llista de lletres errnies: O T
Nombre derrors comesos: 2
Introdueix una lletra: V
Informaci que es presenta: Correcte. VA**ABLE
Llista de lletres errnies: O T
Nombre derrors comesos: 2
Introdueix una lletra: R
Informaci que es presenta: Correcte. VAR*ABLE
Llista de lletres errnies: O T
Nombre derrors comesos: 2
Introdueix una lletra: I
Informaci que es presenta: Correcte. VARIABLE
Llista de lletres errnies: O T
Nombre derrors comesos: 2
FELICITATS, HAS ENDEVINAT LA PARAULA !!!!!

Fonaments de Programaci 6

You might also like