¡Descarga Programació. Problemes resolts y más Ejercicios en PDF de Electrónica de las Telecomunicaciones solo en Docsity!
EDICIONS UPC
AULA POLITÈCNICA
/ INFORMÀTICA
X. Franch - J. Marco - X. Molinero
J. Petit - F. Xhafa
Introducció a la programació
Problemes resolts
AULA POLITÈCNICA 125
/ INFORMÁTICA
Introducció a la programació
Problemes resolts
EDICIONS UPC
AULA POLITÈCNICA
/ INFORMÀTICA
X. Franch - J. Marco - X. Molinero
J. Petit - F. Xhafa
Introducció a la programació
Problemes resolts
Primera edició: setembre de 2006
Disseny de la coberta: Jordi Calvet
© els autors, 2006
© Edicions UPC, 2006 Edicions de la Universitat Politècnica de Catalunya, SL Jordi Girona Salgado 31, 08034 Barcelona Tel.: 934 016 883 Fax: 934 015 885 Edicions Virtuals: www.edicionsupc.es E-mail: [email protected]
ISBN: 978-84-9880-162-
Són rigor osament pr ohibides, sense l'autorització escrita dels titulars del copyright, sota les sancions establertes a la llei, la r eproducció total o par cial d'aquesta obra per qualsevol pr ocediment, inclosos la reprografia i el tractament informàtic, i la distribució d'exemplars mitjançant lloguer o préstec públics.
iv Introducci´o a la Programaci´o — Problemes Resolts
Per fer funcionar aquests algorismes escrits en C++, el lector nom´es haur`a de reordenar els diferents fragments de cada programa i afegir-hi les cap¸caleres que, per raons de brevedat, no hem repetit a cada soluci´o. En particular, nom´es s’utilitzen unes poques funcionalitats de les llibreries , , i .
Voldr´ıem agrair als nostres companys del departament de Llenguatges i Sistemes In- formatics que han fet docencia en aquestes assignatures la seva participaci´o en la confecci´o d’alguns dels enunciats dels problemes que apareixen en aquests llibre, aix´ı com els seus comentaris sobre versions preliminars del material.
Esperem que el llibre sigui d’utilitat als estudiants de programaci´o de la UPC i d’altres universitats de parla catalana.
Barcelona, juliol de 2006
Els autors
´Index
Pr`oleg i
- I Exercicis i problemes ´Index v
- 1 Introducci´o - Exercicis
- 1.1 La congru`encia de Zeller per a calendaris
- 1.2 El valor clau per a calendaris
- 2 Seq¨u`encies - Exercicis
- 2.1 Misteri
- 2.2 Vaques boges
- 2.3 El control de qualitat
- 2.4 Infraccions
- 2.5 El supermercat Fruita Madura
- 2.6 Productes caducats
- 2.7 El valor actual
- 2.8 La benzinera de Vilanova
- 2.9 El p`arquing del Campus Nord
- 2.10 El pol´ıgon equilateral
- 2.11 La Pica d’Estats
- 2.12 Valls minimals
- 2.13 El torneig de futbol
- 3 Accions i funcions vi Introducci´o a la Programaci´o — Problemes Resolts - Exercicis
- 3.1 No ho s´e
- 3.2 Tampoc no ho s´e
- 3.3 Qui ho sap?
- 3.4 Inc`ognita
- 3.5 Comparar dates
- 3.6 Articles caducats
- 3.7 Factorial
- 3.8 M`axim com´u divisor
- 3.9 Llaunes
- 3.10 Intervals
- 3.11 Sumar d´ıgits parells de f (x)
- 3.12 La pesta porcina
- 3.13 Leibniz i π
- 4 Taules - Exercicis
- 4.1 Sobre la taula
- 4.2 Pantans
- 4.3 L’Avi Pep
- 4.4 El p`arquing
- 4.5 Vols
- 4.6 Punt de creu
- 4.7 Vector suma columnes
- 4.8 Files i columnes perpendiculars
- 4.9 El valor propi
- 4.10 La planificaci´o de tasques
- 4.11 La suma per capes
- 4.12 El monitor MonocromTM
- 4.13 La codificaci´o de missatges
- 4.14 Generaci´o de permutacions
- 4.15 El segment nul m´es llarg
- 4.16 Els gratacels de Diagonal Mar
- 4.17 El quadrat m`agic
- 5 Tuples i estructures de dades - Exercicis
- 5.1 La farmac`eutica de Sant Cugat
- 5.2 El parc m`obil d’Igualada
- 5.3 La biblioteca de Castelldefels
- 5.4 La Universitat de Matar´o
- 5.5 L’associaci´o de titulats
- 5.6 La xarxa de concessionaris
- 5.7 El museu de pintura
- 5.8 Prov´ıncies
- 5.9 L’hospital de Manresa
- 5.10 Departaments
- 5.11 Polinomis
- 5.12 El traductor autom`atic
- 6 Projectes ´Index vii
- II Problemes resolts
- 1 Introducci´o
- 1.1 La congru`encia de Zeller per a calendaris
- 1.2 El valor clau per a calendaris
- 2 Seq¨u`encies
- 2.1 Misteri
- 2.2 Vaques boges
- 2.3 El control de qualitat
- 2.4 Infraccions
- 2.5 El supermercat Fruita Madura
- 2.6 Productes caducats
- 2.7 El valor actual
- 2.8 La benzinera de Vilanova
- 2.9 El p`arquing del Campus Nord
- 2.10 El pol´ıgon equilateral
- 2.11 La Pica d’Estats
- 2.12 Valls minimals
- 2.13 El torneig de futbol
- 3 Accions i funcions
- 3.1 No ho s´e
- 3.2 Tampoc ho s´e
- 3.3 Qui ho sap?
- 3.4 Inc`ognita
- 3.5 Comparar dates
- 3.6 Articles caducats
- 3.7 Factorial
- 3.8 M`axim com´u divisor
- 3.9 Llaunes
- 3.10 Intervals
- 3.11 Sumar d´ıgits parells de f (x)
- 3.12 La pesta porcina
- 3.13 Leibniz i π
- 4 Taules
- 4.1 Sobre la taula
- 4.2 Pantans
- 4.3 L’Avi Pep
- 4.4 El p`arquing
- 4.5 Vols
- 4.6 Punt de creu
- 4.7 Vector suma columnes
- 4.8 Files i columnes perpendiculars
- 4.9 El valor propi
- 4.10 La planificaci´o de tasques viii Introducci´o a la Programaci´o — Problemes Resolts
- 4.11 La suma per capes
- 4.12 El monitor monocromTM
- 4.13 La codificaci´o de missatges
- 4.14 Generaci´o de permutacions
- 4.15 El segment nul m´es llarg
- 4.17 El quadrat m`agic
- 4.16 Els gratacels de Diagonal Mar
- 5 Tuples i estructures de dades
- 5.1 La farmac`eutica de Sant Cugat
- 5.2 El parc m`obil d’Igualada
- 5.3 La biblioteca de Castelldefels
- 5.4 La Universitat de Matar´o
- 5.5 L’associaci´o de titulats
- 5.6 La xarxa de concessionaris
- 5.7 El museu de pintura
- 5.8 Prov´ıncies
- 5.9 L’hospital de Manresa
- 5.10 Departaments
- 5.11 Polinomis
- 5.12 El traductor autom`atic
- 6 Projectes
Introducci´o
Exercicis
- Penseu en totes les activitats que v
areu fer ahir. En quines d’elles sou conscients d’haver usat un sistema informatic? Quines eren les seves entrades? Quines eren les seves sortides? Quins errors es podien produir? - Expliqueu a un turista perdut com anar de la Pla¸ca Major a l’Aeroport del Prat tot utilitzant transports p´ublics en una dia de vaga de taxis.
- Expliqueu com multiplicar dos nombres a un nen que sap sumar i coneix les taules de multiplicar.
- Qu`e ´es un algorisme?
- Digueu quin ´es el contrari de les afirmacions seg¨uents:
- a ´es m´es petit que b.
- Plou i fa sol.
- No plou i no fa sol.
- Dues rectes tenen un punt en com´u.
- Tots els camins porten a Roma.
- Tots els `anecs s´on blancs i volen.
- P i Q.
- P o Q.
- P o Q per`o no les dues.
- Feu les taules de veritat de no (a i b) i de no a o no b. Quina ´es la vostra conclusi´o? Feu el mateix per no (a o b) i per no a i no b.
- Feu les taules de veritat de no (a i b i c) i de no a o no b o no c. Quina ´es la vostra conclusi´o? Feu el mateix per no (a o b o c) i per no a i no b i no c.
- Epim
enides de Creta va afirmar: “Tots els cretencs s´on uns mentiders”. Que en penseu?
Introducci´o 5
- (j-k) / x
- (j-k) / int(x)
- (i * j - z >= x * y * y) == (not p and q)
- |x - y| + z
- √ x > 0
- x^2 − y^2
- not (p and q and r and c>=’A’)
- (p + r) + i
- i <= j <= k
- p == q == r
- 3 * i - (j*z) * x
- a >= b and b > c
- (3x) / (3.1416y))
- x + y + z i
- Expliqueu com es comporten els operadors de divisi´o entera i m`odul (/ i %) amb operands negatius. Calculeu 7 / 4, -7 / 3, 7 / -3, -7 / -3, 7 % 3, -7 % 3, 7 % -3, i -7 % -3.
- Donades aquestes inicialitzacions:
int z = 0; int u = 1; double x = 3.5; bool t = true;
avalueu les expressions seg¨uents i digueu quines poden produir problemes:
- not (z <= 1 and x >= 0 and t)
- z == 0 and x <= 0 or u == 1 and x >= 0
- u/z > -
- z != 0 and u/z > -
- u/z > -2 and z != 0
- z == 0 or u/z > -
- u/z > -2 or z == 0
- z == 0 or 24%z != 1
- z == 0 and 24%z != 1
- x == 3.
- Digueu quina ´es la sortida de cadascun dels programes seg¨uents sense executar-los:
// Programa 1 int main () { int a = 21, b = 666; cout << a + b << endl; }
// Programa 2 int main () { int a = 24, b = 32; cout << a << " + " << b << " = " << a + b << endl; }
6 Introducci´o a la Programaci´o — Problemes Resolts
// Programa 3 int main () { int a = 12, b = 8; if (a >= b) cout << a << endl; else cout << b << endl; }
// Programa 4 int main () { int n = 10; for (int i = 1; i <= n; ++i) { cout << i << endl; } }
// Programa 5 int main () { int n = 10; for (int i = 0; i < n; ++i) { cout << i << endl; } }
// Programa 6 int main () { int n = 10, i; for (i = 0; i < n; ++i) { cout << i << endl; } cout << i << endl; }
// Programa 7 int main () { int n = 5; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { cout << i << ’,’ << j << endl; } } }
// Programa 8 int main () { int n = 5; for (int i = 0; i < n; ++i) { for (int j = 0; j < i; ++j) cout << i << ’,’ << j << endl; } }
8 Introducci´o a la Programaci´o — Problemes Resolts
- Escriviu expressions que, donat un real r, calculin.
- la part entera per defecte de r,
- la part entera per exc´es de r,
- el valor enter m´es proper a r.
- Escriviu expressions booleanes que, donat un car`acter c, indiquin.
- si c ´es una lletra min´uscula,
- si c ´es una lletra maj´uscula,
- si c ´es un d´ıgit,
- si c no ´es ni min´uscula ni maj´uscula ni d´ıgit,
- si c ´es una vocal,
- si c ´es una consonant,
- si c ´es un s´ımbol de puntuaci´o.
- Escriviu una expressi´o entera que es correspongui al valor d’un d´ıgit donat (car
acters de ‘ 0 ’ a ‘ 9 ’). Per exemple, per al caracter ‘ 3 ’, cal donar l’enter 3. - Escriviu una expressi´o que converteixi un enter entre 0 i 9 al seu d´ıgit corresponent. Per exemple, per a l’enter 3, cal donar el car`acter ‘ 3 ’.
- Dissenyeu un algorisme que, donats dos intervals reals [a 1 , b 1 ] i [a 2 , b 2 ] digui si el primer es troba dins del segon.
- Dissenyeu un algorisme que, donats dos intervals reals [a 1 , b 1 ] i [a 2 , b 2 ] calculi l’in- terval corresponent a la seva intersecci´o o indiqui que ´es buida.
- Dissenyeu un algorisme que, donades dues hores del rellotge h 1 :m 1 :s 1 i h 2 :m 2 :s 2 , indiqui si una altra hora h:m:s es troba entre la primera i la segona.
- Un any de trasp
as ´es un any civil que consta de 366 dies civils. S´on anys de traspas tots els m´ultiples de 4 que no ho s´on de 100, o que s´on de 100 pero tamb´e de 400. Escriviu una expressi´o que indiqui si una variable entera any ´es de traspas o no. - Dissenyeu un algorisme que llegeixi dos enters i n’escrigui el m`axim.
- Dissenyeu un algorisme que llegeixi dos enters i els escrigui ordenats.
- Dissenyeu un algorisme que llegeixi tres enters i els escrigui ordenats.
- Dissenyeu un algorisme que llegeixi quatre enters i els escrigui ordenats.
- Dissenyeu un algorisme que llegeixi un enter que representa una data en format ddmmaaaa i escrigui el dia, el mes i l’any corresponent.
- Dissenyeu un algorisme que llegeixi un enter que representa una hora del rellotge en format hhmmss i escrigui l’hora, els minuts i els segons corresponents.
- Dissenyeu un algorisme que llegeixi dues dates (dia, mes i any de cadascuna) i digui si la primera ´es anterior en el temps a la segona.
- Dissenyeu un algorisme que digui si un enter positiu ´es primer o no.
- Dissenyeu un algorisme que escrigui el producte de factors primers d’un n´umero natural.
Introducci´o 9
- Dissenyeu un algorisme que escrigui les taules de multiplicar del 0 al 9.
- Dissenyeu un algorisme que intercanvi¨ı el valor de dues variables tot usant una variable auxiliar.
- Dissenyeu un algorisme que intercanvi¨ı el valor de dues variables enteres sense usar cap variable auxiliar.
- Qu`e penseu de l’algorisme seg¨uent?
int x = ..., i = 10; while (i > 0) { if (x == x) i = i + 1; else i = i - 1; }
- Qu`e penseu de l’algorisme seg¨uent?
int i = ...; while (i != 0) i = i - 2;
- Simplifiqueu l’algorisme seg¨uent:
int x = ..., y = ...; bool iguals; if (x == y) iguals = true; else iguals = false;
- Un mag diu: “Pensa’t un n´umero. Multiplica’l per dos. Suma-li 34. Divideix-lo per dos. Treu-li el n´umero que havies pensat. Te’n queden 17!” Qu`e en penseu?
1.1 La congru`encia de Zeller per a calendaris
La congruencia de Zeller ´es un calcul que permet obtenir el dia de la setmana per a una data qualsevol del calendari gregori`a. Donada una data determinada pel triplet 〈d, m, a〉, on d ´es el dia del mes, m ´es el mes de l’any i a ´es l’any,
- Se li resten dues unitats al mes m i si d´ona zero o menys se li suma 12 al mes i se li resta una unitat a l’any. El nou mes obtingut l’anomenem m′^ i el nou any a′.
- Es calcula la cent´uria c (els dos primers d´ıgits de l’any) a partir de l’any a′.
- Es calcula l’any dins la cent´uria y (els dos darrers d´ıgits de l’any) a partir de l’any a′.
- Es calcula f = b 2. 6 m′^ − 0. 2 c + d + y + by/ 4 c + bc/ 4 c − 2 c, on bxc ´es la part entera per defecte de x.
- f m
odul 7 representa el dia de la setmana segons la correspondencia seg¨uent: 0 = diumenge, 1 = dilluns, ...