Академический Документы
Профессиональный Документы
Культура Документы
deAlgoritmosI
Prctica 1: Introduccin a la programacin
genricaconC++
LuisFernandoMartnezZarza
Convocatoria(20102011,Junio)
luis.martinezzarza@alum.uca.es
Telefono:687920352
Grupo:ITISA
Ejercicios(parteI)
1.Considerelasiguientefuncin:
voidmuestra_temperatura(inttemperatura)
{
cout<<"Temperatura:"<<temperatura<<"grados";
if(temperatura>20)
if(temperatura<30)
cout<<"(normal)";
else
cout<<"(baja)";
cout<<endl;
}
a)Culeselresultadodelassiguientesllamadas?
muestra_temperatura(10);
muestra_temperatura(27);
muestra_temperatura(40);
*Elresultadoobtenidoeselsiguiente:
Temperatura:10grados
Temperatura:27grados(normal)
Temperatura:40grados(baja)
b)Creequecoincideconlasexpectativasdelprogramador?Aqusedebe?
*Nocoincideconlasexpectativasdelprogramador.Estosedebeaquela
estructuradelalgoritmonoeslacorrecta:
Enlassentenciasifyelseesdondeseencuentraelproblema,yaquela
sentenciaelsepertenecealprimerif.Cuandolavariabletieneunvalor
menorque20deberadevolverquequelatemperaturaesbajaperonolo
hace.
Estosepuedearreglarutilizandollavesparadefinirquvadentrode
nuestrasentenciaif.
*Elcdigoquedaradelasiguienteforma:
voidmuestra_temperatura(inttemperatura)
{
cout<<"Temperatura:"<<temperatura<<"grados";
if(temperatura>20)
{if(temperatura<30)
cout<<"(normal)";}
else
cout<<"(baja)";
cout<<endl;
}
2. Considerelasiguientefuncin:
voidmuestra_temperatura(inttemperatura)
{
cout<<"Temperatura:"<<temperatura<<"grados";
if(20<temperatura<30)
cout<<"(normal)";
else
cout<<"(anormal)";
cout<<endl;
}
Expliqueelresultadodelassiguientesllamadasalafuncin:
muestra_temperatura(10);
muestra_temperatura(27);
muestra_temperatura(40);
*Cuandohacemoslasllamadasalafuncinobtenemoslasiguientesalida:
Temperatura:10grados(normal)
Temperatura:27grados(normal)
Temperatura:40grados(normal)
*Podemosobservarquelasalidanoeslaesperada.Estudiandoelcdigo
detenidamente,podemosdarnoscuentaqueelfalloestaenlosoperadoreslgicos:
Elfalloreside,encuandounaoperacindetipo<o>seevaladacomosalidael
valor1cuandoescorrecto.Porlocualcuandoseestarealizandoestalinea:20<
temperatura<30,obtendramosesto:
20<10NOentonces,0<30SI,porlocualtomamosNORMAL.
DebidoaestonuncatomaremoscomosalidaelvalorAnormal,yaquesiempreel
valorparahacerlasegundacomparacinlgicavaasero1o0.
Paraarreglarlosolovaldrahacerlamismacomparacinendostandas,esdecir,o
hacerdosbuclesif(locualsedesaconseja),outilizareloperadorlgicoAND(&&)
paraqueevalulasdoscomparacionessinperderelvalordelavariable.
Elcdigoseriaas:
voidmuestra_temperatura(inttemperatura)
{
cout<<"Temperatura:"<<temperatura<<"grados";
if(temperatura>20&&temperatura<30)
cout<<"(normal)";
else
cout<<"(anormal)";
cout<<endl;
}
3.Quproblemahayconelsiguienteprograma?
#include<iostream>
intmain()
{
usingnamespacestd;
cout<<SOS()<<endl;
}
constcharSOS(){return"...___...";}
Comente,almenos,dosposiblessoluciones.
*Laconsolanosdevuelveunerror,dicindonosquequeSOS,noestadeclarada.
ParasolucionarlopodemosdeclararnuestrafuncinSOSantesdelmain,osinola
otrasolucinseriadefinirunprototipodelamismaantesdelmain.
SOLUCION1
#include<iostream>
constchar*SOS();
intmain()
{
usingnamespacestd;
cout<<SOS()<<endl;
}
constchar*SOS(){return"...___...";}
SOLUCION2
#include<iostream>
constchar*SOS(){return"...___...";}
intmain()
{
usingnamespacestd;
cout<<SOS()<<endl;
}
4.Elsiguienteprogramasecomponedeunacabeceraydosmdulos:
a)Cabecera:
#include<iostream>
usingnamespacestd;
intVisitas;
voidvisita(constchararg);
b)Mduloauxiliar,queincluyelacabecera:
#include"visita.h"
voidvisita(constchararg)
{
cout<<"Visita:"<<arg<<endl;
++Visitas;
}
c) Mduloprincipal,queincluyelacabecera:
#include"visita.h"
intmain(intargc,charargv[])
{
Visitas=0;
while(++argv)
visita(argv);
cout<<"Visitas:"<<Visitas<<endl;
}
Vealgnproblema?Siesas,expliquecmosolucionarloconelmnimoesfuerzo.
Realiceunacrticarazonadadeesteestilodeprogramacin.
*Siencontramosunproblema,yaquelaconsolanosdevuelveunasclasesde
erroresloscualesnosaclaranquehayunadefinicinmltipledeVisitas.Estoes
debidoaqueenlacabeceradelafuncinestadeclaradalavariableVisitas,porlo
cualencadamoduloqueseusevisita.hsedeclararadenuevadichavariable.
Parasolucionarlodebemosaclararquedichavariableesdecarcterexterno,es
decirque
sevaausarenmasmdulosdenuestrocdigo.Paraellosolo
tendremosqueponerexternintVisitas;enelmodulovisitas.h.
*Desdemipuntodevistaestetipodeprogramacinnoescorrectayaqueusa
variablesquesondembitoglobal.Debidoaestopuedenocurrirefectos
colateralesquecambienelvalordelamisma.
5.Hayalgnproblemaconelsiguienteprograma?Silohay,expliquecul.Sino,
expliquequsalidaproduce.
#include<iostream>
intmain()
{
usingnamespacestd;
intv[10]={1,2,3,};
for(inti=0;i<10;++i)
cout<<v[i]<<;
cout<<endl;
}
*Trashaberescritoelprogramaycompilarlo,nosdaunfallo.Viendopasoapaso
cadalinea,podemosobservarqueelproblemaestaenlascomillassimplesdela
linea:cout<<v[i]<<'';
Paracorregirloyquenonosdeunfallo,debemossustituirlalineaanteriorpor:
cout<<v[i]<<"";
Lasalidaquenosdevuelvees1230000000.
6.Escribaunafuncinqueseexpandaenlneayrotealaizquierdalosvaloresde
sustresparmetrosenterossinutilizarpunteros.
inlinevoidrotar_izq(int&a,int&b,int&c){
intaux;
aux=c;
c=a;
a=b;
b=aux;
}
7.Quproblemahayconelsiguienteprograma?
#include<iostream>
intmain()
{
cout<<"Hola."<<endl;
}
Explique,almenos,tresformasdistintasderesolverlo.
*Pararecibirunasalidadedichafuncin,debemosdefiniranteslabiblioteca
estndar,lacualseencuentraenunespaciodenombresdiferente.Estoesdebido
aqueconelloseevitaunaduplicacindelasfuncionesyaexistentesconlasque
vamosacrearnosotros.
Unasolucinseriaaadiralcomienzodelalgoritmolasiguientelinea:using
namespacestd;Conelloestamosdiciendoquevamosausarelespaciode
nombresstd.
#include<iostream>
usingnamespacestd;
intmain()
{
cout<<"Hola."<<endl;
}
Otrasolucinseria,queenvezdeusarelespaciodenombrecompleto,nadamas
cargarquefuncionesvamosausardedichoespacio:usingstd::cout;using
std::endl;
#include<iostream>
usingstd::cout;
usingstd::endl;
intmain()
{
cout<<"Hola."<<endl;
}
Unaultimasolucinseria,indicardirectamenteenelmainadondepertenece:
std::cout<<"Hola."<<std::endl;
#include<iostream>
intmain()
{
std::cout<<"Hola."<<std::endl;
}
8.Parametricelafuncindelejercicio6demaneraqueseacapazdehacerlopropio
convaloresdeuntipoarbitrario.Defnalaenunespaciodenombresllamado
Algoritmo.
*namespaceAlgoritmo{
template<typenameT>
inlinevoidizq(T&a,T&b,T&c)
Taux;
aux=c;
c=a;
a=b;
b=aux;
}}