Вы находитесь на странице: 1из 8

Anlisis y Diseo

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;
}}