Professional Documents
Culture Documents
Tema4 ExersDissenyAlgoris
Tema4 ExersDissenyAlgoris
Tema4 ExersDissenyAlgoris
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 calcular_producte(...............................................) {
......................
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 ....
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 ....
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
Fonaments de Programaci 3
ExercicisDissenyd'Algorismes
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
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.
Fonaments de Programaci 6