Está en la página 1de 170

AlgoritmoyEstructuradeDatosI

UNIVERSIDADTECNOLGICADELPER
VicerrectoradodeInvestigacin

AlgoritmoyEstructuradeDatosI

TINSBsicos
IngenieradeTelecomunicaciones

TEXTOSDEINSTRUCCINBSICOS(TINS)/UTP

LimaPer

AlgoritmoyEstructuradeDatosI

AlgoritmoyEstructuradeDatosI
DesarrolloyEdicin:VicerrectoradodeInvestigacin
ElaboracindelTINS:Ing.CarlosLonKanPrado
DiseoyDiagramacin:JuliaSaldaaBalandra
Soporteacadmico:InstitutodeInvestigacin
Produccin:ImprentaGrupoIDAT

Queda prohibida cualquier forma de reproduccin, venta, comunicacin pblica y


transformacindeestaobra.

AlgoritmoyEstructuradeDatosI

El presente material contiene una compilacin de obras de Algoritmo I


publicadas lcitamente, resmenes de los temas a cargo del profesor;
constituye un material auxiliar de enseanza para ser empleado en el
desarrollodelasclasesennuestrainstitucin.

stematerialesdeusoexclusivodelosalumnosydocentesdelaUniversidad
Tecnolgica del Per, preparado para fines didcticos en aplicacin del
Artculo41inc.CyelArt.43inc.A.,delDecretoLegislativo822,Leysobre
DerechosdeAutor.

AlgoritmoyEstructuradeDatosI

AlgoritmoyEstructuradeDatosI

Presentacin

ElpresentetextoelaboradoenelmarcodedesarrollodelaIngeniera,esunmaterialde
ayudainstruccional,enlaCarreradeIngenieradeTelecomunicaciones,paralaAsignatura
deAlgoritmosyEstructuradeDatosI.

Plasma la iniciativa institucional de innovacin de la enseanzaaprendizaje educativo


universitario, que en acelerada continuidad promueve la produccin de materiales
educativos,actualizadosenconcordanciaalasexigenciasdeestostiempos.

Estaprimeraedicinapropiadamenterecopilada,dediversasfuentesbibliogrficas,deuso
frecuente en la enseanza de algoritmos, est ordenada en funcin del sillabus de la
Asignatura,arribamencionada.

Laconformacindeltextohasidoposiblegraciasalesfuerzoydedicacinacadmicadel
Profesor Ing.Carlos Lo Kan Prado, como fruto de su destacada experiencia profesional y
acadmica;contieneVIIcaptulos,cuyasdescripcionesgenricassoncomosigue:

EnelCaptuloIestreferidoalosconceptosfundamentalesdelosalgoritmos.

EnelCaptuloIIseexplicalosdiferentestiposdedatosqueseutilizanenlaprogramacin.

EnelCaptuloIIIseabordalaherramientainformticaqueseutilizaraparaeldesarrollode
lasaplicacionesenelcomputador.

EnelCaptuloIVseexplicalasdiversasestructurasdecontrolquesepresentan.

ElCaptuloVsecentraenlasolucindetemasdeprogramacinmodular.

EnelCaptuloVIseestudialostemasderecursividad.

YenelCaptuloVIIsepresentalasdiversasaplicacionesenlenguajeC.

Finalmente,alcierredeestaslneas,elagradecimientoinstitucionalalprofesorIng.Carlos
LoKanPradoporsucontribucinalaelaboracindelpresentetexto.

Ing.LucioH.HuamnUreta
VicerrectoradodeInvestigacin

AlgoritmoyEstructuradeDatosI

AlgoritmoyEstructuradeDatosI

ndice

CaptuloI
ConceptosFundamentales

1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
1.10
1.11
1.12
1.13

Introduccin ...........................................................................................................
Definicindelenguaje ............................................................................................
Definicindealgoritmo ..........................................................................................
Tiposdealgoritmos ................................................................................................
Lenguajesalgortmicos ...........................................................................................
Metodologaparalasolucindeproblemaspormediodecomputadora ............
Definicindelproblema .........................................................................................
Anlisisdelproblema .............................................................................................
Diseodelalgoritmo ..............................................................................................
Codificacin ............................................................................................................
Pruebaydepuracin...............................................................................................
Documentacin ......................................................................................................
Mantenimiento.......................................................................................................

11
13
14
14
14
31
31
31
32
32
32
32
33

CaptuloII
TiposdeDatos

2.1
2.2
2.3
2.4

Tiposdedatos.........................................................................................................
Expresiones.............................................................................................................
Operadoresyoperandos........................................................................................
Identificadores........................................................................................................

35
35
36
40

CaptuloIII
LenguajedeProgramacinC

3.1
3.2
3.3
3.4

Introduccin ...........................................................................................................
Caractersticas ........................................................................................................
Procesodeedicinycompilacin ..........................................................................
Estructuradeunprograma ....................................................................................

43
43
43
44

AlgoritmoyEstructuradeDatosI

CaptuloIV
EstructurasdeControl

4.1
4.2
4.3

Tiposdeestructurasbsica ....................................................................................
Estructurasecuencial .............................................................................................
Problemassecuenciales..........................................................................................

59
59
60

CaptuloV
ProgramacinModular

5.1
5.2

6.1
6.2
6.3

Eldiseodescendente:subprogramas ..................................................................
Eldiseomodular...................................................................................................

CaptuloVI
Recursividad

89
90

Recursividad ........................................................................................................... 99
Prototiposdefunciones ......................................................................................... 107
Arreglosunidimensionalesymultidimensionales.................................................. 108
CaptuloVII
Aplicaciones

Ejercicios............................................................................................................................ 115

Bibliografa ........................................................................................................................ 169

AlgoritmoyEstructuradeDatosI

DistribucinTemtica

Clase
N
1

ConceptosFundamentales
Conceptodealgoritmo.
Lenguajesdeprogramacin.
Herramientasdeprogramacin.
Tiposdedatos.
Constantes, variables, identificadores, expresiones,
funciones.
EstructuraGeneraldeunPrograma
EstructuradeunProgramaenC.
Estructuradealgoritmos.
Contadores,acumuladores.
EstructurasdeControl
ProgramacinEstructurada.
EstructurasdeControlTipos
Secuencial
Selectivasimple(SI).
Selectivadoble(SISINO).
Selectivamltiple(SISINOSI).

Semana

Horas

Selectivadecontrol(SEGNSEA).

Iterativa(REPETIRDESDE).

EstructuraIterativa(REPETIRMIENTRAS).

Ejerciciospropuestosynivelacin

10

11

12

13

10
11

12
13

Tema

EXAMENPARCIAL
Subprogramacin
ProgramacinModular.
SubprogramasTipos
Variablesglobalesylocales.
Funciones,pasodeparmetros.
Procedimientospasodeparmetros
Recursividad
Datosestructurados

AlgoritmoyEstructuradeDatosI

14

Tipos.
Arreglosunidimensionales,declaracinyacceso.

Clase
N
15
16
17

Tema
Arreglosbidimensionales,declaracinyacceso.
Registros
Concepto.
Declaracinyacceso.
Arregloderegistros.
Cadenadecaracteres.

14

Semana

Horas

15

16

17

18

ndices

18

19

Ejerciciospropuestosynivelacin.

19

20

EXAMENFINAL

20

10

AlgoritmoyEstructuradeDatosI

CAPTULOI

ConceptosFundamentales

1.1 Introduccin
Lacomputadoranosolamenteesunamquinaquepuederealizarprocesosparadarnos
resultados,sinquetengamoslanocinexactadelasoperacionesquerealizaparallegara
esos resultados. Con la computadora adems de lo anterior tambin podemos disear
solucionesalamedida,deproblemasespecficosquesenospresenten.Msaun,siestos
involucranoperacionesmatemticascomplejasy/orepetitivas,orequierendelmanejode
unvolumenmuygrandededatos.

El diseo de soluciones a la medida de nuestros problemas, requiere como en otras


disciplinasunametodologaquenosenseedemaneragradual,laformadellegaraestas
soluciones.

A las soluciones creadas por computadora se les conoce como programas y no son ms
queunaseriedeoperacionesquerealizalacomputadoraparallegaraunresultado,con
ungrupodedatosespecficos.Loanteriornosllevaalrazonamientodequeunprograma
nossirveparasolucionarunproblemaespecfico.

Parapoderrealizarprogramas,adems deconocerlametodologamencionada,tambin
debemos de conocer, de manera especfica las funciones que pueden realizarse en la
computadoraylasformasenquesepuedenmanejarloselementosquehayenlamisma.

Computadora:Esundispositivoelectrnicoutilizadoparaprocesarinformacinyobtener
resultados. Los datos y la informacin se pueden introducir en la computadora como
entrada(input)yacontinuacinseprocesanparaproducirunasalida(output).

Procesodeinformacinenlacomputadora(Fig.1)

Datos de
Entrada

Proceso

Datos de
salida

Figura1.Proceso

Programa: Es el conjunto de instrucciones escritas de algn lenguaje de programacin y


queejecutadassecuencialmenteresuelvenunproblemaespecifico.

11

AlgoritmoyEstructuradeDatosI

Organizacinfsicadeunacomputadora

CPU
Dispositivos de
Entrada

Unida de
Control

Unidad
Arit.-Log.

Dispositivos de
Salida

Memoria
Figura2.OrganizacindelComputador

Dispositivos de Entrada: Como su nombre lo indica, sirven para introducir datos


(informacin)enlacomputadoraparasuproceso.Losdatosseleendelosdispositivosde
entrada y se almacenan en la memoria central o interna. Ejemplos: teclado, scanners
(digitalizadoresderastreo),mouse(ratn),trackball(boladeratnestacionario),joystick
(palancasdejuego),lpizptico.

Dispositivos de Salida: Regresan los datos procesados que sirven de informacin al


usuario.Ejemplo:monitor,impresora.

LaUnidadCentraldeProcesamiento(C.P.U)sedivideendos:
9 Unidaddecontrol
9 UnidadAritmticoLgica

Unidad de Control: Coordina las actividades de la computadora y determina que


operaciones se deben realizar y en qu orden; as mismo controla todo el proceso de la
computadora.

Unidad Aritmtica Lgica: Realiza operaciones aritmticas y lgicas, tales como suma,
resta,multiplicacin,divisinycomparaciones.

LaMemoriadelacomputadorasedivideendos:
9 MemoriaCentraloInterna
9 MemoriaAuxiliaroExterna

Memoria Central (interna): La CPU utiliza la memoria de la computadora para guardar


informacinmientrastrabajaconella;mientrasestainformacinpermanezcaenmemoria,
la computadora puede tener acceso a ella en forma directa. Esta memoria construida
internamentesellamamemoriadeaccesoaleatorio(RAM).

Lamemoriainternaconstadedosreasdememoria:

La memoria RAM (Randon Access Memory): Recibe el nombre de memoria principal o


memoriadelusuario,enellasealmacenainformacinsolomientraslacomputadoraesta

12

AlgoritmoyEstructuradeDatosI

encendida. Cuando se apaga o arranca nuevamente la computadora, la informacin se


pierde,porloquesedicequelamemoriaRAMesunamemoriavoltil.

LamemoriaROM(ReadOnlyMemory):Esunamemoriaestticaquenopuedecambiar,la
computadorapuedeleerlosdatosalmacenadosenlamemoriaROM,peronosepueden
introducirdatosenella,ocambiarlosdatosqueahseencuentran;porloquesediceque
estamemoriaesdesololectura.LosdatosdelamemoriaROMestngrabadosenforma
permanenteysonintroducidosporelfabricantedelacomputadora.

Memoria Auxiliar (Externa): Es donde se almacenan todos los programas o datos que el
usuario desee. Los dispositivos de almacenamiento o memorias auxiliares (externas o
secundarias)mscomnmenteutilizadosson:cintasmagnticasydiscosmagnticos.

1.2 DefinicindeLenguaje
Lenguaje:Esunaseriedesmbolosquesirvenparatransmitirunoomsmensajes(ideas)
entre dos entidades diferentes. A la transmisin de mensajes se le conoce comnmente
comocomunicacin.

La comunicacin es un proceso complejo que requiere una serie de reglas simples, pero
indispensablesparapodersellevaracabo.Lasdosprincipalessonlassiguientes:

Losmensajesdebencorrerenunsentidoalavez.
Debe forzosamente existir 4 elementos: Emisor, Receptor, Medio de Comunicacin y
Mensaje.

LenguajesdeProgramacin
Esunconjuntodesmbolos,caracteresyreglas(programas)quepermitenalaspersonas
comunicarseconlacomputadora.

Los lenguajes de programacin tienen un conjunto de instrucciones que nos permiten


realizar operaciones de entrada/salida, calculo, manipulacin de textos,
lgica/comparacinyalmacenamiento/recuperacin.

Loslenguajesdeprogramacinseclasificanen:
LenguajeMaquina:Sonaquelloscuyasinstruccionessondirectamenteentendiblesporla
computadora y no necesitan traduccin posterior para que la CPU pueda comprender y
ejecutarelprograma.Lasinstruccionesenlenguajemaquinaseexpresanentrminosdela
unidaddememoriamaspequeaelbit(dgitobinario0o1).

Lenguaje de Bajo Nivel (Ensamblador): En este lenguaje las instrucciones se escriben en


cdigos alfabticos conocidos como mnemotcnicos para las operaciones y direcciones
simblicas.

13

AlgoritmoyEstructuradeDatosI

LenguajedeAltoNivel:Loslenguajesdeprogramacindealtonivel(BASIC,pascal,cobol,
frotran,etc.)sonaquellosenlosquelasinstruccionesosentenciasalacomputadorason
escritas con palabras similares a los lenguajes humanos (en general en ingles), lo que
facilitalaescrituraycomprensindelprograma.

1.3 DefinicindeAlgoritmo
Un algoritmo es una serie de pasos organizados que describe el proceso que se debe
seguir,paradarsolucinaunproblemaespecfico.

Un algoritmo es una secuencia finita de instrucciones cada una de las cuales tiene un
significadoclaroypuedeserefectuadaconunacantidadfinitadeesfuerzoenunalongitud
detiempotambinfinito.

En matemticas, ciencias de la computacin y disciplinas relacionadas, un algoritmo (del


latn,dixitalgorithmusysteasuvezdelmatemticopersaalJwarizmi)esunalistabien
definida,ordenadayfinitadeoperacionesquepermitehallarlasolucinaunproblema.
Dadounestadoinicialyunaentrada,atravsdepasossucesivosybiendefinidossellegaa
un estado final, obteniendo una solucin. Los algoritmos son objeto de estudio de la
algoritmia.

Enlavidacotidianaseempleanalgoritmosenmultituddeocasionespararesolverdiversos
problemas.Algunosejemplosseencuentranenlosinstructivos(manualesdeusuario),los
cuales muestran algoritmos para usar el aparato en cuestin o inclusive en las
instruccionesquerecibeuntrabajadorporpartedesupatrn.Tambinexistenejemplos
de ndole matemtica, como el algoritmo de la divisin para calcular el cociente de dos
nmeros,elalgoritmodeEuclidesparacalcularelmximocomndivisordedosenteros
positivos,oelmtododeGausspararesolverunSistemalinealdeecuaciones.

1.4 TiposdeAlgoritmos

9 Cualitativos:Sonaquellosenlosquesedescribenlospasosutilizandopalabras.
9 Cuantitativos:Sonaquellosenlosqueseutilizanclculosnumricosparadefinir
lospasosdelproceso.

1.5 LenguajesAlgortmicos
Es una serie de smbolos y reglas que se utilizan para describir de manera explcita un
proceso.

TiposdeLenguajesAlgortmicos
Grficos: Es la representacin grfica de las operaciones que realiza un algoritmo
(diagramadeflujo).

14

AlgoritmoyEstructuradeDatosI

No Grficos: Representa en forma descriptiva las operaciones que debe realizar un


algoritmo(pseudocodigo).

Mediosdeexpresindeunalgoritmo
Losalgoritmospuedenserexpresadosdemuchasmaneras,incluyendoallenguajenatural,
pseudocdigo, diagramas de flujo y lenguajes de programacin entre otros. Las
descripcionesenlenguajenaturaltiendenaserambiguasyextensas.Elusarpseudocdigo
ydiagramasdeflujoevitamuchasambigedadesdellenguajenatural.Dichasexpresiones
son formas ms estructuradas para representar algoritmos; no obstante, se mantienen
independientesdeunlenguajedeprogramacinespecfico.

Ladescripcindeunalgoritmousualmentesehaceentresniveles:
Descripcindealtonivel.Seestableceelproblema,seseleccionaunmodelomatemticoy
se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo
detalles.

Descripcin formal. Se usa pseudocdigo para describir la secuencia de pasos que


encuentranlasolucin.

Implementacin. Se muestra el algoritmo expresado en un lenguaje de programacin


especficooalgnobjetocapazdellevaracaboinstrucciones.

Tambin es posible incluir un teorema que demuestre que el algoritmo es correcto, un


anlisisdecomplejidadoambos.

Diagramadeflujo

Definicin
Es la representacin grfica de flujo de un
algoritmoodesecuenciarutinaria.Sebasanenla
utilizacin de diversos smbolos para representar
operacionesespecficas.Selesllamadiagramasde
flujo porque los smbolos utilizados se conectan
por mediodeflechaspara indicar la secuenciade
laoperacin.

Undiagramadeflujoesunaformaderepresentar
grficamente los detalles algortmicos de un
procesomultifactorial.Seutilizaprincipalmenteen
programacin, economa y procesos industriales,
pasando tambin a partir de estas disciplinas a
formar parte fundamental de otras, como la
Figura3.Diagramadeflujo
psicologa cognitiva. Estos diagramas utilizan una

15

AlgoritmoyEstructuradeDatosI

seriedesmbolosconsignificadosespeciales
y son la representacin grfica de los pasos
deunproceso.Encomputacin,sonmodelos
tecnolgicos utilizados para comprender los
rudimentosdelaprogramacinlineal.

Smbolosutilizados
Los smbolos que se utilizan para diseo se
someten a una normalizacin, es decir, se
hicieronsmboloscasiuniversales,yaque,en
un principio cada usuario podra tener sus
propios smbolos para representar sus
procesosenformadeDiagramadeflujo.Esto
trajocomoconsecuenciaquesloaquelque
conoca sus smbolos, los poda interpretar.
Lasimbologautilizadaparalaelaboracinde
diagramas de flujo es variable y debe
ajustarse a las normas preestablecidas
universalmente para dichos smbolos o
datos.

Losdiagramasdeflujosirvenpara
representaralgoritmosdemaneragrfica.

Figura4.Diagramadeflujo
Caractersticas que debe cumplir un
diagramadeflujo
Enlosdiagramasdeflujosepresuponenlossiguientesaspectos:

9 Existe siempre un camino que permite llegar a una solucin (finalizacin del
algoritmo).
9 Existeunnicoiniciodelproceso.
9 Existeunnicopuntodefinparaelprocesodeflujo(salvodelromboqueindica
unacomparacincondoscaminosposibles).

16

AlgoritmoyEstructuradeDatosI

DesarrollodelDiagramadeFlujo
Lassiguientessonaccionespreviasalarealizacindeldiagramadeflujo:
9 Identificarlasideasprincipalesaserincluidaseneldiagramadeflujo.Debenestar
presentes el dueo o responsable del proceso, los dueos o responsables del
proceso anterior y posterior y de otros procesos interrelacionados, otras partes
interesadas.
9 Definirquseesperaobtenerdeldiagramadeflujo.
9 Identificarquinloemplearycmo.
9 Establecerelniveldedetallerequerido.
9 Determinarloslmitesdelprocesoadescribir.Lospasosaseguirparaconstruirel
diagramadeflujoson:
9 Establecer el alcance del proceso a describir. De esta manera quedar fijado el
comienzo y el final del diagrama. Frecuentemente el comienzo es la salida del
procesoprevioyelfinallaentradaalprocesosiguiente.
9 Identificarylistarlasprincipalesactividades/subprocesosqueestnincluidosenel
procesoadescribirysuordencronolgico.
9 Sielniveldedetalledefinidoincluyeactividadesmenores,listarlastambin.
9 Identificarylistarlospuntosdedecisin.
9 Construir el diagrama respetando la secuencia cronolgica y asignando los
correspondientessmbolos.
9 Asignar un ttulo al diagrama y verificar que est completo y describa con
exactitudelprocesoelegido.

Recomendaciones
A su vez, es importante que al construir diagramas de flujo, se observen las siguientes
recomendaciones:

9 Evitarsumiderosinfinitos,burbujasquetienenentradasperonosalidas.
9 Evitar las burbujas de generacin espontnea, que tienen salidas sin tener
entradas,porquesonsumamentesospechosasygeneralmenteincorrectas.
9 Tenercuidadoconlosflujosyprocesosnoetiquetados.Estosueleserunindicio
de falta de esmero, pero puede esconder un error an ms grave: a veces el
analista no etiqueta un flujo o un proceso porque simplemente no se le ocurre
algnnombrerazonable.

17

AlgoritmoyEstructuradeDatosI

Ventajasdelosdiagramadeflujo
Favorecenlacomprensindelprocesoatravsde
mostrarlo como un dibujo. El cerebro humano
reconoce fcilmente los dibujos. Un buen
diagrama de flujo reemplaza varias pginas de
texto.

Permiten identificar los problemas y las


oportunidades de mejora del proceso. Se
identificanlospasosredundantes,losflujosdelos
reprocesos, los conflictos de autoridad, las
responsabilidades, los cuellos de botella, y los
puntosdedecisin.
Muestran las interfaces clienteproveedor y las
transaccionesqueenellas se realizan, facilitando
alosempleadoselanlisisdelasmismas.

Son una excelente herramienta para capacitar a


los nuevos empleados y tambin a los que
desarrollan la tarea, cuando se realizan mejoras
enelproceso.

Tiposdediagramasdeflujos
Figura5.Diagramadeflujo
Formato vertical: En l el flujo o la secuencia de
lasoperaciones,vadearribahaciaabajo.Esunalistaordenadadelasoperacionesdeun
procesocontodalainformacinqueseconsiderenecesaria,segnsupropsito.

Formato horizontal: En l, el flujo o la secuencia de las operaciones, va de izquierda a


derecha.

Formato panormico: El proceso entero est representado en una sola carta y puede
apreciarsedeuna solamiradamuchomsrpido queleyendo eltexto,loque facilitasu
comprensin,aunparapersonasnofamiliarizadas.Registranosoloenlneavertical,sino
tambinhorizontal,distintasaccionessimultneasylaparticipacindemsdeunpuestoo
departamentoqueelformatoverticalnoregistra.

Formato Arquitectnico: Describe el itinerario de ruta de una forma o persona sobre el


planoarquitectnicodelreadetrabajo.Elprimerodelosflujogramaseseminentemente
descriptivo,mientrasquelosutilizadossonfundamentalmenterepresentativos.

Creardiagramasdeflujos
Un diagrama de flujo u organigrama es una representacin diagramtica que ilustra la
secuenciadelasoperacionesqueserealizarnparaconseguirlasolucindeunproblema.

18

AlgoritmoyEstructuradeDatosI

Losdiagramasdeflujosedibujangeneralmenteantesdecomenzaraprogramarelcdigo
frente a la computadora. Los diagramas de flujo facilitan la comunicacin entre los
programadoresylagentedelnegocio.Estosdiagramasdeflujodesempeanunpapelvital
enlaprogramacindeunproblemayfacilitanlacomprensindeproblemascomplicadosy
sobretodomuylargos.Unavezquesedibujaeldiagramadeflujo,llegaaserfcilescribir
el programa en cualquier idioma de alto nivel. Vemos a menudo cmo los diagramas de
flujo nos dan ventaja al momento de explicar el programa a otros. Por lo tanto, est
correctodecirqueundiagramadeflujoesunanecesidadparaladocumentacinmejorde
unprogramacomplejo.

Reglasparadibujarundiagramadeflujo
LosDiagramasdeflujosedibujangeneralmenteusandoalgunossmbolosestndares;sin
embargo, algunos smbolos especiales pueden tambin ser desarrollados cuando sean
requeridos.Algunossmbolosestndares,queserequierenconfrecuenciaparadiagramar
programasdecomputadorasemuestranacontinuacin:

Inicioofindelprograma

Pasos,procesosolneasdeinstruccindeprogramade
computo
Operacionesdeentradaysalida

TomadedecisionesyRamificacin

Conectorparaunirelflujoaotrapartedeldiagrama

Cintamagntica

Discomagntico

Conectordepagina

Lneasdeflujo

19

AlgoritmoyEstructuradeDatosI

Anotacin

Display,paramostrardatos

Envadatosalaimpresora

Figura6.Simbolosparaeldiseodediagramasdeflujo

Observacin: Para obtener la correcta elaboracin de los smbolos, existen plantillas. Las
puedesconseguirenPapeleras.

Smbolosgrficos
Dentrodelossmbolosfundamentalesparalacreacindediagramasdeflujo,lossmbolos
grficos son utilizados especficamente para operaciones aritmticas y relaciones
condicionales.Lasiguienteesunalistadelossmbolosmscomnmenteutilizados:

+
Sumar

Menos
*
Multiplicacin
/
Divisin

Masomenos
=
Equivalentea
>
Mayorque
<
Menorque
>=
Mayoroigualque
<=
Menoroigualque
<>
Diferentede
Figura7.Simboloscomunes

ReglasparalacreacindeDiagramas
a. LosDiagramasdeflujodebenescribirsedearribahaciaabajo,y/odeizquierdaa
derecha.
b. Los smbolos se unen con lneas, las cuales tienen en la punta una flecha que
indica la direccin que fluye la informacin procesos, se deben de utilizar
solamentelneasdeflujohorizontaloverticales(nuncadiagonales).
c. Se debe evitar el cruce de lneas, para lo cual se quisiera separar el flujo del
diagramaaunsitiodistinto,sepudierarealizarutilizandolosconectores.Sedebe
tener en cuenta que solo se van a utilizar conectores cuando sea estrictamente
necesario.
d. Nodebenquedarlneasdeflujosinconectar

20

AlgoritmoyEstructuradeDatosI

e. Todotextoescritodentrodeunsmbolodebeserlegible,preciso,evitandoeluso
demuchaspalabras.
f. Todos los smbolos pueden tener ms de una lnea de entrada, a excepcin del
smbolofinal.
g. Sololossmbolosdedecisinpuedenydebentenermsdeunalneadeflujode
salida.

Ejemplosdediagramasdeflujo
Diagramadeflujoqueencuentralasumadelosprimeros50nmerosnaturales

Figura8.Diagramadeflujo

Bueno,ahoraladescripcindetalladadeldiagramaanterior

Suma,eslavariablealaqueselevaagregandoelvalordecadanmeronatural.N,esel
contador.sterecorrerlosnmeroshastallegaral50.

21

AlgoritmoyEstructuradeDatosI

ElprimerbloqueindicaeliniciodelDiagramadeflujo

El segundo bloque, es un Smbolo de procesos En este

bloque se indica que las variables suma y N han sido


declaradas previamente y se inicializan en 0 para
comenzarelconteoylasumadevalores.
Eltercerbloque,estambinunSmbolodeprocesosEn
stepasoseincrementaen1lavariableN(N=N+1).
Porloque,enlaprimeralecturalavariable Nvaldr1,
yaqueseinicializoen0.
El cuarto bloque es exactamente lo mismo que el
anteriorPeroaqulavariablesumaesigualalavariable
sumaagregadaenelvalordeN(EnelprimercasoSuma
contendr1,yaqueN=1).
ElquintobloqueesunSmbolodeTomadedecisionesy
Ramificacin Lo que hay dentro del bloque es una
pregunta que se le hace a alguna variable para validar
una condicin. En este caso Es N=50?, Obviamente la
respuesta es no, ya que N todava es 1. por lo que el
flujo de nuestro programa se dirigir haca la parte en
donde se observa la palabra no: Tercer Bloque, ste le
sumar1(N=N+1)yvuelveallegarastebloque,donde
preguntar Es N=50?... No!, todava es 2. Entonces,
regresaalTercer bloque y vuelvehacerlo mismo.Yas
hastallegara50,obteniendoaslasumadelosprimeros
50primerosnmerosnaturales.

Porltimoindicamosqueelresultadosermostradoen

lapantalla(Display).

Findelprograma(odiagrama)

Pseudocdigo
Pseudocdigo es la descripcin de un algoritmo que asemeja a un lenguaje de
programacin pero con algunas convenciones del lenguaje natural. Tiene varias ventajas
con respecto a los diagramas de flujo, entre las que se destaca el poco espacio que se
requiere para representar instrucciones complejas. El pseudocdigo no est regido por
ningn estndar. Pseudo viene de falso y por ende es un cdigo al que aunque es
entendiblenoseaplicaalprocesoquedeberealizarlamquinaocomputador.

22

AlgoritmoyEstructuradeDatosI

Un pseudocdigo (lenguaje natural), es una serie de palabras lxicas y gramaticales


referidosaloslenguajesdeprogramacin,perosinllegaralarigidezdelasintaxisdeestos
ni a la fluidez del lenguaje coloquial. Esto permite codificar un programa con mayor
agilidad que en cualquier lenguaje de programacin, con la misma validez semntica,
normalmenteseutilizaenlasfasesdeanlisisodiseodeSoftware,oenelestudiodeun
algoritmo. Forma parte de las distintas herramientas de la ingeniera de software. Es,
netamente,lenguajedetipoinformtico.

Para probar el algoritmo se utiliza un Pseudo intrprete el cual se encuentra disponible


para las plataformas GNU/Linux y Windows, es de cdigo libre y est escrito en C++. El
mismoseejecutaenunTerminal.

Elpseudocdigodescribeunalgoritmoutilizandounamezcladefrasesenlenguajecomn,
instrucciones de programacin y palabras clave que definen las estructuras bsicas. Su
objetivoespermitirqueelprogramadorsecentreenlosaspectoslgicosdelasolucina
unproblema.

Nosiendoelpseudocdigounlenguajeformal,varandeunprogramadoraotro,esdecir,
nohayunaestructurasemnticaniarquitecturaestndar.Esunaherramientagilparael
estudio y diseo de aplicaciones, veamos un ejemplo, que podramos definir como:
lenguaje imperativo, de tercera generacin, segn el mtodo de programacin
estructurada.

Pseudocdigo=Pseudo(Supuesto)+Cdigo(Instruccin)

Comencemos aclarando que no es una forma de programacin. Se trata de una


herramientaquelosanalistasdesistemasutilizanparacomunicaralosprogramadoresla
estructuradelprogramaquevanarealizar,deformadetenerunaideabienclaradeloque
senecesitaprogramar.

Digamosqueelpseudocdigoesunaformadediagramarunalgoritmopararesolverun
determinadoproblema,sinatenerseaningnlenguajedeprogramacinenespecial.

Unalgoritmoesunconjuntodeprocedimientosquepermitenresolverunproblema.

Envezdeescribirelprogramadirectamenteenunlenguajedeprogramacindeterminado
(C, C++, Visual Basic, etc.), crearemos un borrador entendible para todos, para luego de
tenerbienenclaroloquesedebehacer,pasaralaprogramacinpropiamentedicha.

Figura9.Pseudocodigo

23

AlgoritmoyEstructuradeDatosI

Nohayqueconfundirloconundiagramadeflujo.

En el diagrama de flujo se representa el transcurso del programa, el momento donde se


obtienenlosdatos,cuandoseprocesanyelmomentodepresentarlosresultados.Sibien
sondosherramientasqueseutilizanenconjunto,cadaunarepresentadospartesdistintas
eneldiseodeunsistema.Elpseudocdigoserefiereacrearuncdigoparaorientara
losprogramadores,perosinlasintaxisnilaestructurapropiadeningnlenguaje.

Utilizacinenlaprctica
Eneltrabajodeuningenieroanalista,unadelaspartesmstrabajosasesladedeterminar
qu es lo que necesitan de un sistema los usuarios finales. Se dedican muchas horas a
hacerunrelevamientodelosdatosquesernnecesarios,lostiposdeprocesamientos,las
salidas,etc.Ydebeexistirunarealimentacinentreeldiseoyelusuario,paragarantizar
queelsistemacumplaconlosrequisitosdelusuario.

Figura10.Unsistema

Supongamosquetenemosunsistemaparaunaempresaqueutilizaunainterfazgrficaen
VisualBasic,algunasaplicacionesespecficasenC,ypginasPHPparatrabajovaInternet.
Seguramentequecrearundiagramaespecficoparacadalenguajeseraunatareatediosa.

Graciasaestaherramienta,podemosreuniratodoslosprogramadores,darlaspautasde
trabajo, y mediante el pseudocdigo,cada programador sabr lo quehaceel sistema, y
podrescribirelcdigocorrespondiente.

Inclusodosprogramadoresquedominenelmismolenguajepuedentenermetodologasde
trabajo distintas. Un problema puede ser resuelto de muchas maneras, cada una ms o
menoseficientequelaotra,perotodascumplenconelobjetivo.

24

AlgoritmoyEstructuradeDatosI

Figura11.Lenguajesyelpseudocodigo

Elpseudocdigoeliminaestasdiferencias,dandolibertadalosprogramadoresparaque
puedanajustarseasumetodologadetrabajo.

Generalmente, este cdigo se escribe con la participacin de todos los programadores.


Estorepresentalaventajadequemuchasopinionesayudanaelegirlamejorentretodas,
lograndounasolucinefectivayeficazalproblemaplanteado.

DefinicindedatosdelPseudocdigo
La definicin de datos se da por supuesta, sobre todo en las variables sencillas, si se
empleaformaciones:pilas,colas,vectoresoregistros,sepuedendefinirenlacabeceradel
algoritmo,ynaturalmentecuandoempleemoselpseudocdigoparadefinirestructurasde
datos,estaparteladesarrollaremosadecuadamente.

Funcionesyoperaciones
Como se haba mencionado antes, cada autor usa su propio pseudocdigo con sus
respectivasconvenciones.Porejemplo,considerelainstruccin"Reemplaceelvalordela
variable x por el valor de la variable y"; algunas de las posibles sintaxis para indicar lo
anteriorpodranser:

Asignea elvalorde

Lasoperacionesaritmticasserepresentandelaformausualenmatemticas.

25

AlgoritmoyEstructuradeDatosI

ylasoperacionescomplejasserepresentandelmismomodo:

Ejemplo1:Hacerunpseudocodigoqueimprimalosnmerosdel1al100.

PROGRAMAcontador1

ENTORNO:
c0
ALGORITMO:

Borrar_pantalla()
MIENTRASc<101HACER
ESCRIBIRc
cc+1
FINMIENTRAS

FINPROGRAMA

Ejemplo 2: Hacer un pseudocodigo que imprima los nmeros del 100 al 0, en orden
decreciente.

PROGRAMAcontador2

ENTORNO:
c100
ALGORITMO:
Borrar_pantalla()
MIENTRASc>=0HACER
ESCRIBIRc
cc1
FINMIENTRAS

FINPROGRAMA

26

AlgoritmoyEstructuradeDatosI

Ejemplo3:Hacerunpseudocodigoqueimprimalosnmerosparesentre0y100.

PROGRAMApares

ENTORNO:
c2
ALGORITMO:
Borrar_pantalla()
MIENTRASc<101HACER
ESCRIBIRc
cc+2
FINMIENTRAS

FINPROGRAMA

Ejemplo4:Hacerunprogramaqueimprimalasumadelos100primerosnmeros.

PROGRAMAsuma

ENTORNO:
c1
suma0
ALGORITMO:
Borrar_pantalla()
MIENTRASc<=100HACER
sumasuma+c
cc+1
FINMIENTRAS
ESCRIBIR"Lasumadelos100primerosnmeroses:"
ESCRIBIRsuma

FINPROGRAMA

27

AlgoritmoyEstructuradeDatosI

Ejemplo5:Hacerunpseudocdigoqueimprimalosnmerosimpareshastael100yque
imprimacuantosimpareshay.

PROGRAMAimpares

ENTORNO:
c1
son0
ALGORITMO:
Borrar_pantalla()
MIENTRASc<100
ESCRIBIRc
cc+2
sonson+1
FINMIENTRAS
ESCRIBIR"Elnumerodeimpares:"
ESCRIBIRson

FINPROGRAMA

Ejemplo 6: Hacer un pseudocodigo que imprima todos los nmeros naturales que hay
desdelaunidadhastaunnumeroqueintroducimosporteclado.

PROGRAMAnatural

ENTORNO:
i0
n0
ALGORITMO:
Borrar_pantalla()
ESCRIBIR"Introduceunnumero:"
LEERn
MIENTRASi<nHACER
ii+1
ESCRIBIRi
FINMIENTRAS

FINPROGRAMA

28

AlgoritmoyEstructuradeDatosI

Ejemplo7:Introducirunnumeroporteclado.Quenosdigasiesparoimpar.

PROGRAMAparidad

ENTORNO:
num0
ALGORITMO:
Borrar_pantalla()
ESCRIBIR"Introduceunnmero:"
LEERnum
SInum=int(num/2)*2ENTONCES
ESCRIBIR"espar"
SINO
ESCRIBIR"esimpar"
FINSI

FINPROGRAMA

Ejemplo 8: Imprimir y contar los mltiplos de 3 desde la unidad hasta un numero que
introducimosporteclado.

PROGRAMAmultiplo

ENTORNO:
i3
n0
c0
ALGORITMO:
Borrar_pantalla()
ESCRIBIR"Numero:"
LEERn
MIENTRASi<=nHACER
SIi=int(i/3)*3ENTONCES
ESCRIBIRi
cc+1
FINSI
ii+1
FINMIENTRAS
ESCRIBIR"Elnmerodemltiplosde3son:"
ESCRIBIRc

FINPROGRAMA

29

AlgoritmoyEstructuradeDatosI

EjerciciosPropuestos
ConstruirdiagramasdeFlujoyPseudoCdigosparalossiguientesenunciados:

1. MostrarsuNombreysuApellido
2. Mostrar el Nombre y Apellido de cualquier persona de quien se introduzcan los
datos.
3. Sumar 2 + 2 y mostrar el resultado (por pantalla, por impresora, por pantalla e
impresora)
4. Sumar2nmeroscualesquiera.
5. Dados 2 nmeros, estar en capacidad de sumarlos, restarlos, multiplicarlos y
dividirlos.
6. DadosloscoeficientesdeunaEcuacinde2doGrado,calcularymostrarx1yx2.
7. CalcularlaSeriedeFibonaccihastaunnmerodado.
8. Calcularlaedad
9 fcil:alintroducirsloelaodenacimiento
9 mediano:alintroducirelmesyaodenacimiento
9 complejo:alintroducirelda,mesyaodenacimiento
9. Calcularlanotadefinitivapara5alumnos,tomandoencuentalasponderaciones
siguientes:
9 1erPractica:30%
9 2doPractica:25%
9 3erPractica:20%
9 4taPractica:25%
10. 10.Calcularelsueldoquincenal,tomandoencuentalossiguientesparmetros:
9 Bs450.000porquincena
9 Bonode10%deprofesionalizacinalosquetienenttulouniversitario
9 BonoquincenaldetransportedeBs70.000
9 BonodealimentacindeBs5.000pordalaborado
9 Deducciones:
2%SeguroColectivo
1%ParoForzoso
2%SeguroSocial
2%CajadeAhorro
11. Calcularlosnmerosprimosenunrangodado.
12. Calcularlasumadetodoslosnmerosenterosimpares,enunrangodado.
13. Calcularelfactorialdeunnmero.
14. Problema:Buscarunacarta
Se tiene un mazo de cartas inglesas, el cual no est completo, pero se sabe que
tiene n cartas, y est desordenado. Se desea determinar si una carta
determinadaestonoenelmazo,ysiest,enquposicin
15. Problema:seriedeulam
Dadounvalorinicialx,sepidegenerarlostrminosdelaseriedeUlam.

30

AlgoritmoyEstructuradeDatosI

Se dice que cualquier nmero menor que 1800 converge a 1 si se calcula cada
trminosiguiendolasreglasdelaseriedeUlam.
Lareglaparacalculareltrminosiguienteaxes:
9 Sixpar,elsiguientetrminoseobtienedividiendoxpor2
9 Sixesimpar,elsiguientetrminoseobtienemultiplicandoxpor3ysumando
1alresultado.
16. Problema:cadalibre
La ecuacin que rige el movimiento uniformemente acelerado de una partcula
est dado por la siguiente frmula: x(t)= xo + vo * t + * a * t2, donde xo es la
posicininicialdelapartcula,voeslavelocidadinicialya,laaceleracin.
Elmovimientodecadalibreserigeporlamismaecuacinanterior,salvoquela
velocidadinicialescero,(sedejacaerelobjetodelreposo),ylaaceleracinesla
constanteg,quesepuedeaproximarpor10consignonegativo.
Construya un algoritmo que reciba como entrada una altura h, desde la cual se
dejacaerunobjeto,yentreguecomosalidalaposicindelapartcula,yeltiempo
transcurridoencadasegundodesdequeessoltadohastaquellegaalsuelo.
Indicacin.Considereposicininicialh,yposicinfinal0(suelo)
17. Problema:MquinadeSencillar
Setieneunamquinaquepermitesencillardinero.Lamquinaestdiseadapara
que, dado un monto cualquiera, indique cuantos billetes de 1000 y monedas de
100, 10 y 1 debe entregar, a cambio de ese monto. Una caracterstica de esta
mquinaesquesiempreintentardarlamenorcantidaddemonedas.
Construyaelalgoritmoquepermitaquelamquinafuncionedelaformadescrita.
Es decir, un algoritmo que reciba como entrada un monto de dinero, entero,
positivo y entregue como salida la cantidad de billetes y de monedas de las
distintasdenominacionesqueequivalenadichomonto.

1.6 Metodologaparalasolucindeproblemaspormediodecomputadora

1.7 DefinicindelProblema
Estafaseestdadaporelenunciadodelproblema,elcualrequiereunadefinicinclaray
precisa. Es importante que se conozca lo que se desea que realice la computadora;
mientras esto no se conozca del todo no tiene mucho caso continuar con la siguiente
etapa.

1.8 AnlisisdelProblema
Unavezquesehacomprendidoloquesedeseadelacomputadora,esnecesariodefinir:

9 Losdatosdeentrada.
9 Culeslainformacinquesedeseaproducir(salida)
9 Losmtodosyfrmulasquesenecesitanparaprocesarlosdatos.

31

AlgoritmoyEstructuradeDatosI

Unarecomendacinmuypracticaeselquenospongamosenellugardelacomputadoray
analicemosqueesloquenecesitamosquenosordenenyenquesecuenciaparaproducir
losresultadosesperados.

1.9 DiseodelAlgoritmo
Lascaractersticasdeunbuenalgoritmoson:

9 Debetenerunpuntoparticulardeinicio.
9 Debeserdefinido,nodebepermitirdoblesinterpretaciones.
9 Debe ser general, es decir, soportar la mayora de las variantes que se puedan
presentarenladefinicindelproblema.
9 Debeserfinitoentamaoytiempodeejecucin.

1.10Codificacin
Lacodificacineslaoperacindeescribirlasolucindelproblema(deacuerdoalalgica
del diagrama de flujo o pseudocodigo), en una serie de instrucciones detalladas, en un
cdigo reconocible por la computadora, la serie de instrucciones detalladas se le conoce
comocdigofuente,elcualseescribeenunlenguajedeprogramacinolenguajedealto
nivel.

1.11PruebayDepuracin
Los errores humanos dentro de la programacin de computadoras son muchos y
aumentanconsiderablementeconlacomplejidaddelproblema.Elprocesodeidentificary
eliminarerrores,paradarpasoaunasolucinsinerroresselellamadepuracin.

La depuracin o prueba resulta una tarea tan creativa como el mismo desarrollo de la
solucin,porellosedebeconsiderarconelmismointersyentusiasmo.

Resulta conveniente observar los siguientes principios al realizar una depuracin, ya que
deestetrabajodependeelxitodenuestrasolucin.

1.12Documentacin
Es la gua o comunicacin escrita es sus variadas formas, ya sea en enunciados,
procedimientos,dibujosodiagramas.

A menudo un programa escrito por una persona, es usado por otra. Por ello la
documentacinsirveparaayudaracomprenderousarunprogramaoparafacilitarfuturas
modificaciones(mantenimiento).

Ladocumentacinsedivideentrespartes:
DocumentacinInterna
DocumentacinExterna
ManualdelUsuario

32

AlgoritmoyEstructuradeDatosI

Documentacin Interna: Son los comentarios o mensaje que se aaden al cdigo


fuenteparahacermsclaroelentendimientodeunproceso.

DocumentacinExterna:Sedefineenundocumentoescritolossiguientespuntos:

9 DescripcindelProblema
9 NombredelAutor
9 Algoritmo(diagramadeflujoopseudocodigo)
9 DiccionariodeDatos
9 CdigoFuente(programa)

ManualdelUsuario:Describepasoapasolamaneracmofuncionaelprograma,con
elfindequeelusuarioobtengaelresultadodeseado.

1.13Mantenimiento
Se lleva a cabo despus de terminado el programa, cuando se detecta que es necesario
haceralgncambio,ajusteocomplementacinalprogramaparaquesigatrabajandode
manera correcta. Para poder realizar este trabajo se requiere que el programa este
correctamentedocumentado.

33

AlgoritmoyEstructuradeDatosI

34

AlgoritmoyEstructuradeDatosI

CAPTULOII

TiposdeDatos

2.1 TiposDeDatos
Todoslosdatostienenuntipoasociadoconellos.Undatopuedeserunsimplecarcter,
tal como b, un valor entero tal como 35. El tipo de dato determina la naturaleza del
conjuntodevaloresquepuedetomarunavariable.

Simples
Tipos de
datos

Numricos
Lgicos
Alfanumricos (string)

Arreglos (Vectores, Matrices)


Estructurados Registros
(Def. por el
Archivos
usuario)
Apuntadores

TiposdeDatosSimples
DatosNumricos:Permitenrepresentarvaloresescalaresdeformanumrica,estoincluye
a los nmeros enteros y los reales. Este tipo de datos permiten realizar operaciones
aritmticascomunes.

Datos Lgicos: Son aquellos que solo pueden tener dos valores (cierto o falso) ya que
representan el resultado de una comparacin entre otros datos (numricos o
alfanumricos).

DatosAlfanumricos(String):Esunasecuenciadecaracteresalfanumricosquepermiten
representarvaloresidentificablesdeformadescriptiva,estoincluyenombresdepersonas,
direcciones,etc.Esposiblerepresentarnmeroscomoalfanumricos,peroestospierden
supropiedadmatemtica,esdecirnoesposiblehaceroperacionesconellos.Estetipode
datosserepresentanencerradosentrecomillas.

Ejemplo:
InstitutoTecnolgicodelosOlivos
2009

2.2 Expresiones
Las expresiones son combinaciones de constantes, variables, smbolos de operacin,
parntesisynombresdefuncionesespeciales.Porejemplo:

35

AlgoritmoyEstructuradeDatosI

a+(b+3)/c

Cada expresin toma un valor que se determina tomando los valores de las variables y
constantesimplicadasylaejecucindelasoperacionesindicadas.

Una expresin consta de operadores y operandos. Segn sea el tipo de datos que
manipulan,seclasificanlasexpresionesen:

9 Aritmticas
9 Relacinales
9 Lgicas

2.3 OperadoresyOperandos
Operadores:Sonelementosquerelacionandeformadiferente,losvaloresdeunaoms
variablesy/oconstantes.Esdecir,losoperadoresnospermitenmanipularvalores.

Tipos de Operadores

Aritmticos
Relacinales
Lgicos

Operadores Aritmticos: Los operadores aritmticos permiten la realizacin de


operacionesmatemticasconlosvalores(variablesyconstantes).

Los operadores aritmticos pueden ser utilizados con tipos de datos enteros o reales. Si
ambossonenteros,elresultadoesentero;sialgunodeellosesreal,elresultadoesreal.

Operando (Operador) Operando


Valor
(constante o variable)

OperadoresAritmticos

+Suma
Resta
*Multiplicacin
/Divisin
ModModulo(residuodeladivisinentera)

36

AlgoritmoyEstructuradeDatosI

Ejemplos:

ExpresinResultado

9 7/2=3.5
9 12mod7=5
9 4+2*5=14

PrioridaddelosOperadoresAritmticos

Todaslasexpresionesentreparntesisseevalanprimero.Lasexpresionesconparntesis
anidadosseevalandedentroafuera,elparntesismsinternoseevalaprimero.

Dentrodeunamismaexpresinlosoperadoresseevalanenelsiguienteorden.

1.^Exponenciacin
2.*,/,modMultiplicacin,divisin,modulo.
3.+,Sumayresta.

Los operadores en una misma expresin con igual nivel de prioridad se evalan de
izquierdaaderecha.

Ejemplos:

4+2*5=14
23*2/5=9.2
46/5=9.2
3+5*(10(2+4))=23
3+5*(106)=
3+5*4=
3+20=23
3.5+5.0914.0/40=5.09
3.5+5.093.5=
8.593.5=5.09
2.1*(1.5+3.0*4.1)=28.98
2.1*(1.5+12.3)=
2.1*13.8=28.98

OperadoresRelacinales:

9 Seutilizanparaestablecerunarelacinentredosvalores.
9 Compara estos valores entre si y esta comparacin produce un resultado de
certezaofalsedad(verdaderoofalso).

37

AlgoritmoyEstructuradeDatosI

9 Los operadores relacinales comparan valores del mismo tipo (numricos o


cadenas)
9 Tienenelmismoniveldeprioridadensuevaluacin.
9 Losoperadoresrelacinalestienemenorprioridadquelosaritmticos.

OperadoresRelacinales

>Mayorque
<Menorque
>=Mayoroigualque
<=Menoroigualque
<>Diferente
=Igual

Ejemplos:

Sia=10,b=20,c=30

a+b>cFalso
acVerdadero
ab=cFalso
a*b<>cVerdadero

Ejemplosnolgicos:

a<b<c
10<20<30
T<30(noeslgicoporquetienediferentesoperandos)

OperadoresLgicos:

9 Estosoperadoresseutilizanparaestablecerrelacionesentrevaloreslgicos.
9 Estosvalorespuedenserresultadodeunaexpresinrelacional.

OperadoresLgicos

AndY
OrO
NotNegacin

38

AlgoritmoyEstructuradeDatosI

OperandoAnd

Operando1
T
T
F
F

Operador
AND

Operando2
T
F
T
F

Resultado
T
F
F
F

Operando1
T
T
F
F

Operador
OR

Operando2
T
F
T
F

Resultado
T
T
T
F

Operando
T
F

Resultado
F
T

OperandoOr

OperandoNot

Ejemplos:
(a < b) and (b < c)
(10<20) and (20<30)
T and
T
T

Prioridad de los Operadores Lgicos


Not
And
Or
Prioridad de los Operadores en General
1.- ( )
2.- ^
3.- *, /, Mod, Not
4.- +, -, And
5.- >, <, > =, < =, < >, =, Or

39

AlgoritmoyEstructuradeDatosI

Ejemplos:

a = 10 b = 12 c = 13 d =10
1)

((a > b) or (a < c)) and ((a = c) or (a > = b))


F
T
F
F
T
F
F

2)

((a > = b) or (a < d)) and (( a > = d) and (c > d))


F
F
T
T
F
T
F

3)

not (a = c) and (c > b)


F
T
T
T

2.4 Identificadores
Losidentificadoresrepresentanlosdatosdeunprograma(constantes,variables,tiposde
datos). Un identificador es una secuencia de caracteres que sirve para identificar una
posicinenlamemoriadelacomputadora,quenospermiteteneraccesoasucontenido.

Ejemplo:

9 Nombre
9 Num_hrs
9 Calif2

ReglasparaformarunIdentificador

9 Debe comenzar con una letra (A a Z, maysculas o minsculas) y no deben


contenerespaciosenblanco.
9 Letras, dgitos y caracteres como la subraya ( _ ) estn permitidos despus del
primercarcter.
9 Lalongituddeidentificadorespuedeserdehasta8caracteres.

ConstantesyVariables
Constante:Unaconstanteesundatonumricooalfanumricoquenocambiadurantela
ejecucindelprograma.

Ejemplo:
pi=3.1416

40

AlgoritmoyEstructuradeDatosI

Variable: Es un espacio en la memoria de la computadora que permite almacenar


temporalmenteundatodurantelaejecucindeunproceso,sucontenidopuedecambia
durantelaejecucindelprograma.Parapoderreconocerunavariableenlamemoriadela
computadora,esnecesario darleunnombre conelcualpodamosidentificarla dentrode
unalgoritmo.

Ejemplo:
rea=pi*radio^2

Lasvariablesson:elradio,elreaylaconstateespi

ClasificacindelasVariables

Numricas
Por su Contenido
Lgicas
Alfanumricas (String)
Variables
De Trabajo
Contadores
Acumuladores

Por su Uso

PorsuContenido
VariableNumricas:Sonaquellasenlascualessealmacenanvaloresnumricos,positivos
onegativos,esdeciralmacenannmerosdel0al9,signos(+y)yelpuntodecimal.

Ejemplo:

IGV=0.15
pi=3.1416
costo=2500

Variables Lgicas: Son aquellas que solo pueden tener dos valores (cierto o falso) estos
representanelresultadodeunacomparacinentreotrosdatos.

Variables Alfanumricas: Esta formada por caracteres alfanumricos (letras, nmeros y


caracteresespeciales).

Ejemplo:

letra=a
apellido=lopez
direccion=Av.Libertad#190

41

AlgoritmoyEstructuradeDatosI

PorsuUso
Variables de Trabajo: Variables que reciben el resultado de una operacin matemtica
completayqueseusannormalmentedentrodeunprograma.Ejemplo:

Suma=a+b/c

Contadores: Se utilizan para llevar el control del nmero de ocasiones en que se realiza
unaoperacinosecumpleunacondicin.Conlosincrementosgeneralmentedeunoen
uno.

Acumuladores:Formaquetomaunavariableyquesirveparallevarlasumaacumulativa
deunaseriedevaloresquesevanleyendoocalculandoprogresivamente.

42

AlgoritmoyEstructuradeDatosI

CAPTULOIII

LenguajedeProgramacinC

3.1 Introduccin
FuecreadoporDennisRitchiedeloslaboratoriosBELLen1972,cuandotrabajabajuntoa
Ken Thompson, en el diseo del sistema operativo UNIX. Se deriva del lenguaje B de
Thompson,queasuvezsederivadelBCPLdeMartnRichards.

3.2 Caractersticas
Esunlenguajemodernodepropsitogeneral,queincorporalascaractersticasdecontrol
apuntadascomodeseablesporlateorayprcticadelainformtica.

9 Planificacinescalonada.
9 Programacinestructurada.
9 Diseomodular.
9 Programascompactos.
9 Rapidezdeejecucin.
9 Porttil.
9 Derelativobajonivel.
9 Precisacompilarse.

3.3 Procesodeedicinycompilacin
LospasosnecesariosparadesarrollarunprogramaCsonlossiguientes:

a. Edicin:Utilizaruneditorparaescribirelprogramafuentetexto.
b. Compilacin: Compilar el programa fuente, es decir, traducir el programa a
lenguajemquina.
c. Ejecucin:Unavezcompiladoseprocedealaejecucindelprogramatecleandoel
nombredelficheroprograma.

43

AlgoritmoyEstructuradeDatosI

Figura1.Diagramadeflujo

3.4 Estructuradeunprograma
Un programa en C consiste en una o ms funciones, de las cuales una de ellas, debe
llamarsemain()yeslaprincipaldetodas.

9 Elprogramacomienzaconlafuncin:main()
9 Cadafuncinoprograma,constadeuncuerpodefuncindelimitadoporllavesde
comienzoyfin{}
9 En el cuerpo de la funcin irn incluidas: sentencias, variables, funciones, etc.
terminadascadaunadeellasporunpuntoycoma;

44

AlgoritmoyEstructuradeDatosI

Programaejemplo:

/*Esteprogramaimprimeunmensaje*/
#include<stdio.h>
main()
{
printf(LENGUAJEC\n);
}

Enelprogramaanterior,existendosfunciones:main()queeslaprincipaldelprogramaen
sylafuncinprintf()queesunafuncindelalibreraestndardellenguajeC.

Alejecutarelprograma,enpantallaapareceeltextoLENGUAJEC.
Programaejemplo:

/*Elprogramasolicitaelradioymuestrael*/
/*valordelreadelcrculoylalongitudde*/
/*lacircunferencia*/
#include<stdio.h>
#definePI3.14159
main()
{
intr;
floatl,a;
printf(Introduceradio(entero):);
scanf(%d,&r);
l=2*PI*r;a=PI*r*r;
printf(Lalongituddelacircunferenciavale%f\n,l);
printf(Elreadelcrculovale%f\n,a);
}

45

AlgoritmoyEstructuradeDatosI

LosdatosenC:VariablesyConstantes

TiposdeDatos
LosdatosmanejadosenCpuedenserdecincotiposbsicos.

9 INT: enteros sin decimales entre (32768 y +32767). Ocupan en la memoria 2


bytes.
9 CHAR:caracteresalfabticos,signosespeciales,etc.Elrangoes(0y255).Ocupan
enlamemoria1byte.
9 FLOAT: nmeros decimales entre (3.4E38 a 3.4E+38) con ocho dgitos de
precisin.Ocupanenlamemoria4bytes.
9 DOUBLE: nmeros decimales entre (1.7E308 a 1.7E+308) con 16 dgitos de
precisin.Ocupanenlamemoria8bytes.
9 VOID:sinvalor.Noalmacenarnadayportantononecesitanespaciofsicodela
memoria.

IdentificadoresdeTipo
Todoslostiposbsicosexceptovoidpuedentenermodificadores.Seusanparaalterarel
significadodeuntipobasedeacuerdoconnuestrasnecesidades.

Losmodificadoresson:

9 signed
9 unsigned
9 long
9 short

Sepuedenaplicartodoslosmodificadoresparalostiposbasecarcteryentero.

Tambinsepuedeaplicarelmodificadorlongadouble.Acontinuacinmostramostodas
lasposiblescombinacionesdelostiposbsicosylosmodificadores.

46

AlgoritmoyEstructuradeDatosI

Figura2.Tiposdeidentificadores

NOTA: El espacio ocupado en la memoria por los tipos de datos aqu mostrados vendr
determinado por el tipo de compilador implementado. En cualquier caso, mediante la
funcinsizeof(tipodedato)sepodrdeterminarelnmerodebytesocupados.

Variables
Se utilizan para almacenar datos internamente en la memoria de trabajo del ordenador,
durantelaejecucindeunprograma.

Comonombresdevariablesseadmitenletrasynmeros(pornormaletrasminsculas).
9 Elprimercarcterdebeserunaletra.
9 Noseadmitenblancosperoselsignodesubrayado.
9 Sloseadmitenlosochoprimeroscaracteres.
9 Maysculasyminsculassediferencian.
9 Nosepuedenemplearpalabrasclavedellenguaje.

Lasvariablesdebenserdeclaradassegneltipodedatosquevanaalmacenar.

Bienalcomienzodelprogramaoantesdeserusadasporprimeravez.

Laformadedeclararlases:
9 Sedefineeltipodedatoaalmacenar.
9 Nombredelavariable.
9 Asignacindeunvalorinicial(noobligatorio).

47

AlgoritmoyEstructuradeDatosI

Ejemplo:

/*Declaracindevariables*/
#include<stdio.h>
main()
{
inta=3,b=7,c=0;
c=a*b;
printf(Elresultadoes:%d,c);
}

Constantes
Son valores que no varan durante la ejecucin de un programa. Pueden adoptar
cualquiera de los tipos de datos declarados anteriormente. Es conveniente declararlas al
principiodelprograma.

La sentencia #define es usada para definir las constantes y se coloca al principio del
programaantesdelafuncinmain().

#definePI3.14159
#definePRIMO13

Lasconstantescomonormasesuelenescribirconmaysculas.

OperadoresFundamentales
En C se utilizan operadores para representar operaciones matemticas. Por ejemplo, el
operador+hacequesesumenlosvaloressituadosasuizquierdayderecha.

Veamoslosquehemosdadoenllamarfundamentales.

Operador de asignacin: = Asigna a la variable de la izquierda el valor de la


derecha.

bmw=2002;

Operadordeadicin:+Hacequelosdosvaloressituadosasuizquierdayderecha
sesumen.

bmw=10+20;

48

AlgoritmoyEstructuradeDatosI

Operadordesustraccin:Hacequeseresteelnmerosituadoasuderechadel
situadoasuizquierda.

costo=35025;

Elsignomenostambinseutilizaparaindicarocambiarelsignoalgebraicodeun
valor.

pepe=12;
paco=pepe;

Operadordemultiplicacin:*Hacequesemultipliquenlosdosvaloressituadosa
suizquierdayderecha.

pulg=10;
cm=2.54*pulg;

Operadordedivisin:/Hacequeelvalorsituadoasuizquierdaseadivididoporel
queseencuentraasuderecha.

cuatro=12.0/3.0;

OperadoresAdicionales
Alalistadelosoperadoresanteriores(quesonlosmscomunes),vamosaaadirahora
tresoperadoresqueresultanbastantestiles.

Operador mdulo: % Proporciona el resto de la divisin entera del nmero situado a su


izquierdaentreelsituadoasuderecha.

pepe=15%5;

Operadorincremento:++Realizalatareadeincrementarenunoelvalordesuoperando.

a++;modosufijo
++a;modoprefijo

La diferencia entre ambos, reside en el preciso momento en que se realiza la operacin


incremento.

Operadordecremento:Realizalatareadedisminuirenunoelvalordesuoperando.

b;modosufijo
b;modoprefijo

49

AlgoritmoyEstructuradeDatosI

Ladiferenciaentreambos,eslamismaqueenelcasoanterior.

OperadoresCondicionalesodeRelacin
Los operadores de relacin o condicionales se emplean para hacer comparaciones. A
continuacin,mostramosunalistacompletadeestosoperadoresenC.

OperadoresLgicos
Cuando necesitamos combinar dos o ms expresiones de relacin, hacemos uso de los
operadoreslgicos.ExistentresoperadoreslgicosenC.

OperadoresdeBit
Lasoperacionessobrebitsserefierenalacomprobacin,configuracinodesplazamiento
delosbitsrealesenunbyteopalabra,quecorrespondenalostiposdedatoschareint.

Nosepuedenusaroperacionessobrebitsenlostiposfloat,double,longdoublyvoid.

Losoperadoresqueexistenparaeltratamientodebits,sonlossiguientes:

50

AlgoritmoyEstructuradeDatosI

NormasdePrecedenciadelosOperadores
No todos los operadores tienen la misma prioridad, lo que quiere decir, que aquellas
operacionesqueutilizanciertosoperadoresseefectuarnantesqueotras.

Libreriastdio.h
stdio.h, que significa "standard inputoutput
header" (cabecera estandar E/S), es la
biblioteca estndar del lenguaje de
programacin C, el archivo de cabecera que
contiene las definiciones de macros, las
constantes,lasdeclaracionesdefuncionesyla
definicin de tipos usados por varias
operaciones estndar de entrada y salida. Por
motivos de compatibilidad, el lenguaje de
programacin C++ (derivado de C) tambin
tiene su propia implementacin de estas
funciones,quesondeclaradasconelarchivode
cabeceracstdio.

Las funciones declaradas en stdio.h son


sumamentepopulares.

51

AlgoritmoyEstructuradeDatosI

Ejemplo:
EnlenguajeCysusderivados,todaslasfuncionessondeclaradasenarchivosdecabecera.
As,losprogramadorestienenqueincluirelarchivodecabecerastdio.hdentrodelcdigo
fuente para poder utilizar las funciones que estn declaradas. nota: el compilador
diferencialasmaysculasentrelasminsculas.

#include<stdio.h>

intmain(void)
{
intch;

while((ch=getchar())!=EOF)
putchar(ch);
putchar('\n');

return0;
}

El programa lee todas las entradas desde la entrada estndar y las muestra en la salida
estndar,lneaalnea.

Funcionesmiembro
Lasfuncionesdeclaradasenstdio.hpuedenclasificarseendoscategoras:

Funcionesdemanipulacindeficherosyfuncionesdemanipulacindeentradasysalidas.

Nombre

Descripcin
Funcionesdemanipulacindeficheros

fclose

cierraunficheroatravsdesupuntero

fopen,
freopen,
fdopen

abreunficheroparalectura,paraescritura/reescrituraoparaadicin

remove

eliminaunfichero

rename

cambiaalficherodenombre

rewind

Lafuncinrewindcolocaelindicadordeposicindeficheroparaelstream
apuntadoporstreamalcomienzodelfichero.

tmpfile

creayabreunficherotemporalqueesborradocuandocerramosconla
funcinfclose()

52

AlgoritmoyEstructuradeDatosI

Funcionesdemanipulacindeentradasysalidas

clearerr

Despejalosindicadoresdefinaldeficheroydeposicindeficheroparael
streamapuntadoporstreamalcomienzodelfichero.

feof

compruebaelindicadordefinaldefichero

ferror

compruebaelindicadordeerrores

fflush

Si stream apunta a un stream de salida o de actualizacin cuya operacin


msrecientenoeradeentrada,lafuncinfflushenvacualquierdatoan
sinescribiralentornolocaloaserescritoenelfichero;sino,entoncesel
comportamientonoestdefinido.Sistreamesunpunteronulo,lafuncin
fflushrealizaeldespejeparatodoslosstreamscuyocomportamientoest
descritoanteriormente.

fgetpos

devuelvelaposicinactualdelfichero

fgetc

devuelveuncarcterdeunfichero

fgets

consigueunacadenadecaracteresdeunfichero

fputc

escribeuncarcterenunfichero

fputs

escribeunacadenadecaracteresenunfichero

ftell

devuelvelaposicinactualdelficherocomonmerodebytes

fseek

sitaelpunterodeunficheroenunaposicinaleatoria

fsetpos

cambialaposicinactualdeunfichero

fread

leediferentestamaosdedatosdeunfichero

fwrite

enva, desde el array apuntado por puntero, hasta nmemb de elementos


cuyo tamao es especificado por tamanyo. El indicador de posicin de
ficherosesavanzadoporelnmerodecaracteresescritoscorrectamente.Si
existeunerror,elvalor resultantedelindicadordeposicindeficheroses
indeterminado.

getc

devuelveuncarcterdesdeunfichero

getchar

igualquegetc

gets

leecaracteresdeentradahastaqueencuentraunsaltodelnea,ylos
almacenaenunnicoargumento.

printf,
fprintf,
sprintf
snprintf

usadosparaimprimirsalidasdedatos

vprintf

tambinutilizadoparaimprimirsalidas

53

AlgoritmoyEstructuradeDatosI

perror

escribeunmensajedeerrorastderr

putc

devuelveuncarcterdeunfichero

putchar,
fputchar

igualqueputc(stdout)

scanf,
fscanf,
sscanf

utilizadoparaintroducirentradas.

vfscanf,
vscanf,
vsscanf

tambinutilizadoparaintroducirentradas.

setbuf

Estafuncinesequivalentealafuncinsetvbufpasandolosvalores_IOFBF
paramodoyBUFSIZparatamao,o(siacumuladoresunpunteronulo),con
elvalor_IONBFparamodo.

setvbuf

slo puede ser usada despus de que el stream apuntado por stream ha
sidoasociadoconunficheroabiertoyantesdeotraoperacincualquieraes
llevadaacaboalstream.El argumentomododeterminacmo streamser
almacenado segn lo siguiente: _IOFBF ocasiona la entrada/salida a ser
completamente almacenado; _IOLBF ocasiona la entrada/salida a
almacenar por lneas; _IONBF ocasiona la entrada/salida a no ser
almacenado. Si acumulador no es un puntero nulo, el array al que es
apuntado puede ser usado en vez de la acumulacin adjudicada por la
funcinsetvbuf.Elargumentotamanyoespecficaeltamaodelarray.

tmpnam

Generaunacadenadecaracteresqueesunnombrevlidoparaficherosy
que no es igual al nombre de un fichero existente. La funcin tmpnam
generaunacadenadiferentecadavezqueesllamada,hastaunmximode
TMP_MAX veces. Si la funcin es llamada ms veces que TMP_MAX,
entonces el comportamiento de la funcin est definido segn la
implementacindelcompilador.

ungetc

puts

imprimeunadecadenadecaracteres

FuncionesdeEntrada/Salida
Las funciones de entrada/salida permiten al programa comunicarse con el exterior. Son
utilizadasparasacardeterminadasinformacionesporlapantallaycapturarvaloresporel
teclado.SonestndardelapropialibreradeCporloquenohaynecesidaddedefinirlas
denuevo.

54

AlgoritmoyEstructuradeDatosI

Funcinprintf()
Leedatosdelprograma(variables,resultadosdeoperaciones,frases,mensajes,
etc.)ylosenvaalapantalla.Elformatoeselsiguiente:

printf(Cadenadecontrol,variables,operaciones,...);

Lacadenadecontrolseusaparaescribirmensajes,identificareltipodedatoquesevaa
mostrar, indicar controles tales como: salto de lnea, salto de pgina, etc. Los
identificadoresempleadossonlossiguientes:

Unnmerocolocadoentreel%yelordendeformato,actacomoespecificadormnimo
de ancho de campo. Este especificador completa la salida con blancos o ceros para
asegurar que al menos es la longitud mnima. Si la cadena o el nmero a representar es
mayor que el campo mnimo, el campo se ampla para imprimir la cadena o el nmero
completo.

Ejemplos:

%5d
ajustealaderecha,rellenaconespacios
%05d

justealaderecha,rellenaconceros
%10.4f
ajustealaderecha,rellenaconespaciosycuatrodecimales
%10.2f
ajustealaizquierda,rellenaconespaciosydosdecimales

Caracteresdecontrolson:

Control

Efectoenpantalla

\n

cambiadelnea
\r

retornodecarro
\t

tabulador
\b

retrocesodelcursorunaposicin
\f

cambiodepgina

55

AlgoritmoyEstructuradeDatosI

\\
\
\

barraatrs(\)
apstrofe()
comillas()

Funcinscanf()
Estafuncin,leedatosdeltecladoylosentregaalprograma.Elformatoeselsiguiente:

scanf(Cadenadecontrol,variable,variable,...);

La cadena de control se usa para identificar el tipo de dato que se va a introducir o


capturar.Losidentificadoresempleadossonlosmismosquelosempleadosenlafuncin
printf().

La variable o variables que se van a introducir tendrn que ir acompaadas delante del
nombre por el signo (&). Si el dato que se va a introducir es una tira de caracteres tipo
char[],noesnecesarioelsigno.

Ejemplo:

/*Programadeempleodeprintf()yscanf()*/
main()
{
intedad;
charnombre[20];
printf(Introducenombre:\n);
scanf(%s,nombre);
printf(Introduceedad:\n);
scanf(%d,&edad);
printf(Tunombrees%sytienes%daos.\n,nombre,edad);
}

Libreraconio.h
Lasfuncionesdeconio(CONsoleInputOutput)permiten,comolasdeNcurses,cambiarel
color del texto y del fondo, mostrar caracteres en cualquier posicin de la consola, leer
datos de entrada sin necesidad de pulsar intro, y un montn de cosas ms. Eso s, es
bastantemsrestrictivaqueNcursesenotrosaspectos,comoladefinicinymanipulacin
deventanas.

Conioesunalibreranoestndar.Estabadisponibleenlamayorpartedeloscompiladores
deCparaentornosMSDOSyWindows3.x,perohabadiferenciassustancialesentreunas
implementacionesyotras,precisamentedebidoaquelalibreranoesestndar.

56

AlgoritmoyEstructuradeDatosI

EnlenguajeCestalibreracontienelosprototiposdelasfunciones,macros,yconstantes
paraprepararymanipularlaconsolaenmodotextoenelentornodeMSDOS.

Leeunsolocarcterdirectamentedesdeelteclado,sinmostrartalcarcterenpantalla.

Lafuncingetchretornaelcarcterledodesdeelteclado.

Ejemplo:

#include<conio.h>
intmain(){
cprintf("Pulsaunatecla:");
cprintf("\'%c\'\r\n",getch());
getch();
return0;
}

Funcionesimportantesparalalibreraconio
A continuacin se resumen las funciones ms relevantes de la librera conio. Puede
encontrarunareferenciacompletaenhttp://c.conclase.net/Borland.

gotoxy(columna,fila)
Sitaelcursorenlacolumnayfilaespecificada.Porejemplo,estainstruccin:

gotoxy(5,2);sitaelcursorenlafila2,columna5delapantalla.Lasiguienteinstruccin
deescrituraenconsolacomenzaraescribirapartirdeesascoordenadas.

cprintf()ycscanf()
Sonlasequivalentesaprintf()yscanf().Susintaxiseslamisma,yesrecomendableusarlas
enlugardelasfuncionesestndarparaevitarfuncionamientosextraos.

textcolor(color)

Cambiaelcolordeltexto.Loscolorespredefinidosson:BLACK,BLUE,RED,GREEN,CYAN,
MAGENTA,BROWN,DARKGRAY.Adems,existenlasvariedadesclarasdeestoscolores:
LIGHTBLUE,LIGHTRED,LIGHTGREEN,etc.

As,siejecutamos:

textcolor (LIGHTRED);el texto que se escriba a continuacin aparecer el color rojo


intenso.

57

AlgoritmoyEstructuradeDatosI

textbackground(color)
Establece el color del fondo del texto. Los colores predefinidos son los mismos que para
textcolor().As,estecdigo:

textbackground(BLUE);hacequeeltextoqueseescribaacontinuacinaparezcaconel
fondoencolorazuloscuro.

getch()
Leeuncarcterdesdeelteclado,sinmostrarelecoysinnecesidadde
pulsar Return. Devuelve el cdigo ASCII del carcter tecleado. Ah va
unejemplo:

charc;
c=getch();clrscr()

Borralapantalla.Nonecesitaargumentos.

58

AlgoritmoyEstructuradeDatosI

CAPTULOIV

EstructurasdeControl

SentenciasdeControldelPrograma

4.1 TiposdeEstructurasBsicas
Lassentenciasdecontroldelosprogramasespecificanelordenenquesehanderealizar
lasoperaciones.Existentresformasbsicasdeflujoenlosprogramas.

Estructurassecuenciales:secomponendeunaseriedesentenciasqueseejecutan
unas tras otras en el orden escrito en el programa. Para estas estructuras no se
necesitaningunasentenciadecontroldelflujodelprograma.
Estructurascondicionales:dentrodelflujodelprogramasetomandecisionespara
realizar unas acciones u otras dependiendo de que se cumplan una serie de
condiciones.
Estructuras repetitivas: repeticin de una serie de sentencias mientras no se
cumplaunadeterminadacondicin.Tambindenominadasbucles.

- Asignacin
Secuenciales
- Entrada
- Salida
- Simples
Estructuras Condicionales
Algoritmicas

- Mltiples

- Hacer para
- Hacer mientras
- Repetir hasta

Cclicas

4.2 EstructuraSecuencial
La estructura secuencial es aquella en la que una accin (instruccin) sigue a otra en
secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la
siguiente y as sucesivamente hasta el fin del proceso. Una estructura secuencial se
representadelasiguienteforma:

59

AlgoritmoyEstructuradeDatosI

Inicio
Accion1
Accion2
.
.
AccionN
Fin

Asignacin: La asignacin consiste, en el paso de valores o resultados a una zona de la


memoria.Dichazonaserreconocidaconelnombredelavariablequerecibeelvalor.La
asignacinsepuedeclasificardelasiguienteforma:

9 Simples:Consisteenpasarunvalorconstateaunavariable(a=15)
9 Contador: Consiste en usarla como un verificador del nmero de veces que se
realizaunproceso(a=a+1)
9 Acumulador:Consisteenusarlacomounsumadorenunproceso(a=a+b)
9 De trabajo: Donde puede recibir el resultado de una operacin matemtica que
involucremuchasvariables(a=c+b*2/4).

Lectura:Lalecturaconsisteenrecibirdesdeundispositivodeentrada(p.ej.elteclado)un
valor.Estaoperacinserepresentaenunpseudocodigocomosigue:

9 Leera,b
9 Dondeaybsonlasvariablesquerecibirnlosvalores

Escritura:Consisteenmandarporundispositivodesalida(p.ej.monitoroimpresora)un
resultadoomensaje.Esteprocesoserepresentaenunpseudocodigocomosigue:

9 EscribeElresultadoes:,R
9 DondeElresultadoes:esunmensajequesedeseaaparezcayResunavariable
quecontieneunvalor.

4.3 ProblemasSecuenciales

P1:Supongaqueunindividuodeseainvertirsucapitalenunbancoydeseasabercunto
dineroganaradespusdeunmessielbancopagaaraznde2%mensual.

Inicio

Leercap_inv

gan=cap_inv*0.02

Imprimirgan

Fin

60

AlgoritmoyEstructuradeDatosI

P2: Un vendedor recibe un sueldo


basemsun10%extraporcomisin
de sus ventas, el vendedor desea
saber cunto dinero obtendr por
concepto de comisiones por las tres
ventasquerealizaenelmesyeltotal
que recibir en el mes tomando en
cuentasusueldobaseycomisiones.

Inicio

Leersb,v1,v2,v3

tot_vta=v1+v2+v3

com=tot_vta*0.10

tpag=sb+com
Figura1.LenguajeC

Imprimirtpag,com

Fin

P3:Unatiendaofreceundescuentodel15%sobreeltotaldelacomprayunclientedesea
sabercuntodeberpagarfinalmenteporsucompra.

Inicio

Leertc

d=tc*0.15

tp=tcd

Imprimirtp

Fin

P4:UnalumnodeseasaberculsersucalificacinfinalenlamateriadeAlgoritmos.Dicha
calificacinsecomponedelossiguientesporcentajes:

55%delpromediodesustrescalificacionesparciales.

30%delacalificacindelexamenfinal.

15%delacalificacindeuntrabajofinal.

Inicio

Leerc1,c2,c3,ef,tf

prom=(c1+c2+c3)/3

ppar=prom*0.55

pef=ef*0.30

ptf=tf*0.15

cf=ppar+pef+ptf

Imprimircf

Fin

61

AlgoritmoyEstructuradeDatosI

P5:Unmaestrodeseasaberquporcentajedehombresyqueporcentajedemujereshay
enungrupodeestudiantes.

Inicio

Leernh,nm

ta=nh+nm

ph=nh*100/ta

pm=nm*100/ta

Imprimirph,pm

Fin

P6:Realizarunalgoritmoquecalculelaedaddeunapersona.

Inicio

Leerfnac,fact

edad=factfnac

Imprimiredad

Fin.

ProblemasPropuestos

Problema1: Dada un cantidad en soles,


obtener la equivalencia en dlares,
asumiendoquelaunidadcambiaraesun
datodesconocido.

Problema2: Leer un numero y escribir el


valorabsolutodelmismo.

Problema3: La presin, el volumen y la


temperatura de una masa de aire se
relacionanporlaformula:
Figura2.Conversionmonedas

masa=(presin*volumen)/(0.37*(temperatura+460))

Problema4: Calcular el nmero de pulsaciones que una persona debe tener por cada 10
segundosdeejercicio,silaformulaes:

num.pulsaciones=(220edad)/10

Problema5:Calcularelnuevosalariodeunobrerosiobtuvounincrementodel25%sobre
susalarioanterior.

62

AlgoritmoyEstructuradeDatosI

Problema6: En un hospital existen tres reas: Ginecologa, Pediatra, Traumatologa. El


presupuestoanualdelhospitalsereparteconformealasiguientetabla:

rea

Porcentajedelpresupuesto

Ginecologa

40%

Traumatologa

30%

Pediatra

30%

Obtenerlacantidaddedineroquerecibircadarea,paracualquiermontopresupuestal.

Problema7: El dueo de una tienda


compra un artculo a un precio
determinado. Obtener el precio en que lo
debe vender para obtener una ganancia
del30%.

Problema8: Todos los lunes, mircoles y


viernes,unapersonacorrelamismarutay
cronometra los tiempos obtenidos.
Determinar el tiempo promedio que la
persona tarda en recorrer la ruta en una
semanacualquiera.
Figura3.LenguajeC

Problema9:Trespersonasdecideninvertirsudineroparafundarunaempresa.Cadauna
deellasinvierteunacantidaddistinta.Obtenerelporcentajequecadaquieninviertecon
respectoalacantidadtotalinvertida.

Problema10: Un alumno desea saber cul ser su promedio general en las tres materias
msdifcilesquecursayculserelpromedioqueobtendrencadaunadeellas.Estas
materiasseevalancomosemuestraacontinuacin:

LacalificacindeMatemticasseobtienedelasiguientemanera:

Examen90%

Promediodetareas10%

Enestamateriasepidiuntotaldetrestareas.

LacalificacindeFsicaseobtienedelasiguientemanera:

Examen80%

Promediodetareas20%

Enestamateriasepidiuntotaldedostareas.

63

AlgoritmoyEstructuradeDatosI

LacalificacindeQumicaseobtienedelasiguientemanera:

Examen85%

Promediodetareas15%

Enestamateriasepidiunpromediodetrestareas.

EstructurasCondicionales:
Las estructuras condicionales comparan una
variablecontraotro(s)valor(es),paraqueenbase
alresultadodeestacomparacin,sesigauncurso
de accin dentro del programa. Cabe mencionar
que la comparacin se puede hacer contra otra
variable o contra una constante, segn se
necesite. Existen dos tipos bsicos, las simples y
lasmltiples.

Simples: Las estructuras condicionales simples se


les conocen como Tomas de decisin. Estas
tomasdedecisionestienenlasiguienteforma:

Si<condicin>entonces

Accin(es)

Finsi

Dobles: Las estructuras condicionales dobles


permitenelegirentredosopcionesoalternativas
posibles en funcin del cumplimiento o no de
una determinada condicin. Se representa de la
siguienteforma:

Si<condicin>entonces

Accin(es)

sino

Accin(es)

Finsi

Sentenciaifelse.Elformatoeselsiguiente:

Formato1:

if(condicin)
{sentencias}

64

Figura4.EstructurasCondicionales

AlgoritmoyEstructuradeDatosI

Formato2:
if(condicin)
{sentencias1}
else
{sentencias2}

Ejemplo:

main()
{
floatcm,pul,valor;
charunidad;
printf(Introducenmeroyunidad(p=pulg.oc=cm:);
scanf(%f%c,&valor,&unidad);
if(unidad==p)
{
cm=valor*2.54;
printf(Las%fpulgadasson%fcentmetros\n,valor,cm);
}
if(unidad==c)
{
pul=valor/2.54;
printf(Los%fcentmetrosson%fpulgadas\n,valor,pul);
}
if(unidad!=p&&unidad!=c)
printf(Noestpuestacorrectamentelaunidad\n);
}

EnCexisteunaformaabreviadadeexpresarlasentenciaifelse.Sedenominaexpresin
condicionalyempleaeloperadorcondicional?:.Elformatoeselsiguiente:

expresin1?expresin2:expresin3

El valor de la expresin total es igual al valor de la expresin 2, si expresin 1 es cierta,


mientrasquesiesfalsatomaelvalordelaexpresin3.

Sentenciaswitchcasedefault.
Elformatoeselsiguiente:

65

AlgoritmoyEstructuradeDatosI

switch(variable)
{
caseetiq1:sentencia1
caseetiq2:sentencia2
....................................
default:sentencia3
}

Ejemplo:

main()
{
floatcm,pul,valor;
charunidad;
printf(Introducenmeroyunidad(p=pulg.oc=cm:);
scanf(%f%c,&valor,&unidad);
switch(unidad)
{
casep:cm=valor*2.54;
pul=valor;
break;
casec:pul=valor/2.54;
cm=valor;
break;
default:
printf(Noestpuestacorrectamentelaunidad\n);
exit();
}
printf(\nLas%fpulgadasson%fcentmetros\n,pul,cm);
}

ProblemasCondicionales

ProblemasSelectivosSimples
Prob1:Unhombredeseasabercuntodinerosegeneraporconceptodeinteresessobrela
cantidadquetieneeninversinenelbanco.Eldecidirreinvertirlosinteresessiemprey
cuandoestosexcedana$7000,yenesecasodeseasabercuntodinerotendrfinalmente
ensucuenta.

66

AlgoritmoyEstructuradeDatosI

Inicio

Leerp_int,cap

int=cap*p_int

siint>7000entonces

capf=cap+int

finsi

Imprimircapf

fin

Prob2: Determinar si un alumno aprueba a


repruebauncurso,sabiendoqueaprobarasisu
promediodetrescalificacionesesmayoroigual
a70;repruebaencasocontrario.

Inicio

Leercalif1,calif2,calif3

prom=(calif1+calif2+calif3)/3

Siprom>=70entonces

Imprimiralumnoaprobado

sino

Imprimiralumnoreprobado

Finsi

Fin

Prob3: En un almacn se hace un 20% de


descuentoalosclientescuyacomprasuperelos
$1000 Cul ser la cantidad que pagara una
personaporsucompra?

Inicio

Leercompra

Sicompra>1000entonces

desc=compra*0.20

sino

desc=0

finsi

tot_pag=compradesc

imprimirtot_pag

fin.

67

Figura5.Ejercicioscondicionales

AlgoritmoyEstructuradeDatosI

ProblemasSelectivosDobles
Prob4: Un obrero necesita calcular su salario semanal, el cual se obtiene de la siguiente
manera:

9 Sitrabaja40horasomenosselepaga$16porhora
9 Sitrabajamsde40horasselepaga$16porcadaunadelasprimeras40horasy
$20porcadahoraextra.

Inicio

Leerht

Siht>40entonces

he=ht40

ss=he*20+40*16

sino

ss=ht*16

Finsi

Imprimirss

Fin

Prob5:Unhombredeseasabercuntodinerosegeneraporconceptodeinteresessobrela
cantidadquetieneeninversinenelbanco.Eldecidirreinvertirlosinteresessiemprey
cuandoestosexcedana$7000,yenesecasodeseasabercuntodinerotendrfinalmente
ensucuenta.

Inicio

Leerp_int,cap

int=cap*p_int

siint>7000entonces

capf=cap+int

finsi

Imprimircapf

fin

Prob6:Queleadosnmerosylosimprimaenformaascendente

Inicio

Leernum1,num2

Sinum1<num2entonces

Imprimirnum1,num2

sino

Imprimirnum2,num1

finsi

fin

68

AlgoritmoyEstructuradeDatosI

Prob7: Una persona enferma, que pesa


70 kg, se encuentra en reposo y desea
sabercuntascalorasconsumesucuerpo
durante todo el tiempo que realice una
misma actividad. Las actividades que
tiene permitido realizar son nicamente
dormir o estar sentado en reposo. Los
datosquetienesonqueestandodormido
consume 1.08 caloras por minuto y
estandosentadoenreposoconsume1.66
calorasporminuto.

Inicio

Leeract$,tiemp

Siact$=dormidoentonces
Figura6.Condicionalesdobles

cg=1.08*tiemp

sino

cg=1.66*tiemp

finsi

Imprimircg

Fin

Prob8:Hacerunalgoritmoqueimprimaelnombredeunarticulo,clave,preciooriginaly
su precio con descuento. El descuento lo hace en base a la clave, si la clave es 01 el
descuentoesdel10%ysilaclavees02eldescuentoendel20%(soloexistendosclaves).

Inicio

Leernomb,cve,prec_orig

Sicve=01entonces

prec_desc=prec_origprec_orig*0.10

sino

prec_desc=prec_origprec_orig*0.20

finsi

Imprimirnomb,cve,prec_orig,prec_desc

fin

Prob9: Hacer un algoritmo que calcule el total a pagar por la compra de camisas. Si se
comprantrescamisasomasseaplicaundescuentodel20%sobreeltotaldelacompray
sisonmenosdetrescamisasundescuentodel10%

69

AlgoritmoyEstructuradeDatosI

Inicio

Leernum_camisas,prec

tot_comp=num_camisas*prec

Sinum_camisas>=3entonces

tot_pag=tot_comptot_comp*0.20

sino

tot_pag=tot_comptot_comp*0.10

finsi

Imprimirtot_pag

fin

Prob10:Unaempresaquierehacerunacompradevariaspiezasdelamismaclaseauna
fbrica de refacciones. La empresa, dependiendo del monto total de la compra, decidir
quhacerparapagaralfabricante.

9 Sielmontototaldelacompraexcedede$500000laempresatendrlacapacidad
deinvertirdesupropiodineroun55%delmontodelacompra,pedirprestadoal
bancoun30%yelrestolopagarasolicitandouncrditoalfabricante.
9 Si el monto total de la compra no excede de $500 000 la empresa tendr
capacidad de invertir de su propio dinero un 70% y el restante 30% lo pagara
solicitandocrditoalfabricante.

Elfabricantecobraporconceptodeinteresesun20%sobrelacantidadqueselepaguea
crdito.

Inicio

Leercostopza,numpza

totcomp=costopza*numpza

Sitotcomp>500000entonces

cantinv=totcomp*0.55

prstamo=totcomp*0.30

crdito=totcomp*0.15

sino

cantinv=totcomp*0.70

crdito=totcomp*0.30

prstamo=0

finsi

int=crdito*0.20

Imprimircantinv,prstamo,crdito,int

Fin

70

AlgoritmoyEstructuradeDatosI

ProblemasPropuestos

1. Calculareltotalqueunapersonadebepagarenunallantera,sielpreciodecada
llantaesde$800sisecompranmenosde5llantasyde$700sisecompran5o
ms.

2. Enunsupermercadosehaceunapromocin,mediantelacualelclienteobtiene
un descuento dependiendo de un nmero que se escoge al azar. Si el numero
escogidoesmenorque74eldescuentoesdel15%sobreeltotaldelacompra,si
es mayor o igual a 74 el descuento es del 20%. Obtener cunto dinero se le
descuenta.

3. Calcular el nmero de pulsaciones que debe tener una persona por cada 10
segundos de ejercicio aerbico; la formula que se aplica cuando el sexo es
femeninoes:
a. num.pulsaciones=(220edad)/10
ysielsexoesmasculino:
b. num.pulsaciones=(210edad)/10

4. Una compaa de seguros est abriendo un depto. de finanzas y estableci un


programaparacaptarclientes,queconsisteenlosiguiente:Sielmontoporelque
se efecta la fianza es menor que $50 000 la cuota a pagar ser por el 3% del
monto,ysielmontoesmayorque$50000lacuotaapagarserel2%delmonto.
Laafianzadoradeseadeterminarculserlacuotaquedebepagaruncliente.

5. En una escuela la colegiatura de los alumnos se determina segn el nmero de


materiasquecursan.Elcostodetodaslasmateriaseselmismo.

Se ha establecido un programa para estimular a los alumnos, el cual consiste


enlosiguiente:sielpromedioobtenidoporunalumnoenelltimoperiodoes
mayoroigualque18,seleharundescuentodel30%sobrelacolegiaturayno
se le cobrara IGV; si el promedio obtenido es menor que 18 deber pagar la
colegiaturacompleta,lacualincluyeel18%deIGV.

Obtenercuantodebepagarunalumno.

6. Una empresa de bienes races ofrece casas de inters social, bajo las siguientes
condiciones: Si los ingresos del comprador son menores de $8000 o ms el
enganche ser del 15% del costo de la casa y el resto se distribuir en pagos
mensuales, a pagar en diez aos. Si los ingresos del comprador son menos de
$8000omselengancheserdel30%delcostodelacasayelrestosedistribuir
enpagosmensualesapagaren7aos.

71

AlgoritmoyEstructuradeDatosI

Laempresaquiereobtenercuantodebepagaruncompradorporconcepto
deengancheycuantoporcadapagoparcial.

7. ElgobiernohaestablecidoelprogramaSAR(SistemadeAhorroparaelRetiro)que
consiste en que los dueos de la empresa deben obligatoriamente depositar en
unacuentabancariaunporcentajedelsalariodelostrabajadores;adicionalmente
los trabajadores pueden solicitar a la empresa que deposite directamente una
cuota fija o un porcentaje de su salario en la cuenta del SAR, la cual le ser
descontadadesupago.

UntrabajadorquehadecididoaportarasucuentadelSARdeseasaberla
cantidadtotaldedineroqueestardepositadoaesacuentacadames,yel
pagomensualquerecibir.

8. Unapersonadeseainiciarunnegocio,paralocualpiensaverificarcuantodinerole
prestara el banco por hipotecar su casa. Tiene una cuenta bancaria, pero no
quiere disponer de ella a menos que el monto por hipotecar su casa sea muy
pequeo.Sielmontodelahipotecaesmenorque$1000000entoncesinvertir
el 50% de la inversin total y un socio invertir el otro 50%. Si el monto de la
hipotecaesde$1000000oms,entoncesinvertirelmontototaldelahipoteca
y el resto del dinero que se necesite para cubrir la inversin total se repartir a
partesigualesentreelsocioyel.

9. ElgobiernodelPerdeseareforestarunbosquequemidedeterminadonmero
dehectreas.Silasuperficiedelterrenoexcedea1millndemetroscuadrados,
entoncesdecidirsembrardelasiguientemanera:

Porcentajedelasuperficiedelbosque
Tipoderbol
a. 70%

pino
b. 20%

oyamel
c. 10%

cedro

Si la superficie del terreno es menor o igual a un milln de metros cuadrados,


entoncesdecidirsembrardelasiguientemanera:

Porcentajedelasuperficiedelbosque
Tipoderbol
d. 50%

pino
e. 30%

oyamel
f. 20%

cedro

El gobierno desea saber el nmero de pinos, oyameles y cedros que tendr que
sembrarenelbosque,sisesabequeen10metroscuadradoscaben8pinos,en15

72

AlgoritmoyEstructuradeDatosI

metroscuadradoscaben15oyamelesyen18metroscuadradoscaben10cedros.
Tambinsesabequeunahectreaequivalea10milmetroscuadrados.

10. Unafbricahasidosometidaaunprogramadecontroldecontaminacinparalo
cual se efecta una revisin de los puntos IMECA generados por la fbrica. El
programa de control de contaminacin consiste en medir los puntos IMECA que
emitelafabricaencincodasdeunasemanaysielpromedioessuperioralos170
puntosentoncestendrlasancindepararsuproduccinporunasemanayuna
multadel50%delasgananciasdiariascuandonosedetienelaproduccin.Siel
promedio obtenido de puntos IMECA es de 170 o menor entonces no tendr ni
sancin ni multa. El dueo de la fbrica desea saber cunto dinero perder
despusdesersometidoalarevisin.

11. Una persona se encuentra con un problema de comprar un automvil o un


terreno, los cuales cuestan exactamente lo mismo. Sabe que mientras el
automvilsedevala,conelterrenosucedelocontrario.Estapersonacomprara
el automvil si al cabo de tres aos la devaluacin de este no es mayor que la
mitaddelincrementodelvalordelterreno.Aydaleaestapersonaadeterminarsi
debeonocomprarelautomvil.

ProblemasSelectivosCompuestos

PP1: Leer 2 nmeros; si son iguales que los multiplique, si el primero es mayor que el
segundoquelosresteysinoquelossume.

Inicio

Leernum1,num2

sinum1=num2entonces

resul=num1*num2

sino

sinum1>num2entonces

resul=num1num2

sino

resul=num1+num2

finsi

finsi

fin

73

AlgoritmoyEstructuradeDatosI

PP2:Leertresnmerosdiferenteseimprimirelnmeromayordelostres.

Inicio

Leernum1,num2,num3

Si(num1>num2)and(num1>num3)entonces

mayor=num1

sino

Si(num2>num1)and(num2>num3)entonces

mayor=num2

sino

mayor=num3

finsi

finsi

Imprimirmayor

fin

PP3: Determinar la cantidad de dinero que recibir un trabajador por concepto de las
horas extras trabajadas en una empresa, sabiendo que cuando las horas de trabajo
excedende40,elrestoseconsideranhorasextrasyqueestassepaganaldobledeuna
hora normal cuando no exceden de 8; si las horas extras exceden de 8 se pagan las
primeras8aldobledeloquesepaganlashorasnormalesyelrestoaltriple.

Inicio

Leerht,pph

Siht<=40entonces

tp=ht*pph

sino

he=ht40

Sihe<=8entonces

pe=he*pph*2

sino

pd=8*pph*2

pt=(he8)*pph*3

pe=pd+pt

finsi

tp=40*pph+pe

finsi

Imprimirtp

fin

74

AlgoritmoyEstructuradeDatosI

PP4:Calcularlautilidadqueuntrabajadorrecibeenelrepartoanualdeutilidadessieste
seleasignacomounporcentajedesusalariomensualquedependedesuantigedadenla
empresadeacuerdoconlasiguientetabla:

Tiempo

Utilidad

Menosde1ao

5%delsalario

1aoomsymenosde2aos

7%delsalario

2aosomsymenosde5aos

10%delsalario

5aosomsymenosde10aos

15%delsalario

10aosoms

20%delsalario

Inicio

Leersm,antig

Siantig<1entonces

util=sm*0.05

sino

Si(antig>=1)and(antig<2)entonces

util=sm*0.07

sino

Si(antig>=2)and(antig<5)entonces

util=sm*0.10

sino

Si(antig>=5)and(antig<10)entonces

util=sm*0.15

sino

util=sm*0.20

finsi

finsi

finsi

finsi

Imprimirutil

fin

PP5: En una tienda de descuento se efecta una promocin en la cual se hace un


descuentosobreelvalordelacompratotalsegnelcolordelabolitaqueelclientesaque
alpagarencaja.Silabolitaesdecolorblanconoselehardescuentoalguno,siesverde
se le har un 10% de descuento, si es amarilla un 25%, si es azul un 50% y si es roja un
100%.Determinarlacantidadfinalqueelclientedeberpagarporsucompra.sesabeque
solohaybolitasdeloscoloresmencionados.

75

AlgoritmoyEstructuradeDatosI

Inicio

leertc,b$

sib$=blancaentonces

d=0

sino

sib$=verdeentonces

d=tc*0.10

sino

sib$=amarillaentonces

d=tc*0.25

sino

sib$=azulentonces

d=tc*0.50

sino

d=tc
finsi
finsi
finsi
finsi
fin

PP6:ElIMSSrequiereclasificaralaspersonasquesejubilaranenelaode1997.Existen
tres tipos de jubilaciones: por edad, por antigedad joven y por antigedad adulta. Las
personasadscritasalajubilacinporedaddebentener60aosomsyunaantigedaden
suempleodemenosde25aos. Las personas adscritas a la jubilacin por antigedad
jovendebentenermenosde60aosyunaantigedadensuempleode25aosoms.

Laspersonasadscritasalajubilacinporantigedadadultadebentener60aosomsy
unaantigedadensuempleode25aosoms.

Determinarenqutipodejubilacin,quedaraadscritaunapersona.

Inicio

leeredad,ant

siedad>=60andant<25entonces

imprimirlajubilacinesporedad

sino

siedad>=60andant>25entonces

imprimirlajubilacinesporedadadulta

sino

siedad<60andant>25entonces

imprimirlajubilacinesporantigedadjoven

76

AlgoritmoyEstructuradeDatosI

sino

imprimirnotieneporquejubilarse

finsi

finsi

finsi

fin

ProblemasPropuestos

Prob1:Enunafbricadecomputadorasseplaneaofreceralosclientesundescuentoque
dependerdelnmerodecomputadorasquecompre.Silascomputadorassonmenosde
cinco se les dar un 10% de descuento sobre el total de la compra; si el nmero de
computadoras es mayor o igual a cinco pero menos de diez se le otorga un 20% de
descuento; y si son 10 o ms se les da un 40% de descuento. El precio de cada
computadoraesde$11,000

Prob2:EnunallanterasehaestablecidounapromocindelasllantasmarcaPonchadas,
dichapromocinconsisteenlosiguiente:

9 Sisecompranmenosdecincollantaselprecioesde$300cadauna,de$250sise
comprandecincoa10yde$200sisecompranmsde10.
9 Obtenerlacantidaddedineroqueunapersonatienequepagarporcadaunade
lasllantasquecompraylaquetienequepagarporeltotaldelacompra.

Prob3:EnunjuegodepreguntasalasqueserespondeSioNoganaquienresponda
correctamente las tres preguntas. Si se responde mal a cualquiera de ellas ya no se
preguntalasiguienteyterminaeljuego.Laspreguntasson:

1.ColondescubriAmrica?

2.LaindependenciadePerfueenelao1866?

3.TheDoorsfueungrupoderockAmericano?

Prob4:Unproveedordeestreosofreceundescuentodel10%sobreelpreciosinIGV,de
algn aparato si este cuesta $2000 o ms. Adems, independientemente de esto, ofrece
un5%dedescuentosilamarcaesPONY.Determinarcuntopagara,conIGVincluido,
unclientecualquieraporlacompradesuartefacto.

77

AlgoritmoyEstructuradeDatosI

Prob5:Unafruteraofrecelasmanzanascondescuentosegnlasiguientetabla:

NUM.DEKILOSCOMPRADOS
%DESCUENTO

02

0%

2.015

10%

5.0110

15%

10.01enadelante

20%

Determinarcuntopagaraunapersonaquecompremanzanasesesafrutera.

Prob6:Eldueodeunaempresadeseaplanificarlasdecisionesfinancierasquetomaraen
elsiguienteao.Lamaneradeplanificarlasdependedelosiguiente:

Si actualmente su capital se encuentra con saldo negativo, pedir un prstamo bancario


paraquesunuevosaldoseade$10000.Sisucapitaltieneactualmenteunsaldopositivo
pedirunprstamobancarioparatenerunnuevosaldode$20000,perosisucapitaltiene
actualmenteunsaldosuperioralos$20000nopedirningnprstamo.

Posteriormenterepartirsupresupuestodelasiguientemanera.

$5000paraequipodecomputo

$2000paramobiliario

yelrestolamitadserparalacompradeinsumosylaotraparaotorgarincentivos

alpersonal.

Desplegar que cantidades se destinaran para la compra de insumos e incentivos al


personaly,encasodequefueranecesario,acuntoascenderalacantidadquesepedira
albanco.

Prob7: Tomando como base los resultados obtenidos en un laboratorio de anlisis


clnicos, un medico determina si una persona tiene anemia o no, lo cual depende de su
niveldehemoglobinaenlasangre,desuedadydesusexo.Sielniveldehemoglobinaque
tieneunapersonaesmenorqueelrangoquelecorresponde,sedeterminasuresultado
comopositivoyencasocontrariocomonegativo.Latablaenlaqueelmdicosebasapara
obtenerelresultadoeslasiguiente:

EDAD

NIVELHEMOGLOBINA

01mes

1326g%

>1y<=6meses

1018g%

>6y<=12meses

1115g%

>1y<=5aos

11.515g%

78

AlgoritmoyEstructuradeDatosI

>5y<=10aos

12.615.5g%

>10y<=15aos

1315.5g%

mujeres>15aos

1216g%

hombres>15aos

1418g%

Prob8:Unainstitucineducativaestableciunprogramaparaestimularalosalumnoscon
buenrendimientoacadmicoyqueconsisteenlosiguiente:

9 Sielpromedioesde19omsyelalumnoesdepreparatoria,entoncesestepodr
cursar55unidadesyseleharun25%dedescuento.
9 Si el promedio es mayor o igual a 18 pero menor que 19 y el alumno es de
preparatoria, entonces este podr cursar 50 unidades y se le har un 10% de
descuento.
9 Sielpromedioesmayorque14ymenorque18yelalumnoesdepreparatoria,
estepodrcursar50unidadesynotendrningndescuento.
9 Sielpromedioesde14omenor,elnumerodemateriasreprobadasesde0a3y
el alumno es de preparatoria, entonces podr cursar 45 unidades y no tendr
descuento.
9 Sielpromedioesde14omenor,elnumerodemateriasreprobadasesde4oms
y el alumno es de preparatoria, entonces podr cursar 40 unidades y no tendr
ningndescuento.
9 Sielpromedioesmayoroiguala19yelalumnoesdeprofesional,entoncespodr
cursar55unidadesyseleharun20%dedescuento.
9 Si el promedio es menor de 19 y el alumno es de profesional, entonces podr
cursar55unidadesynotendrdescuento.

Obtener el total que tendr que pagar un alumno si la colegiatura para alumnos de
profesionalesde$300porcadacincounidadesyparaalumnosdepreparatoriaesde$180
porcadacincounidades.

Prob9:Queleatresnmerosdiferentesydetermineelnmeromediodelconjuntodelos
tresnmeros(elnmeromedioesaquelnmeroquenoesnimayor,nimenor).

EstructurasCclicas
Sellamanproblemasrepetitivosocclicosaaquellosencuyasolucinesnecesarioutilizar
unmismoconjuntodeaccionesquesepuedanejecutarunacantidadespecficadeveces.
Estacantidadpuedeser fija(previamentedeterminadapor el programador) opuedeser
variable(estarenfuncindealgndatodentrodelprograma).Losciclosseclasificanen:

79

AlgoritmoyEstructuradeDatosI

Buclefor.Elformatoeselsiguiente:

for(inicio;condicin;incremento)
{
sentencias
}

Buclewhile.Elformatoeselsiguiente:

while(condicin)
{
sentencias
}

Bucledowhile.Elformatoeselsiguiente:

do
{
sentencias
}
while(condicin);

Ejemplo:

main()
{
longacum=1;
inti,n;
do
{
printf(Introducenmeropositivo:);
scanf(%d,&n);
}
while(n<0);
for(i=n;i>1;i)
acum*=i;
printf(\nElfactoriales%ld,acum);
}

80

AlgoritmoyEstructuradeDatosI

Problemas(Hacerpara)

Ejercicio1:Calcularelpromediodeunalumnoquetiene7calificacionesenlamateriade
DiseoEstructuradodeAlgoritmos

Inicio

Sum=0

LeerNom

Hacerparac=1a7

Leercalif

Sum=sum+calif

Finpara

prom=sum/7

Imprimirprom

Fin.

Ejercicio2:Leer10nmerosyobtenersucuboysucuarta.

Inicio

Hacerparan=1a10

Leernum

cubo=num*num*num

cuarta=cubo*num

Imprimircubo,cuarta

Finpara

Fin.

Ejercicio3:Leer10nmeroseimprimirsolamentelosnmerospositivos

Inicio

Hacerparan=1a10

Leernum

Sinum>0entonces

Imprimirnum

finsi

Finpara

Fin.

81

AlgoritmoyEstructuradeDatosI

Ejercicio4:Leer20nmeroseimprimircuantossonpositivos,cuantosnegativosycuantos
neutros.

Inicio

cn=0

cp=0

cneg=0

Hacerparax=1a20

Leernum

Sinnum=0entonces

cn=cn+1

sino

Sinum>0entonces

cp=cp+1

sino

cneg=cneg+1

Finsi

Finsi

Finpara

Imprimircn,cp,cneg

Fin.

Ejercicio 5: Leer 15 nmeros negativos y convertirlos a positivos e imprimir dichos


nmeros.

Inicio

Hacerparax=1a15

Leernum

pos=num*1

Imprimirnum,pos

Finpara

Fin.

Ejercicio6:Supongaquesetieneunconjuntodecalificacionesdeungrupode40alumnos.
Realizarunalgoritmoparacalcularlacalificacinmediaylacalificacinmsbajadetodoel
grupo.

82

AlgoritmoyEstructuradeDatosI

Inicio

sum=0

baja=9999

Hacerparaa=1a40

Leercalif

sum=sum+calif

Sicalif<bajaentonces

baja=calif

finsi

Finpara

media=sum/2

Imprimirmedia,baja

fin

Ejercicio7:Calculareimprimirlatablademultiplicardeunnmerocualquiera.Imprimirel
multiplicando,elmultiplicadoryelproducto.

Inicio

Leernum

HacerparaX=1a10

resul=num*x

Imprimirnum,*,X,=,resul

Finpara

fin.

Ejercicio8:Simularelcomportamientodeunrelojdigital,imprimiendolahora,minutosy
segundosdeundadesdelas0:00:00horashastalas23:59:59horas

Inicio

Hacerparah=1a23

Hacerparam=1a59

Hacerparas=1a59

Imprimirh,m,s

Finpara

Finpara

Finpara

fin.

83

AlgoritmoyEstructuradeDatosI

ProblemasPropuestos

Prop1: Una persona debe realizar un muestreo con 50 personas para determinar el
promedio de peso de los nios, jvenes, adultos y viejos que existen en su zona
habitacional.Sedeterminanlascategorasconbaseenlasig,tabla:

CATEGORIA

EDAD

Nios

012

Jvenes

1329

Adultos

3059

Viejos

60enadelante

Prop2:Alcerrarunexpendiodenaranjas,15clientesqueaunnohanpagadorecibirnun
15% de descuento si compran ms de 10 kilos. Determinar cunto pagara cada cliente y
cuantopercibirlatiendaporesascompras.

Prop3:Enuncentrodeverificacindeautomvilessedeseasaberelpromediodepuntos
contaminantesdelosprimeros25automvilesquelleguen.Asimismosedeseasaberlos
puntoscontaminantesdelcarroquemenoscontaminoydelquemscontamino.

Prop4:Unentrenadorlehapropuestoaunatletarecorrerunarutadecincokilmetros
durante10das,paradeterminarsiesaptoparalapruebade5Kilmetrosodebebuscar
otraespecialidad.Paraconsiderarloaptodebecumplirporlomenosunadelassiguientes
condiciones:

9 Queenningunadelaspruebashagauntiempomayora16minutos.
9 Quealmenosenunadelaspruebasrealiceuntiempomayora16minutos.
9 Quesupromediodetiemposseamenoroiguala15minutos.

Prop5: Un Zologo pretende determinar el porcentaje de animales que hay en las


siguientestrescategorasdeedades:de0a1ao,demsde1aoymenosde3yde3o
msaos.Elzoolgicotodavanoestsegurodelanimalquevaaestudiar.Sisedecide
porelefantessolotomaraunamuestrade20deellos;sisedecideporlasjirafas,tomara
15muestras,ysisonchimpancstomara40.
CiclosconunNmeroIndeterminadodeIteraciones
(HacerMientras,RepetirHasta)

Son aquellos en que el nmero de iteraciones no se conoce con exactitud, ya que esta
dadoenfuncindeundatodentrodelprograma.

84

AlgoritmoyEstructuradeDatosI

HacerMientras:
Estaesuna estructuraquerepetirunproceso duranteNveces, donde Npuede ser
fijo o variable. Para esto, la instruccin se vale de una condicin que es la que debe
cumplirseparaquesesigaejecutando.Cuandolacondicinyanosecumple,entoncesya
noseejecutaelproceso.Laformadeestaestructuraeslasiguiente:

Figura7.Hacermientras

Ejemplo:

#include<stdio.h>
intmain(){
inti=1;
do{
printf("i=%i\n",i);
i++;
}while(i<=3);
}

Problemas(HacerMientras)

Ejemplo 1: Una compaa de seguros tiene contratados a n vendedores. Cada uno hace
tresventasalasemana.Supolticadepagosesqueunvendedorrecibeunsueldobase,y
un10%extraporcomisionesdesusventas.Elgerentedesucompaadeseasabercunto
dinero obtendr en la semana cada vendedor por concepto de comisiones por las tres
ventasrealizadas,ycuantotomandoencuentasusueldobaseysuscomisiones.

Ejemplo2:Enunaempresaserequierecalcularelsalariosemanaldecadaunodelosn
obrerosquelaboranenella.Elsalarioseobtienedelasiguienteforma:

85

AlgoritmoyEstructuradeDatosI

Sielobrerotrabaja40horasomenosselepaga$20porhora

Sitrabajamsde40horasselepaga$20porcadaunadelasprimeras40horasy$25
porcadahoraextra.

Ejemplo3:Determinarcuntoshombresycuantasmujeresseencuentranenungrupode
npersonas,suponiendoquelosdatossonextradosalumnoporalumno.

Ejemplo4:ElDepto.deSeguridadPublicayTransitodelD.F.deseasaber,delosnautos
que entran a la ciudad de Mxico, cuantos entran con calcomana de cada color.
Conociendoelltimodgitodelaplacadecadaautomvilsepuededeterminarelcolorde
lacalcomanautilizandolasiguienterelacin:


DGITO
COLOR

1o2

amarilla

3o4

rosa

5o6

roja

7o8

verde

9o0

azul

Ejemplo5:Obtenerelpromediodecalificacionesdeungrupodenalumnos.

Ejemplo6:Unapersonadeseainvertirsudineroenunbanco,elcualleotorgaun2%de
inters.Culserlacantidaddedineroqueestapersonatendralcabodeunaosila
gananciadecadamesesreinvertida?

Ejemplo 7: Calcular el promedio de edades de hombres, mujeres y de todo un grupo de


alumnos.

Ejemplo8:Encontrarelmenorvalordeunconjuntodennmerosdados.

Ejemplo9:Encontrarelmayorvalordeunconjuntodennmerosdados.

Ejemplo 10: En un supermercado un cajero captura los precios de los artculos que los
clientescompraneindicaacadaclientecualeselmontodeloquedebenpagar.Alfinal

86

AlgoritmoyEstructuradeDatosI

deldaleindicaasusupervisorcuantofueloquecobroentotalatodoslosclientesque
pasaronporsucaja.

Ejemplo 11: Cinco miembros de un club contra la obesidad desean saber cunto han
bajadoosubidodepesodesdelaltimavezquesereunieron.Paraestosedeberealizar
unritualdepesajeendondecadaunosepesaendiezbsculasdistintasparaastenerel
promediomsexactodesupeso.Siexistediferenciapositivaentreestepromediodepeso
y el peso de la ltima vez que se reunieron, significa que subieron de peso. Pero si la
diferenciaesnegativa,significaquebajaron.Loqueelproblemarequiereesqueporcada
personaseimprimaunletreroquediga:SUBIOoBAJOylacantidaddekilosquesubi
obajodepeso.

Ejemplo 12: Se desea obtener el promedio de g grupos que estn en un mismo ao


escolar;siendoquecadagrupopuedetenernalumnosquecadaalumnopuedellevarm
materias y que en todas las materias se promedian tres calificaciones para obtener el
promedio de la materia. Lo que se desea desplegar es el promedio de los grupos, el
promediodecadagrupoyelpromediodecadaalumno.

RepetirHasta
Esta es una estructura similar en algunas
caractersticas,alaanterior.Repiteunprocesouna
cantidad de veces, pero a diferencia del Hacer
Mientras, el RepetirHasta lo hace hasta que la
condicin se cumple y no mientras, como en el
HacerMientras. Por otra parte, esta estructura
permite realizar el proceso cuando menos una vez,
ya que la condicin se evala al final del proceso,
mientras que en el HacerMientras puede ser que
nunca llegue a entrar si la condicin no se cumple
desdeunprincipio.Laformadeestaestructuraesla
siguiente:
Figura8.Repetirhasta

Ejemplo1: En una tienda de descuento las personas que van a pagar el importe de su
compra llegan a la caja y sacan una bolita de color, que les dir que descuento tendrn
sobreeltotaldesucompra.Determinarlacantidadquepagaracadaclientedesdequela
tiendaabrehastaquecierra.Sesabequesielcolordelabolitaesrojaelclienteobtendr
un40%dedescuento;siesamarillaun25%ysiesblancanoobtendrdescuento.

87

AlgoritmoyEstructuradeDatosI

Ejemplo2:Enunsupermercadounaamadecasaponeensucarritolosartculosqueva
tomandodelosestantes.Laseoraquiereasegurarsedequeelcajerolecobrebienloque
ellahacomprado,porloquecadavezquetomaunarticuloanotasupreciojuntoconla
cantidad de artculos iguales que ha tomado y determina cunto dinero gastara en ese
artculo;aestolesumaloqueiragastandoenlosdemsartculos,hastaquedecidequeya
tomotodoloquenecesitaba.Aydaleaestaseoraaobtenereltotaldesuscompras.

Ejemplo3:Unteatrootorgadescuentossegnlaedaddelcliente.Determinarlacantidad
dedineroqueelteatrodejadepercibirporcadaunadelascategoras.Tomarencuenta
quelosniosmenoresde5aosnopuedenentraralteatroyqueexisteunprecionico
enlosasientos.Losdescuentossehacentomandoencuentaelsiguientecuadro:

Edad

Descuento
Categora1

514

35%
Categora2

1519

25%
Categora3

2045

10%
Categora4

4665

25%
Categora5

66enadelante 35%

88

AlgoritmoyEstructuradeDatosI

CAPTULOV

ProgramacinModular

Lamodularizacin,esunatcnicausadaporlosprogramadoresparahacersuscdigosms
cortos,yaqueconsisteenreducirungranproblemacomplejo,enpequeosproblemitas
mssencillos,concentrndoseenlasolucinporseparado,decadaunodeellos.

En C, se conocen como funciones aquellos trozos de cdigos utilizados para dividir un


programaconelobjetivoque,cadabloquerealiceunatareadeterminada.

Enlasfuncionesjueganunpapelmuyimportelasvariables,yaquecomosehadichoestas
puedenserlocalesoglobales.

Una estrategia muy utilizada para la resolucin de problemas complejos con la


computadora, es como lo he venido comentando, la divisin del problema en otros
problemas ms pequeos o sub problemas. Estos sub problemas se implementan
mediantemdulososubprogramas.

Los subprogramas son una herramienta importante para el desarrollo de algoritmos y


programas de modo que normalmente un proyecto de programacin est compuesto
generalmentedeunprogramaprincipalyunconjuntodesubprogramasconlasllamadasa
losmismosdentrodelprogramaprincipal.

Lossubprogramasseclasificanen:procedimientosyfunciones.

5.1 ElDiseoDescendente:Subprogramas
Unodelosmtodosfundamentalespararesolverunproblemaesdividirloenproblemas
mspequeos,llamadossubproblemas,enreferenciassucesivas.

Estosproblemasasuvezpuedenserdivididosrepetidamenteenproblemasmspequeos
hastaquelosproblemasmspequeospuedansersolucionados.

Esta tcnica de dividir el problema principal en sub problemas se denomina


frecuentementedivideyvencers.Elmtododediseosedenominadiseodescendente,
debido a que se comienza en la parte superior con un problema general y se disean
solucionesespecficasasussubproblemas.

El problema principal se resuelve con el programa principal (tambin llamado conductor


delprograma),ylossubproblemas(mdulos)mediantesubprogramas:procedimientosy
funciones.

89

AlgoritmoyEstructuradeDatosI

Unsubprogramarealizaunatareaconcretaquesedescribeconunaseriedeinstrucciones.

Veamosunejemplo:
Leerelradiodeuncrculoycalculareimprimirsusuperficieylongitud.

Anlisis
EspecificacionesdeEntrada
Radio:Real
EspecificacionesdeSalida
Superficie:Real
Longitud:Real

Algoritmo
1. Leerelvalordelradio
2. CalcularlaSuperficie
3. CalcularlaLongitud
4. Visualizarlosvaloresdelasuperficieylalongitud

RefinamientodelAlgoritmo
1. Leerelvalordelradio
2. Calcularlasuperficie
1. pi<3.141592(constantepi)
2. S<pi*Radio*Radio
3. Calcularlalongitud
1. pi<3.141592
2. L<2*pi*Radio
4. Visualizarlosvaloresdelasuperficieylalongitud

5.2 ElDiseoModular
Lossubproblemasomdulossediseanconsubprogramas,queasuvezseclasificanen
procedimientosyfunciones.

Los procedimientos y las funciones son unidades de programas diseadas para ejecutar
unatareaespecfica.Porejemplo,losprocedimientospredefinidos,printf()yscanf(),estn
diseadospararealizaroperacionesdeentradaysalida.

Elprocesodedescomposicindeunproblemaenmdulosseconocecomomodulacinya
laprogramacinrelativaaellosprogramacinmodular.

Losprocedimientosyfuncionessonsimilares,aunquepresentannotablesdiferenciasentre
ellos:

9 Las funciones normalmente, devuelven un solo valor a la unidad de programa


(programaprincipaluotrosubprograma)quelareferenciaolallama.

90

AlgoritmoyEstructuradeDatosI

9 Losprocedimientospuedendevolvercero,unoovariosvalores.Enelcasodeno
devolver ningn valor, realizan alguna tarea tal como alguna operacin de
entrada/salida.

A un nombre de procedimiento no se puede asignar un valor, y por consiguiente ningn


tipoestasociadoconunnombredeprocedimiento.

Una funcin se referencia utilizando su nombre en una instruccin (de asignacin o


expresin matemtica), mientras que un procedimiento se referencia por una llamada o
invocacinalmismo.

TransferenciadeInformacina/desdeMdulos

LosParmetros
Losmdulososubprogramassirvenparaejecutartareasconcretas,peronoutilizanningn
tipodedatodelrestodelprograma.Sinembargo,unadelascaractersticasimportantesy
diferenciadoradelossubprogramaseslaposibilidad decomunicacin entreel programa
principal y los subprogramas (o entre los subprogramas). Esta comunicacin se realiza a
travsdeunalistadeparmetros

Un parmetro es un mtodo para pasar informacin (valores a variables) del programa


principalaunmdulooviceversa.

Aspues,losmdulosseclasificanen:

Mdulos sin parmetros (no existe comunicacin entre el programa principal y los
mdulosoentremdulos).

Mdulosconparmetros(existecomunicacinentreelprogramaprincipalylosmdulos,
yentreellos).

Un parmetro es prcticamente, una variable cuyo valor debe ser o bien proporcionado
por el programa principal al mdulo o ser devuelto desde el mdulo hasta el programa
principal.Porconsiguientehaydostiposdeparmetros:entradaysalida.

Los parmetros de entrada son aquellos cuyos valores deben ser proporcionados por el
programa principal, y los de salida son aquellos cuyos valores se calcularn en el
subprograma o mdulo y se deben devolver al programa principal para su proceso
posterior.

Las sentencias llamadas a subprogramas constan de dos partes: un nombre de


subprogramayunalistadeparmetrosllamadosactuales.

91

AlgoritmoyEstructuradeDatosI

nombreSubprograma(pa1,pa2,...)

Enladeclaracindeunsubprograma,cuandoseincluyenparmetros,estossedenominan
parmetros formales o ficticios. Ellos sirven para contener los valores de parmetros
actualescuandosellamaalsubprograma.

Procedimientoofuncinnombresubprograma(pf1,pf2,...)

Losparmetrosactualesenlallamadaalsubprogramadebencoincidirennmero,ordeny
tipoconlosparmetrosficticiosdeladeclaracindelsubprograma.Esdecir,debeexistir
unacorrespondenciaentreparmetrosactualesyficticios.

ParmetrosValoryParmetrosVariable
Existen dos tipos de parmetros, como se indico anteriormente, que nos ayudan a
transferir/recibir informacin de otros subprogramas, o del programa principal, a saber:
parmetrosdeentrada(porvalor)yparmetrosdesalidaodeentrada/salida(variable).

ParmetrosValor
Son parmetros unidireccionales que se utilizan para proporcionar informacin a un
subprograma,peronopuedendevolvervalores,alprogramallamador.

Se les llama parmetros de entrada, ya que en la llamada al subprograma el valor del


parmetroactualsepasaalavariablequerepresentaalavariableactual.Estevalorpuede
ser modificado dentro del subprograma pero el valor modificado no es devuelto al
programaosubprogramallamador.

ParmetrosVariable
Se utilizan tanto para recibir como para transmitir valores entre el subprograma y el
programallamador.Estepuedeactuarcomoparmetrodesalidaodeentrada/salida.

Nota:
Enlanotacindepseudocdigorepresentaraestosparmetrosanteponiendolapalabra
varantesdelidentificador;).

Este algoritmo ilustra la diferencia entre parmetros valor y parmetros variable, y la


correspondenciaentreellos.
AlgoritmoEjemplo_Parametros
Variables
A,B,C:enteros
procedimientoimprimir(D,E,F:enteros)
inicio
escribir("A=",D,"B=",E,"C=",F)
fin_imprimir

92

AlgoritmoyEstructuradeDatosI

procedimientopasar(D,E:entero;varF:entero)
inicio
escribir("Entradaalprocedimientopasar:")
imprimir(D,E,F)
F<D*F
escribir("Salidadelprocedimientopasar:")
imprimir(D,E,F)
fin_pasar
inicio
A<2
B<3
C<4
escribir("Antesdellamaralprocedimientopasar")
imprimir(A,B,C)
pasar(A,B,C)
escribir("Despuesdelretornodelprocedimientopasar")
imprimir(A,B,C)
fin

Lasalidadelprogramaenpantallaseralasiguiente:

Antesdellamaralprocedimientopasar
A=2,B=3,C=4
Entradaalprocedimientopasar
A=2,B=3,C=4
Salidadelprocedimientopasar
A=2,B=3,C=6
Despuesdelretornodelprocedimientopasar
A=2,B=3,C=6

VariablesLocalesyVariablesGlobales
Lasvariablesutilizadasenunprogramaconsubprogramaspuedenserdedostipos:locales
yglobales.

VariablesLocales
Unavariablelocalesunavariablequeestdeclaradadentrodeunsubprogramaysedice
que es local al subprograma. Una variable local solo est disponible durante el
funcionamiento del subprograma, al terminar su funcin el subprograma y regresar al
programallamador,sepierdeelvalorqueseencontrabaguardadoenlavariablelocal.

93

AlgoritmoyEstructuradeDatosI

VariablesGlobales
Las variables declaradas en el programa principal se denominan variables globales. Al
contrario que las variables locales cuyos valores se pueden utilizar solo dentro del
subprogramaenquefuerondeclaradas,lasvariablesglobalessepuedenutilizarentodoel
programaprincipalyentodoslossubprogramas,dondesehagareferenciaalidentificador
deestavariable.

mbitodeunIdentificador
Lamayoradelosprogramastienenunaestructuratiporbol,elprogramaprincipalesla
razydeestependenmuchasramas(procedimientosyfunciones).

Lossubprogramasenlosqueunidentificadorpuedeserutilizadoseconocencomombito
oalcancedelidentificador,dichodeotromodo,esenestaseccindondeelidentificador
esvlido.

Reglasdembito
a. El mbito de un identificador es el dominio en que est declarado. Por
consiguiente un identificador declarado en un bloque P puede ser usado en el
subprogramaPyentodoslossubprogramasllamadosenelsubprogramaP.
b. Si un identificador j declarado en el procedimiento P se redeclara en algn
subprograma interno Q invocado en P, entonces el subprograma Q y todas sus
invocacionesaotrossubprogramasseexcluyendelmbitodejdeclaradoenP.

ProcedimientosyFunciones
Los procedimientos y funciones son la base principal en la programacin modular,
estudiaremosaqusufuncionamientoysusintaxis.

Procedimientos
Unprocedimientoesunsubprogramaquerealizaunatareaespecfica.Puederecibircero
omsvaloresdelprogramaquellamaydevolverceroomsvaloresadichoprograma.

Un procedimiento est compuesto de un grupo de sentencias a las que se asigna un


nombre (identificador) y constituye una unidad de programa. La tarea determinada al
procedimientoseejecutasiemprequeseencuentraelnombredelprocedimiento.

Ladeclaracinindicalasinstruccionesaejecutar.Susintaxises:

procedimientonombreproc(listadepar)
declaracioneslocales
inicio
cuerpodelprocedimiento(instrucciones)
fin.

94

AlgoritmoyEstructuradeDatosI

Un procedimiento es llamado en un programa o dentro de otro procedimiento


directamenteporsunombreencualquieradelasdosformas:

nombreproc
nombreproc(listapar.actuales)

Funciones
Unafuncinesunsubprogramaquerecibecomoargumentosoparmetros,datosdetipos
numrico o no numrico, y devuelve un nico resultado. Esta caracterstica le diferencia
esencialmentedeunprocedimiento.

Suformatoeselsiguiente:

funcionnombrefuncion(p1,p2,...):tipoadevolver
declaracioneslocales
inicio
cuerpodelafuncin
nombrefuncion<valoradevolver
fin

Unafuncinesllamadapormediodesunombre,enunasentenciadeasignacinoenuna
sentenciadesalida.

Sepuedellamaraunafuncinencualquieradelassiguientesformas:

nombrefunciononombrefuncion(par)
idVar<nombrefuncion.

Un problema complejo se puede dividir en pequeos subproblemas ms sencillos. Estos


subproblemas se conocen como Mdulos y su complementacin en un lenguaje se
llamasubprograma(procedimientosyfunciones).

Un subprograma realiza las mismas acciones que un programa, sin embargo, un


subprogramaloutilizasolamenteunprogramaparaunpropsitoespecifico.

Un subprograma recibe datos de un programa y le devuelve resultados (el programa


llama o invoca al subprograma, este ejecuta una tarea especfica y devuelve el
controlalprogramaquelollamo).

95

AlgoritmoyEstructuradeDatosI

Funciones

TiposdeMdulos

Procedimientos

Funcin: Una funcin en matemticas, es una operacin que toma un o mas valores
(argumentos)ydevuelveunresultado(valordelafuncinparalosargumentosdados).Por
ejemplo:

F(X)=X/(1+X2)

Donde:
F..Nombredelafuncin
X.Eselargumento(tambinconocidocomoparmetroformal)

Definicindefunciones:Unadefinicindefuncinsepresentadelasiguientemanera:

Funcinnombre_funcion(p1,p2,,pn)

Inicio

Bloquedeinstrucciones

Fin

Donde:
Funcin Eslapalabraclavequenosindicaunadefinicindefuncin.
Nombre_funcion.Eselidentificadorconelcualsereconocealafuncinenelcuerpodel
algoritmoprincipal.
P1,p2,,pn... Eselgrupodeparmetrosquedefinealafuncin.

Llamadoaunafuncin
Cuandodefinimosunafuncinsololeindicamosalalgoritmoqueestafuncinexiste,pero
unadefinicindefuncinnoimplicalarealizacindelasinstruccionesquelaconstituyen.
Parahacerusodeunafuncin,elalgoritmoprincipalladebellamar.Porejemplo:

FuncinF(X)

Inicio

F=X/(1+X^2)

Fin

Inicio

ImprimirEsteeselalgoritmoprincipal

LeerN

96

AlgoritmoyEstructuradeDatosI

R=F(N)
llamadodelafuncin

ImprimirElresultadodelafuncines:,R

Fin

Podemosdefinirunafuncincualquieradelamismamaneraenquedefinimoslafuncin
main(). Basta con poner su tipo, su nombre, sus argumentos entre parntesis y luego,
entrellaves,sucdigo:

/*Inclusindearchivos*/
#include<stdio.h>
voidholamundo(void)/*Funcindondeseejecutalalgicadelprograma*/
{

printf("HolaMundo\n");/*imprimelacadena*/

return;/*saledelafuncin*/
}
intmain(void)/*Funcinprincipaldelprograma*/
{

holamundo();/*llamadaalafuncinquellevaelpeso*/

return0;/*saledelprograma:correcto*/
}

Estecdigoesentodoequivalenteal"HolaMundo"original,sloquenosmuestracmo
escribir y cmo utilizar una funcin. Y adems nos muestra un principio de buena
programacin:meterlassentenciasque"haceneltrabajo"enotrasfuncionesespecficas
para sacarlas de main(), dejando en sta tan slo un guin general de lo que hace el
programa, no las rdenes especficas. De esta manera se facilita la comprensin del
programa,yportantoelfuturotrabajodemodificarlo.

De la misma manera que tenemos que declarar una variable antes de utilizarla, no es
indiferenteelordenenquesesitenlasdiferentesfuncionesenelfichero:lasfunciones
debendeclararseantesdeserllamadas.

Igualmente vemos que, para una funcin void, la sentencia de control return no puede
llamarse como pseudofuncin, porque en dicho caso la funcin void (en nuestro caso
holamundo())devolveraunvalor,cosaquesudefinicinnopermite.

Las funciones tambin permiten recibir tipos de datos, as pues las funciones nos sirven
para hacer de un gran problema pequeas partes de un problema o sea dividir un gran
problemaendiferentesproblemasmspequeos.Asquelasfuncionestambinpueden
retornaruntipodedatoquehemosdefinidodentrodelamisma.

97

AlgoritmoyEstructuradeDatosI

Asquesidefinimosunafuncinparasumardosnmerosseriadelasiguientemanera:
/*
*suma.c
*
*JulioCalderonBramo<bramo@gmail.com>2009
*
*paraellibro"ProgramacinenC"
*adaptadodelDominioPblico
*/

#include<stdio.h>
intsumar(intnumero1,intnumero2);/*prototipodelafuncin*/
intmain(void)
{

intsuma;/*definimosunavariable*/

suma=sumar(5,3);

/*lavariableobtieneelvalorretornadodesumar

*puedeversequeentrelosparntesissemandanlosvalores

*delosnmerosquesedeseansumarenestecaso5y3

*puedenhabersedeclaradosestosdosnmerosenotrasvariables

*intdato=4,valor=3;

*suma=sumar(dato,valor);

*/

/*imprimimoslasumadelosdosnmeros*/

printf("Lasumaes:%d",suma);

return0;
}
intsumar(intnumero1,intnumero2)
{

intretsuma;/*creamoslavariablearetornar*/

retsuma=numero1+numero2;/*asignamosesavarialasumadenmero1y2*/

returnretsuma;/*retornamoslasumadelosnmeros*/
}

98

AlgoritmoyEstructuradeDatosI

CAPTULOVI

Recursividad

6.1 Recursividad:
La recursividad es una tcnica de programacin importante. Se utiliza para realizar una
llamadaaunafuncindesdelamismafuncin.Comoejemplotilsepuedepresentarel
clculo de nmeros factoriales. l factorial de 0 es, por definicin, 1. Los factoriales de
nmerosmayoressecalculanmediantelamultiplicacinde1*2*...,incrementandoel
nmerode1en1hastallegaralnmeroparaelqueseestcalculandoelfactorial.

Elsiguienteprrafomuestraunafuncin,expresadaconpalabras,quecalculaunfactorial.

"Sielnmeroesmenorquecero,serechaza.Sinoesunentero,seredondeaalsiguiente
entero. Si el nmero es cero, su factorial es uno. Si el nmero es mayor que cero, se
multiplicaporlfactorialdelnmeromenorinmediato."

Para calcular el factorial de cualquier nmero mayor que cero hay que calcular como
mnimo el factorial de otro nmero. La funcin que se utiliza es la funcin en la que se
encuentra en estos momentos, esta funcin debe llamarse a s misma para el nmero
menor inmediato, para poder ejecutarse en el nmero actual. Esto es un ejemplo de
recursividad.

Larecursividadylaiteracin(ejecucinenbucle)estnmuyrelacionadas,cualquieraccin
que pueda realizarse con la recursividad puede realizarse con iteracin y viceversa.
Normalmente,unclculodeterminadoseprestaraunatcnicauotra,slonecesitaelegir
elenfoquemsnaturaloconelquesesientamscmodo.

Claramente,estatcnicapuedeconstituirunmododemeterseenproblemas.Esfcilcrear
unafuncinrecursivaquenollegueadevolvernuncaunresultadodefinitivoynopueda
llegaraunpuntodefinalizacin.Estetipoderecursividadhacequeelsistemaejecutelo
queseconocecomobucle"infinito".

Para entender mejor lo que en realidad es el concepto de recursin veamos un poco lo


referentealasecuenciadeFibonacci.

Principalmentehabraque aclararqueesun ejemplo menosfamiliarque eldel factorial,


queconsisteenlasecuenciadeenteros.

0,1,1,2,3,5,8,13,21,34,...,

99

AlgoritmoyEstructuradeDatosI

Cadaelementoenestasecuenciaeslasumadelosprecedentes(porejemplo0+1=0,1+
1=2,1+2=3,2+3=5,...)seanfib(0)=0,fib(1)=1yassucesivamente,entoncespuede
definirse la secuencia de Fibonacci mediante la definicin recursiva (define un objeto en
trminosdeuncasomssimpledesmismo):

fib(n)=nifn==0orn==1

fib(n)=fib(n2)+fib(n1)ifn>=2

Porejemplo,paracalcularfib(6),puedeaplicarseladefinicindemanerarecursivapara
obtener:

Fib(6)=fib(4)+fib(5)=fib(2)+fib(3)+fib(5)=fib(0)+fib(1)+fib(3)+fib(5)=0+1fib
(3)+fib(5)

1.+fib(1)+fib(2)+fib(5)=

1.+1+fib(0)+fib(1)+fib(5)=

2.+0+1+fib(5)=3+fib(3)+fib(4)=

3.+fib(1)+fib(2)+fib(4)=

3+1+fib(0)+fib(1)+fib(4)=

4.+0+1+fib(2)+fib(3)=5+fib(0)+fib(1)+fib(3)=

5.+0+1+fib(1)+fib(2)=6+1+fib(0)+fib(1)=

6.+0+1=8

Obsrvese que la definicin recursiva de los nmeros de Fibonacci difiere de las


definicionesrecursivasdelafuncinfactorialydelamultiplicacin.Ladefinicinrecursiva
defibserefieredosvecesasmisma.Porejemplo,fib(6)=fib(4)+fib(5),detalmanera
quealcalcularfib(6),fibtienequeaplicarsedemanerarecursivadosveces.Sinembargo
calcular fib (5)tambinimplicacalcular fib(4), asqueal aplicarladefinicinhaymucha

100

AlgoritmoyEstructuradeDatosI

redundancia de clculo. En ejemplo anterior, fib(3) se calcula tres veces por separado.
Sera mucho ms eficiente "recordar" el valor de fib(3) la primera vez que se calcula y
volver a usarlo cada vez que se necesite. Es mucho ms eficiente un mtodo iterativo
comoelquesiguepararcalcularfib(n).

If(n<=1)

return(n);

lofib=0;

hifib=1;

for(i=2;i<=n;i++)

x=lofib;

lofib=hifib;

hifib=x+lofib;

}/*findelfor*/

return(hifib);

Hasta el momento, las nicas funciones que hemos estudiado han sido llamadas desde
otrafuncin;peroesposiblecrearfuncionesquepuedanllamarseasmismas,estasson
llamadas:funcionesrecursivas.

Una funcin puede ser recursiva tanto de forma directa (si es llamada a s misma) o de
formaindirecta(sillamaaunafuncinqueluegolallama).

Existen algunos problemas que pueden ser resueltos de forma ms eficiente (o su


resolucinpuedesermsnaturalmentepensada)utilizandofuncionesrecursivas.

Una funcin recursiva puede dar origen a un tpico problema en programacin, la


recursin infinita, que es cuando una funcin se llama a s misma infinitas veces. Esto
detieneelnormalfuncionamientodeunprograma.

101

AlgoritmoyEstructuradeDatosI

Paraqueestonosucedaunafuncinrecursivadebesermuybienpensada.Principalmente
una funcin recursiva debe saber resolver el caso ms simple, llamado caso base. Si la
funcin es llamada con el caso base, inmediatamente retorna el resultado (no necesita
volverallamarseasmismaparapoderresolverlo).

Compreseelnumerodeadiciones(sinincluirlosincrementosdelavariablendice,i)que
seejecutanparacalcularfib(6)medianteestealgoritmoalusarladefinicinrecursiva.En
elcasodelafuncinfactorial,tienenqueejecutarseelmismonmerodemultiplicaciones
paracalcular n! Mediante ambosmtodos:recursivo eiterativo. Lomismoocurreconel
nmerodesumasenlosdosmtodosalcalcularlamultiplicacin.Sinembargo,enelcaso
delosnmerosdeFibonacci,elmtodorecursivoesmuchomscostosoqueeliterativo.
Paradefinirunafuncinenformarecursivaesnecesarioespecificar:

Caso(s)base:Dondelarecursividadsedetiene

Paso de recursin: Como se define un elemento distinto de la base, en trminos de


elementosanteriores.

Usualmente los lenguajes de programacin permiten definir funciones de manera


recursiva.EllenguajeCesunodeellos.Ladefinicinrecursivaparaelfactorialsera:

intfactorial(intn){
if((n==0)||(n==1))
return(1);
else
return(n*factorial(n1));
}

Normalmente las definiciones recursivas pueden expresarse en forma no recursiva. Sin


embargo, dependiendo del caso, el resultado puede ser ms confuso. Por ejemplo, una
funcinenCquecalculaelfactorialenformaiterativasera:

intfactorial(intn){
inti,fact=1;

for(i=2;i<=n;i++)
fact=fact*i;
return(fact);
}

Sinembargo,losalgoritmositerativostienenunaventajaencuantoalusodememoria,si
se comparan con los iterativos. La recursividad requiere que se guarde el estado de la
ejecucinantesdecadallamadorecursivo,implicandoungastoconsiderabledememoria.

102

AlgoritmoyEstructuradeDatosI

Es probable que, por esta razn, las versiones recursivas tengan mayores limitaciones al
ejecutarseenuncomputador.

La aplicacin de las definiciones recursivas puede ampliarse a una amplia gama de


problemas,enlosquelasolucinmsnaturalpuedeserlaqueseexpresadeestaforma.

Ejemplo:
/*************************************************************************
**
*Ejemplo:Obtencindelmximoenunvectordenmeros(recursivamente).

**************************************************************************
*/

/*Definicindeltamaomximodelvector*/
#defineTAMANO_VECTOR100

/*************************************************************************
**
*Funcinrecursivaqueobtieneelmximoenunvectordenmerosenteros.
*Recibecomoargumentoelvectorquecontienelosnmerosyelnmero
*deposicionesdelvectorqueestnsiendoutilizadas.Lafuncin
*retornaelvalordelmximoelementodentrodelvector.

**************************************************************************
*/

intMaximo(intvector[],intn){
intmax,maxResto;

if(n==1)/*Casobase*/
max=vector[0];
else{
maxResto=Maximo(vector+1,n1);/*Maximodelrestodelvector*/
if(vector[0]>maxResto)
max=vector[0];
else
max=maxResto;
}
return(max);
}

103

AlgoritmoyEstructuradeDatosI

/*************************************************************************
**
*Programadeprueba:Leelosvaloresdelvectorydespliegaelmaximo

**************************************************************************
*/

main(){
inti;
intn=0;
intvec[TAMANO_VECTOR];

/*Garantizaqueelusuarioingresaunnumerodeelementos>0*/
while(n<1){
printf("Ingreseelnumerodeelementos:");
scanf("%d",&n);
}

/*Leeloselementosdelvector*/
for(i=0;i<n;i++){
printf("\tElemento[%d]:",i);
scanf("%d",&vec[i]);
}

/*Calculaelmaximoalavezquedespliegaelresultado*/
printf("\nMaximo:%d\n",Maximo(vec,n));
}

/*************************************************************************
**
*Ejemplo:Calculoiterativodelnesimoterminodefibonacci
*Pordefinicin:
*Fibonacci(0)=0
*Fibonacci(1)=1
*Fibonacci(n)=Fibonacci(n1)+Fibonacci(n2)

**************************************************************************
*/

/*************************************************************************
**
*Funcinquecalculaiterativamenteelnesimoterminodefibonacci

104

AlgoritmoyEstructuradeDatosI

**************************************************************************
*/

doubleFibonacci(intn){
inti;
doubleFibi,Fibn1,Fibn2;

switch(n){
case0:return0;
case1:return1;
default:
Fibn2=0;/*Fibonacci(n2)*/
Fibn1=1;/*Fibonacci(n1)*/
for(i=2;i<=n;i++){
Fibi=Fibn1+Fibn2;
Fibn2=Fibn1;
Fibn1=Fibi;
}
returnFibi;
}
}

/*************************************************************************
**
*Programaquecalcula,deformaiterativa,elterminonesimodela
*sucesindefibonacci,paraunvalorndadoporelusuario.

**************************************************************************
*/

main(){
intn;

/*Sesolicitaalusuarioelvalorden*/
printf("Ingreseelvalorden:");
scanf("%d",&n);/*scanfrequierepuntero:&*/

/*Imprimeelfibonacciden*/
printf("Eltermino%ddeFibonaccies:%.0lf\n",n,Fibonacci(n));
}

105

AlgoritmoyEstructuradeDatosI

/*************************************************************************
**
*Ejemplo:Obtencindelmaximoenunvectordenmeros(recursivamente).

**************************************************************************
*/

/*Definicindeltamaomximodelvector*/
#defineTAMANO_VECTOR100

/*************************************************************************
**
*Funcinrecursivaqueobtieneelmaximoenunvectordenmerosenteros.
*Recibecomoargumentoelvectorquecontienelosnmerosyelnmero
*deposicionesdelvectorqueestansiendoutilizadas.Lafuncin
*retornaelvalordelmaximoelementodentrodelvector.

**************************************************************************
*/

intMaximo(intvector[],intn){
intmax,maxResto;

if(n==1)/*Casobase*/
max=vector[0];
else{
maxResto=Maximo(vector+1,n1);/*Maximodelrestodelvector*/
if(vector[0]>maxResto)
max=vector[0];
else
max=maxResto;
}
return(max);
}

/*************************************************************************
**
*Programadeprueba:Leelosvaloresdelvectorydespliegaelmaximo

**************************************************************************
*/

main(){

106

AlgoritmoyEstructuradeDatosI

inti;
intn=0;
intvec[TAMANO_VECTOR];

/*Garantizaqueelusuarioingresaunnumerodeelementos>0*/
while(n<1){
printf("Ingreseelnumerodeelementos:");
scanf("%d",&n);
}

/*Leeloselementosdelvector*/
for(i=0;i<n;i++){
printf("\tElemento[%d]:",i);
scanf("%d",&vec[i]);
}

/*Calculaelmaximoalavezquedespliegaelresultado*/
printf("\nMaximo:%d\n",Maximo(vec,n));
}

6.2 Prototiposdefunciones
Antes de usar una funcin C debe tener conocimiento acerca del tipo de dato que
regresaryeltipodelosparmetrosquelafuncinespera.

ElestndarANSIdeCintrodujounanueva(mejor)formadehacerloanteriorrespectoa
lasversionespreviasdeC.

Laimportanciadeusarprototiposdefuncioneseslasiguiente:
Sehaceelcdigomsestructuradoyporlotanto,msfcildeleer.

SepermitealcompiladordeCrevisarlasintaxisdelasfuncionesllamadas.

Loanterioreshecho,dependiendodelalcancedelafuncin.Bsicamentesiunafuncin
hasidodefinidaantesdequeseausada(ollamada),entoncessepuedeusarlafuncinsin
problemas.

Sinoesas,entonceslafuncinsedebedeclarar.Ladeclaracinsimplementemanejael
tipodedatoquelafuncinregresayeltipodeparmetrosusadosporlafuncin.

Esunaprcticausualyconvenienteescribirelprototipodetodaslasfuncionesalprincipio
delprograma,sinembargoestonoesestrictamentenecesario.

107

AlgoritmoyEstructuradeDatosI

Para declarar un prototipo de una funcin se indicar el tipo de dato que regresar la
funcin,elnombredelafuncinyentreparntesislalistadeltipodelosparmetrosde
acuerdoalordenqueaparecenenladefinicindelafuncin.Porejemplo:

intlongcad(char[]);

Loanteriordeclaraunafuncinllamadalongcadqueregresaunvalorenteroyaceptauna
cadenacomoparmetro.

Ejercicios
Escribirunafuncin``reemplaza'',lacualtomaunacadenacomoparmetro,lereemplaza
todos los espacios de la cadena por un guin bajo, y devuelve el nmero de espacios
reemplazados.Porejemplo:

charcadena[]="Elgatonegro";

n=reemplaza(cadena);

deberdevolver:

cadenaconvertida"El_gato_negro"

n=2

Escribirunprogramaqueleaunalneadetextoenunbuffer(unacadenadecaracteres)
usandolafuncingetsycalculelalongituddelalnea(NOusarlafuncinstrlen).

Modificar el programa anterior para que lea un archivo de texto. El archivo deber
redireccionarsealprograma,debiendomostrarelcontenidodelmismo.Encasodequese
leaunalneaconlongitud0deberterminarelprograma.

6.3 Arreglosunidimensionalesymultidimensionales
Losarreglossonunacoleccindevariablesdelmismotipoquesereferencianutilizandoun
nombre comn. Un arreglo consta de posiciones de memoria contigua. La direccin ms
bajacorrespondealprimerelementoylamsaltaalltimo.Unarreglopuedetenerunao
varias dimensiones. Para acceder a un elemento en particular de un arreglo se usa un
ndice.

Elformatoparadeclararunarreglounidimensionales:

tiponombre_arr[tamao]

Porejemplo,paradeclararunarreglodeenterosllamadolistanumcondiezelementosse
hacedelasiguienteforma:

108

AlgoritmoyEstructuradeDatosI

intlistanum[10];

En C, todos los arreglos usan cero como ndice para el primer elemento. Por tanto, el
ejemplo anterior declara un arreglo de enteros con diez elementos desde listanum[0]
hastalistanum[9].

La forma como pueden ser accesados los elementos de un arreglo, es de la siguiente


forma:

listanum[2]=15;/*Asigna15al3erelementodelarreglolistanum*/
num=listanum[2];/*Asignaelcontenidodel3erelementoalavariablenum*/

El lenguaje C no realiza comprobacin de contornos en los arreglos. En el caso de que


sobrepase el final durante una operacin de asignacin, entonces se asignarn valores a
otravariableoauntrozodelcdigo,estoes,sisedimensionaunarreglodetamaoN,se
puede referenciar el arreglo por encima de N sin provocar ningn mensaje de error en
tiempodecompilacinoejecucin,inclusoaunqueprobablementeseprovoqueelfallodel
programa.Comoprogramadorseesresponsabledeasegurarquetodoslosarreglossean
losuficientementegrandesparaguardarloquepondrenelloselprograma.

Cpermitearreglosconmsdeunadimensin,elformatogenerales:

tiponombre_arr[tam1][tam2]...[tamN];

Porejemplounarreglodeenterosbidimensionalesseescribircomo:

inttabladenums[50][50];

Observarqueparadeclararcadadimensinllevasuspropiosparntesiscuadrados.

Para acceder los elementos se procede de forma similar al ejemplo del arreglo
unidimensional,estoes,

tabladenums[2][3]=15;/*Asigna15alelementodela3filayla4columna*/
num=tabladenums[25][16];

A continuacin se muestra un ejemplo que asigna al primer elemento de un arreglo


bidimensionalcero,alsiguiente1,yassucesivamente.

main()
{
intt,i,num[3][4];

109

AlgoritmoyEstructuradeDatosI

for(t=0;t<3;++t)
for(i=0;i<4;++i)
num[t][i]=(t*4)+i*1;

for(t=0;t<3;++t)
{
for(i=0;i<4;++i)
printf("num[%d][%d]=%d",t,i,num[t][i]);
printf("\n");
}

EnCsepermitelainicializacindearreglos,debiendoseguirelsiguienteformato:

tiponombre_arr[tam1][tam2]...[tamN]={listavalores};

Porejemplo:

inti[10]={1,2,3,4,5,6,7,8,9,10};
intnum[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

Un arreglo es un conjunto de variables del mismo tipo que pueden ser referenciadas a
travs de un mismo nombre. La forma de identificar a un elemento determinado es a
travsdeunndice.

Ladeclaracin
int Array[10]; instruye al compilador a que reserve una cantidad de memoria suficiente
paraalmacenar10entidadesenterasyreferirseaesamemoriaatravesdelidentificador
Array. Dado que el nmero de elementos en un arreglo suele ser utilizado en distintos
lugaresdeunprograma,esbuenestilodeprogramacinelreferenciarloatravsdeuna
constantesimblica:

#defineN10
int Array[N]; Los elementos individuales del arreglo se comienza a numerar a partir del
elemento0,asi,Array[0]individualizaalprimerelementoyArray[9]alltimo.

Losarreglospuedensermultidimensionales,asiporejemplo

110

AlgoritmoyEstructuradeDatosI

doubleMatriz[10][20];Defineunaregindememoriacomoparaalmacenar200realesen
doble precisin. La forma en que se organizan en la memoria estos 200 elementos es la
siguiente:

Matriz[0][0], Matriz[0][1], Matriz[0][2], ..., Matriz[1][0], Matriz[1][1],...,...,Matriz[9][19] La


inicializacin de un arreglo puede realizarse a travs de una lista, si la lista es ms corta
queelnmerodeelementosenelarreglo,elrestodeloselementosseinicializana0.Se
puedeobviareltamaodeunarregloalinicializarloconunalista,eltamaoserelmismo
queeldelalistaenestecaso.Ej:

floata[5]={0.1,1.2,2.3,3.4,4.5};
doubleb[100]={1.0};/*los99restantessern0.0*/
inta[]={2,3,5,7};/*equivaleaa[4]={2,3,5,7}*/

Ejemplo:

/*

Utilizacindearreglos.

Programaquecuentacuntasvecesserepitecadadgito,

cadacarcterseparador,yotroscarcteres.
*/
#include<stdio.h>
#defineND10
intmain()
{
intc,i,nWhite=0,nOther=0,nDigit[ND];

for(i=0;i<ND;i++)
nDigit[i]=0;

while((c=getchar())!=EOF)
if(c>='0'&&c<='9')
nDigit[c'0']++;
else
if(c==''||c=='\n'||c=='\t')
nWhite++;
else
nOther++;
for(i=0;i<ND;i++)
printf("Dgito%d:%d\n",i,nDigit[i]);

printf("Caracteresseparadores:%d\n",nWhite);

111

AlgoritmoyEstructuradeDatosI

printf("Otroscaracteres:%d\n",nOther);
return0;
}

Compileycorraelsiguienteprogramayexpliqueloqueocurre:

#include<stdio.h>
intmain(){

inta[4]={0,1,2,3};

intb[4]={4,5,6,7};

inti;

for(i=0;i<8;i++)

printf("a[%d]=%d\n",i,a[i]);

return0;
}

Cadenas
Adiferenciadeotroslenguajesdeprogramacinqueempleanuntipodenominadocadena
stringparamanipularunconjuntodesimbolos,enC,sedebesimularmedianteunarreglo
decaracteres,endondelaterminacindelacadenasedebeindicarconnulo.Unnulose
especificacomo'\0'.Porloanterior,cuandosedeclareunarreglodecaracteressedebe
consideraruncarcteradicionalalacadenamslargaquesevayaaguardar.Porejemplo,
sisequieredeclararunarreglocadenaqueguardeunacadenadediezcaracteres,sehar
como:

charcadena[11];

Se pueden hacer tambin inicializaciones de arreglos de caracteres en donde


automticamenteCasignaelcaracternuloalfinaldelacadena,delasiguienteforma:

charnombre_arr[tam]="cadena";

Porejemplo,elsiguientefragmentoinicializacadenacon``hola'':

charcadena[5]="hola";

Elcdigoanterioresequivalentea:

charcadena[5]={'h','o','l','a','\0'};

112

AlgoritmoyEstructuradeDatosI

Paraasignarlaentradaestndaraunacadenasepuedeusarlafuncinscanfconlaopcin
%s(observarquenoserequiereusareloperador&),deigualformaparamostrarloenla
salidaestndar.

Porejemplo:

main()
{
charnombre[15],apellidos[30];

printf("Introducetunombre:");
scanf("%s",nombre);
printf("Introducetusapellidos:");
scanf("%s",apellidos);
printf("Ustedes%s%s\n",nombre,apellidos);
}

EllenguajeCnomanejacadenasdecaracteres,comosehaceconenterosoflotantes,por
loquelosiguientenoesvlido:

main()
{
charnombre[40],apellidos[40],completo[80];

nombre="JosMara";/*Ilegal*/

apellidos="MorelosyPavn";/*Ilegal*/

completo="Gral."+nombre+appellidos;/*Ilegal*/
}

113

AlgoritmoyEstructuradeDatosI

114

AlgoritmoyEstructuradeDatosI

CAPTULOVII

Aplicaciones

Ejercicio1:

/*Ejemplo1
ElprimerprogramaenC*/
#include<stdio.h>

/*lafuncinmaininicialaejecucindelprograma*/
intmain(void)
{
printf("BienvenidoaC!\n");

return0;/*indicaqueelprogramaterminconexito*/

}/*findelafuncinmain*/

Ejercicio2:

/*Ejemplo2
Impresindeunalneamediantedosinstruccionesprintf*/
#include<stdio.h>

/*lafuncinmaininicialaejecucindelprograma*/
intmain()
{
printf("Bienvenido");
printf("aC!\n");

return0;/*indicaqueelprogramaterminconxito*/

}/*findelafuncinmain*/

115

AlgoritmoyEstructuradeDatosI

Ejercicio3:

/*Ejemplo3.c
Impresindemltipleslneasmedianteunasolainstruccinprintf*/
#include<stdio.h>

/*lafuncinmaininicialaejecucindelprograma*/
intmain()
{
printf("Bienvenido\na\nC!\n");

return0;/*indicaqueelprogramaterminconxito*/

}/*findelafuncinmain*/

Ejercicio4:

/*Ejercicio4.c
Programadesuma*/
#include<stdio.h>

/*lafuncinmaininicialaejecucindelprograma*/
intmain()
{
intentero1;/*primernmerointroducidoporelusuario*/
intentero2;/*segundonmerointroducidoporelusuario*/
intsuma;/*variableenlacualsealmacenalasuma*/

printf("Introduzcaelprimerentero\n");/*indicador*/
scanf("%d",&entero1);/*leeunentero*/

printf("Introduzcaelsegundoentero\n");/*indicador*/
scanf("%d",&entero2);/*leeunentero*/

suma=entero1+entero2;/*asignaeltotalasuma*/

printf("Lasumaes%d\n",suma);/*imprimelasuma*/

return0;/*indicaqueelprogramaterminconxito*/

}/*findelafuncinmain*/

116

AlgoritmoyEstructuradeDatosI

Ejercicio5:
/*Ejercicio5.c
Usodeinstruccionesif,operadoresde
relacin,yoperadoresdeigualdad*/
#include<stdio.h>

/*lafuncinmaininicialaejecucindelprograma*/
main()
{
intnum1;/*primernmeroqueleeelusuario*/
intnum2;/*segundonmeroqueleeelusuario*/

printf("Introduzcadosenteros,yledire\n");
printf("lasrelacionesquesatisfacen:");

scanf("%d%d",&num1,&num2);/*lecturadelosenteros*/

if(num1==num2){
printf("%desigualque%d\n",num1,num2);
}/*findeif*/

if(num1!=num2){
printf("%dnoesigualque%d\n",num1,num2);
}/*findeif*/

if(num1<num2){
printf("%desmenorque%d\n",num1,num2);
}/*findeif*/

if(num1>num2){
printf("%desmayorque%d\n",num1,num2);
}/*findeif*/

if(num1<=num2){
printf("%desmenoroigualque%d\n",num1,num2);
}/*endif*/

if(num1>=num2){
printf("%desmayoroigualque%d\n",num1,num2);
}/*findeif*/

return0;/*indicaqueelprogramaterminconxito*/
}/*findelafuncinmain*/

117

AlgoritmoyEstructuradeDatosI

Ejercicio6:

/*elevaxalapotenciay*/
#include<stdio.h>

intmain()
{
intx,y,i,potencia;/*definicindelasvariables*/

i=1;
potencia=1;/*inicializalapotencia*/
scanf("%d",&x);/*lecturadexdelusuario*/
scanf("%d",&y);/*lecturadeydelusuario*/

while(i<=y){/*repetirelciclowhilemientrasiseamenoroigualay*/
potencia*=x;/*multiplicapotenciaporx*/
++i;/*incrementai*/

}/*findelwhile*/

printf("%d\n",potencia);/*despliegalapotencia*/

return0;

}/*findelafuncinmain*/

Ejercicio7:

#include<stdio.h>
intmain()
{
intx=1,total=0,y;
while(x<=10){
y=x*x;
printf("%d\n",y);

total+=y;

++x;
}
printf("Eltotales:%d\n",total);
return0;
}

118

AlgoritmoyEstructuradeDatosI

Ejercicio8:

/*Ejemplo8.c
Programa para obtener el promedio de calificaciones de una clase mediante una
repeticincontroladaporcontador*/
#include<stdio.h>

/*lafuncinmaininicialaejecucindelprograma*/
intmain()
{
intcontador;/*nmerodelacalificacinsiguiente*/
intcalificacin;/*valordelacalificacin*/
inttotal;/*sumadelascalificacionesintroducidasporelusuario*/
intpromedio;/*promediodelascalificaciones*/

/*fasedeinicializacin*/
total=0;/*inicializatotal*/
contador=1;/*inicializaelcontadordelciclo*/

/*fasedeproceso*/
while(contador<=10){/*repite10veceselciclo*/
printf("Introduzcalacalificacin:");/*indicadorparalaentrada*/
scanf("%d",&calificacin);/*leelacalificacindelusuario*/
total=total+calificacin;/*sumalacalificacinaltotal*/
contador=contador+1;/*incrementaelcontador*/
}/*findewhile*/

/*fasedeterminacin*/
promedio=total/10;/*divisinentera*/

printf("Elpromediodelaclasees%d\n",promedio);/*despliegaelresultado*/

return0;/*indicaqueelprogramaterminconexito*/

}/*findelafuncinmain*/

119

AlgoritmoyEstructuradeDatosI

Ejercicio9:

main()
{
floatcm,pul,valor;
charunidad;
printf(Introducenmeroyunidad(p=pulg.oc=cm:);
scanf(%f%c,&valor,&unidad);
if(unidad==p)
{
cm=valor*2.54;
printf(Las%fpulgadasson%fcentmetros\n,valor,cm);
}
if(unidad==c)
{
pul=valor/2.54;
printf(Los%fcentmetrosson%fpulgadas\n,valor,pul);
}
if(unidad!=p&&unidad!=c)
printf(Noestpuestacorrectamentelaunidad\n);
}

Ejercicio10:

/*Ejemplo10.c
Programa para obtener el promedio de calificaciones de una clase mediante una
repeticincontroladaporcentinela*/
#include<stdio.h>

/*lafuncinmaininicialaejecucindelprograma*/
intmain()
{
intcontador;/*nmerodecalificacionesintroducidas*/
intcalificacin;/*valordelacalificacin*/
inttotal;/*sumadelascalificaciones*/

floatpromedio;/*nmeroconpuntodecimalparaelpromedio*/

/*fasedeinicializacin*/
total=0;/*inicializaeltotal*/
contador=0;/*inicializaelcontadordelciclo*/

/*fasedeproceso*/

120

AlgoritmoyEstructuradeDatosI

/*obtienelaprimeracalificacindelusuario*/
printf("Introduzcalacalificacin,1paraterminar:");/*indicadorparalaentrada
*/
scanf("%d",&calificacin);/*leelacalificacindelusuario*/

/*realizaelciclomientrasnoseintroduzcaelvalorcentinela*/
while(calificacin!=1){
total=total+calificacin;/*sumacalificacinatotal*/
contador=contador+1;/*incrementaelcontador*/

/*obtienelasiguientecalificacindelusuario*/
printf("Introduzcalacalificacin,1paraterminar:");/*indicadorparalaentrada
*/
scanf("%d",&calificacin);/*leelasiguientecalificacin*/
}/*findewhile*/

/*fasedeterminacin*/
/*sielusuariointroducealmenosunacalificacin*/
if(contador!=0){

/*calculaelpromediodetodaslascalificacionesintroducidas*/
promedio=(float)total/contador;/*evitalatruncacin*/

/*despliegaelpromediocondosdgitosdeprecisin*/
printf("Elpromediodelaclasees:%.2f\n",promedio);
}/*findeif*/
else{/*sinoseintroducecalificacinalguna,despliegaelmensaje*/
printf("Noseintrodujeroncalificaciones\n");
}/*findeelse*/

return0;/*indicaqueelprogramaterminconexito*/
}/*findelafuncinmain*/

Ejercicio11:

/*Ejemplo11.c
Anlisisdelosresultadosdeunexamen*/
#include<stdio.h>

/*lafuncinmaininicialaejecucindelprograma*/
intmain()
{

121

AlgoritmoyEstructuradeDatosI

/*inicializalasvariablesenlasdefiniciones*/
intaprobados=0;/*nmerodeaprobados*/
intreprobados=0;/*nmerodereprobados*/
intestudiante=1;/*contadordeestudiantes*/
intresultado;/*resultadodeunexamen*/

/* procesa las calificaciones de 10 estudiantes mediante el uso de un ciclo


controladoporuncontador*/
while(estudiante<=10){

/*indicaalusuariolaintroduccindelvalordelusuario*/
printf("Introduzcaelresultado(1=aprobado,2=reprobado):");
scanf("%d",&resultado);

/*sielresultadoesiguala1,incrementaaprobados*/
if(resultado==1){
aprobados=aprobados+1;
}/*findeif*/
else{/*delocontrario,incrementareprobados*/
reprobados=reprobados+1;
}/*findeelse*/

estudiante=estudiante+1;/*incrementaelcontadordeestudiante*/
}/*findewhile*/

/*fasedeterminacin;despliegaelnmerodeaprobadosyreprobados*/
printf("Aprobados%d\n",aprobados);
printf("Reprobados%d\n",reprobados);

/*siaprobaronmsdeochoestudiantes,imprime"objetivoalcanzado"*/
if(aprobados>8){
printf("Objetivoalcanzado\n");
}/*findeif*/

return0;/*indicaqueelprogramaterminconexito*/

}/*findelafuncinmain*/

122

AlgoritmoyEstructuradeDatosI

Ejercicio12:

/*Ejemplo12.c
Preincremenoypostincremento*/
#include<stdio.h>

/*lafuncinmaininicialaejecucindelprograma*/
intmain()
{
intc;/*definelavariable*/

/*demuestraelpostincremento*/
c=5;/*leasigna5ac*/
printf("%d\n",c);/*imprime5*/
printf("%d\n",c++);/*imprime5yhaceelpostincremento*/
printf("%d\n\n",c);/*imprime6*/

/*demuestraelpreincremento*/
c=5;/*leasigna5ac*/
printf("%d\n",c);/*imprime5*/
printf("%d\n",++c);/*preincrementaeimprime6*/
printf("%d\n",c);/*imprime6*/

return0;/*indicaqueelprogramaterminconexito*/

}/*findelafuncinmain*/

Ejercicio13:

/*Ejemplo13.c
Repeticincontroladaporcontador*/
#include<stdio.h>

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intcontador=1;/*inicializacin*/

while(contador<=10){/*condicinderepeticin*/
printf("%d\n",contador);/*despliegaelcontador*/
contador++;/*incremento*/
}/*findelwhile*/

123

AlgoritmoyEstructuradeDatosI

return0;/*indicaterminacinexitosa*/

}/*findelafuncinmain*/

Ejercicio14:

/*Ejemplo14.c
Repeticincontroladaporcontadormediantelainstruccinfor*/
#include<stdio.h>

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intcontador;/*definicindelcontador*/

/*lainicializacin,condicinderepeticin,eincremento
seincluyenenelencabezadodelainstruccinfor.*/
for(contador=1;contador<=10;contador++){
printf("%d\n",contador);
}/*findelfor*/

return0;/*indicaterminacinexitosadelprograma*/

}/*findelafuncinmain*/

Ejercicio15:

/*Ejemplo15.c
Sumaconfor*/
#include<stdio.h>

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intsuma=0;/*inicializalasuma*/
intnumero;/*nmeroaadicionarasuma*/

for(numero=2;numero<=100;numero+=2){
suma+=numero;/*sumaelnmeroasuma*/
}/*findefor*/

124

AlgoritmoyEstructuradeDatosI

printf("Lasumaes%d\n",suma);/*muestralasuma*/

return0;/*indicaterminacinexitosadelprograma*/

}/*findelafuncinmain*/

Ejercicio16:

/*Ejemplo16.c
Clculodelinterscompuesto*/
#include<stdio.h>
#include<math.h>

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
doublemonto;/*montodeldepsito*/
doubleprincipal=1000.0;/*montoprincipal*/
doubletasa=.05;/*interscompuestoanual*/
intanio;/*contadordeaos*/

/*muestraelencabezadodesalidadelatabla*/
printf("%4s%21s\n","Anio","Montodeldeposito");

/*calculaelmontodeldepsitoparacadaunodelosdiezaos*/
for(anio=1;anio<=10;anio++){

/*calculaelnuevomontoparaelaoespecificado*/
monto=principal*pow(1.0+tasa,anio);

/*muestraunalneadelatabla*/
printf("%4d%21.2f\n",anio,monto);
}/*findefor*/

return0;/*indicaterminacinexitosadelprograma*/
}/*findelafuncinmain*/

125

AlgoritmoyEstructuradeDatosI

Ejercicio17:

/*Ejemplo17.c
Cuentalascalificacionesconletras*/
#include<stdio.h>

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intcalificacin;/*unacalificacin*/
intcuentaA=0;/*nmerodeAs*/
intcuentaB=0;/*nmerodeBs*/
intcuentaC=0;/*nmerodeCs*/
intcuentaD=0;/*nmerodeDs*/
intcuentaF=0;/*nmerodeEs*/

printf("Introduzcalaletradelacalificacin.\n");
printf("IntroduzcaelcaracterEOFparafinalizarlaentradadedatos.\n");

/*repitehastaqueelusuariodigitalasecuenciadeteclasdefindearchivo*/
while((calificacin=getchar())!=EOF){

/*determinacualcalificacinseintrodujo*/
switch(calificacin){/*switchanidadodentrodelwhile*/

case'A':/*lacalificacinesA*/
case'a':/*oa*/
++cuentaA;/*incrementacuentaA*/
break;/*necesarioparasalirdeswitch*/

case'B':/*lacalificacinesB*/
case'b':/*ob*/
++cuentaB;/*incrementacuentaB*/
break;/*saledeswitch*/

case'C':/*lacalificacinesC*/
case'c':/*oc*/
++cuentaC;/*incrementacuentaC*/
break;/*saledeswitch*/

case'D':/*lacalificacinesD*/
case'd':/*od*/
++cuentaD;/*incrementacuentaD*/

126

AlgoritmoyEstructuradeDatosI

break;/*saledeswitch*/

case'F':/*lacalificacinesF*/
case'f':/*of*/
++cuentaF;/*incrementacuentaF*/
break;/*saledeswitch*/

case'\n':/*ignoranuevaslneas,*/
case'\t':/*tabuladores,*/
case'':/*yespaciosenlaentrada*/
break;/*findeswitch*/

default:/*atrapatodoslosdemscaracteres*/
printf("Introdujounaletraincorrecta.");
printf("Introduzcaunanuevacalificacin.\n");
break;/*opcional;detodasmanerassaldrdelswitch*/
}/*findeswitch*/

}/*findewhile*/

/*muestraelresumendelosresultados*/
printf("\nLostotalesporcalificacinson:\n");
printf("A:%d\n",cuentaA);/*despliegaelnmerodecalificacionesA*/
printf("B:%d\n",cuentaB);/*despliegaelnmerodecalificacionesB*/
printf("C:%d\n",cuentaC);/*despliegaelnmerodecalificacionesC*/
printf("D:%d\n",cuentaD);/*despliegaelnmerodecalificacionesD*/
printf("F:%d\n",cuentaF);/*despliegaelnmerodecalificacionesF*/

return0;/*indicaterminacinexitosadelprograma*/

}/*findelafuncinmain*/

Ejercicio18:

/*Ejemplo18.c
Usodelainstruccinderepeticindo/while*/
#include<stdio.h>

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intcontador=1;/*inicializaelcontador*/

127

AlgoritmoyEstructuradeDatosI

do{
printf("%d",contador);/*despliegaelcontador*/
}while(++contador<=10);/*findeldo...while*/

return0;/*indicalaterminacinexitosadelprograma*/

}/*findelafuncinmain*/

Ejercicio19:

/*Ejemplo19.c
Usodelainstruccinbreakdentrodelainstruccinfor*/
#include<stdio.h>

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intx;/*contador*/

/*repite10veceselciclo*/
for(x=1;x<=10;x++){

/*sixes5,terminaelciclo*/
if(x==5){
break;/*rompeelcicloslosixes5*/
}/*findeif*/

printf("%d",x);/*despliegaelvalordex*/
}/*findefor*/

printf("\nRompeelcicloenx==%d\n",x);

return0;/*indicalaterminacinexitosadelprograma*/

}/*findelafuncinmain*/

128

AlgoritmoyEstructuradeDatosI

Ejercicio20:

/*Ejemplo20.c
Usodelainstruccincontinuedentrodeunainstruccinfor*/
#include<stdio.h>

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intx;/*contador*/

/*repiteelciclo10veces*/
for(x=1;x<=10;x++){

/*sixes5,continuaconlasiguienteiteracindelciclo*/
if(x==5){
continue;/*ignoraelrestodelcdigoenelcuerpodelciclo*/
}/*findeif*/

printf("%d",x);/*despliegaelvalordex*/
}/*findefor*/

printf("\nUtilizacontinueparaignorarlaimpresindelvalor5\n");

return0;/*indicalaterminacinexitosadelprograma*/

}/*findelafuncinmain*/

Ejercicio21:

/*Ejemplo21.c*/
/*Verificacindelasfuncionesmatemticasdelabiblioteca*/
#include<stdio.h>
#include<math.h>

/*lafuncinmaininicialaejecucindelprograma*/
intmain()
{
/*calculaydespliegalaraizcuadrada*/
printf("sqrt(%.1f)=%.1f\n",900.0,sqrt(900.0));
printf("sqrt(%.1f)=%.1f\n",9.0,sqrt(9.0));

129

AlgoritmoyEstructuradeDatosI

/*calculaydespliegalafuncinexponencialealax*/
printf("exp(%.1f)=%f\n",1.0,exp(1.0));
printf("exp(%.1f)=%f\n",2.0,exp(2.0));

/*calculaydespliegaellogaritmothelogorithm(basee)*/
printf("log(%f)=%.1f\n",2.718282,log(2.718282));
printf("log(%f)=%.1f\n",7.389056,log(7.389056));

/*calculaydespliegaellogaritmo(base10)*/
printf("log10(%.1f)=%.1f\n",1.0,log10(1.0));
printf("log10(%.1f)=%.1f\n",10.0,log10(10.0));
printf("log10(%.1f)=%.1f\n",100.0,log10(100.0));

/*calculaydespliegaelvalorabsoluto*/
printf("fabs(%.1f)=%.1f\n",13.5,fabs(13.5));
printf("fabs(%.1f)=%.1f\n",0.0,fabs(0.0));
printf("fabs(%.1f)=%.1f\n",13.5,fabs(13.5));

/*calculaydespliegaceil(x)*/
printf("ceil(%.1f)=%.1f\n",9.2,ceil(9.2));
printf("ceil(%.1f)=%.1f\n",9.8,ceil(9.8));

/*calculaydespliegafloor(x)*/
printf("floor(%.1f)=%.1f\n",9.2,floor(9.2));
printf("floor(%.1f)=%.1f\n",9.8,floor(9.8));

/*calculaydespliegapow(x,y)*/
printf("pow(%.1f,%.1f)=%.1f\n",2.0,7.0,pow(2.0,7.0));
printf("pow(%.1f,%.1f)=%.1f\n",9.0,0.5,pow(9.0,0.5));

/*calculaydespliegafmod(x,y)*/
printf("fmod(%.3f/%.3f)=%.3f\n",13.675,2.333,
fmod(13.675,2.333));

/*calculaydespliegasin(x)*/
printf("sin(%.1f)=%.1f\n",0.0,sin(0.0));

/*calculaydespliegacos(x)*/
printf("cos(%.1f)=%.1f\n",0.0,cos(0.0));

/*calculaydespliegatan(x)*/
printf("tan(%.1f)=%.1f\n",0.0,tan(0.0));

130

AlgoritmoyEstructuradeDatosI

return0;/*indicaterminacinexitosa*/

}/*findemain*/

Ejercicio22:

/*Ejemplo22.c
Creacinyusodeunafuncindefinidaporelusuario*/
#include<stdio.h>

intcuadrado(inty);/*prototipodelafuncin*/

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intx;/*contador*/

/*repite10veceselcicloycalculaeimprimecadavezelcuadradodex*/
for(x=1;x<=10;x++){
printf("%d",cuadrado(x));/*llamadaalafuncin*/
}/*findefor*/

printf("\n");

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*definicindelafuncincuadrado,devuelveelcuadradodelparmetro*/
intcuadrado(inty)/*yesunacopiadelargumentoparalafuncin*/
{
returny*y;/*devuelveelcuadradodeycomounint*/

}/*findelafuncincuadrado*/

131

AlgoritmoyEstructuradeDatosI

Ejercicio23:

/*Ejemplo23.c
Encuentraelmximodetresenteros*/
#include<stdio.h>

intmaximo(intx,inty,intz);/*prototipodelafuncin*/

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intnumero1;/*primerentero*/
intnumero2;/*segundoentero*/
intnumero3;/*tercerentero*/

printf("Introduzcatresenteros:");
scanf("%d%d%d",&numero1,&numero2,&numero3);

/*numero1,numero2ynumero3sonargumento
paralallamadaalafuncinmaximo*/
printf("Elmaximoes:%d\n",maximo(numero1,numero2,numero3));

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*Definicindelafuncinmximo*/
/*x,y,yzsonparmetros*/
intmaximo(intx,inty,intz)
{
intmax=x;/*asumequexeselmayor*/

if(y>max){/*siyesmayorquemax,asignayamax*/
max=y;
}/*findeif*/

if(z>max){/*sizesmayorquemax,asignazamax*/
max=z;
}/*findeif*/

returnmax;/*maxeselvalormsgrande*/

}/*findelafuncinmximo*/

132

AlgoritmoyEstructuradeDatosI

Ejercicio24:

/*Ejemplo24.c
Escalaycambiodeenterosproducidospor1+rand()%6.*/
#include<stdio.h>
#include<stdlib.h>

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
inti;/*contador*/

/*repite20veces*/
for(i=1;i<=20;i++){

/*obtieneunnmeroaleatorioentre1y6ylodespliega*/
printf("%10d",1+(rand()%6));

/*sielcontadoresdivisibleentre5,comienzaunanuevalneadesalida*/
if(i%5==0){
printf("\n");
}/*findeif*/

}/*findefor*/

return0;/*indicaterminacinexitosa*/

}/*findemain*/

Ejercicio25:

/*Ejemplo25.c
Tirodeundadodeseislados6000veces*/
#include<stdio.h>
#include<stdlib.h>

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intfrecuencia1=0;/*contadordeltiro1*/
intfrecuencia2=0;/*contadordeltiro2*/
intfrecuencia3=0;/*contadordeltiro3*/

133

AlgoritmoyEstructuradeDatosI

intfrecuencia4=0;/*contadordeltiro4*/
intfrecuencia5=0;/*contadordeltiro5*/
intfrecuencia6=0;/*contadordeltiro6*/

inttiro;/*contadordetiros,valoresde1a6000*/
intcara;/*representauntirodeldado,valoresde1a6*/

/*repite6000vecesyresumelosresultados*/
for(tiro=1;tiro<=6000;tiro++){
cara=1+rand()%6;/*nmeroaleatoriode1a6*/

/*determinaelvalordelacaraeincrementaelcontadorapropiado*/
switch(cara){

case1:/*tiro1*/
++frecuencia1;
break;

case2:/*tiro2*/
++frecuencia2;
break;

case3:/*tiro3*/
++frecuencia3;
break;

case4:/*tiro4*/
++frecuencia4;
break;

case5:/*tiro5*/
++frecuencia5;
break;

case6:/*tiro6*/
++frecuencia6;
break;/*opcional*/
}/*findeswitch*/

}/*findefor*/

/*despliegalosresultadosenformatabular*/
printf("%s%13s\n","Cara","Frecuencia");

134

AlgoritmoyEstructuradeDatosI

printf("1%13d\n",frecuencia1);
printf("2%13d\n",frecuencia2);
printf("3%13d\n",frecuencia3);
printf("4%13d\n",frecuencia4);
printf("5%13d\n",frecuencia5);
printf("6%13d\n",frecuencia6);

return0;/*indicaterminacinexitosa*/

}/*findemain*/

Ejercicio26:

/*Ejemplo26.c
Randomizacindelprogramadedados*/
#include<stdlib.h>
#include<stdio.h>

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
inti;/*contador*/
unsignedsemilla;/*nmeroqueseutilizaparaestablecerlasemilladelgenerador
denmerosaleatorios*/

printf("Introduzcalasemilla:");
scanf("%u",&semilla);/*observe%uparaununsigned*/

srand(semilla);/*establecelasemilladelgeneradordenmerosaleatorios*/

/*repite10veces*/
for(i=1;i<=10;i++){

/*tomaunnmeroaleatoriode1a6ylomuestra*/
printf("%10d",1+(rand()%6));

/*sicontadoresdivisibleentre5,comienzaunanuevalneadesalida*/
if(i%5==0){
printf("\n");
}/*findeif*/

}/*findefor*/

135

AlgoritmoyEstructuradeDatosI

return0;/*indicaterminacinexitosa*/

}/*findemain*/

Ejercicio27:

/*Ejemplo27.c
Craps*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>/*contieneelprototipodelafuncintime*/

/*constantesdeenumeracinquerepresentanesestatusdeljuego*/
enumEstatus{CONTINUA,GANA,PIERDE};

inttiraDados(void);/*prototipodelafuncin*/

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intsuma;/*sumadeltirodedatos*/
intmiPunto;/*puntoganado*/

enumEstatusestatusJuego;/*puedecontenerCONTINUA,GANAoPIERDE*/

/* randomiza el generador de nmeros aleatorios mediante el uso de la funcin


time*/
srand(time(NULL));

suma=tiraDados();/*primertirodelosdados*/

/*determinaelestatusdeljuegobasadoenlasumadelosdados*/
switch(suma){

/*ganaenelprimertiro*/
case7:
case11:
estatusJuego=GANA;
break;

/*pierdeenelprimertiro*/

136

AlgoritmoyEstructuradeDatosI

case2:
case3:
case12:
estatusJuego=PIERDE;
break;

/*recuerdaelpunto*/
default:
estatusJuego=CONTINUA;
miPunto=suma;
printf("Supuntoes%d\n",miPunto);
break;/*opcional*/
}/*findeswitch*/

/*mientraseljuegonosecomplete*/
while(estatusJuego==CONTINUA){
suma=tiraDados();/*tiradenuevolosdados*/

/*determinaelestatusdeljuego*/
if(suma==miPunto){/*ganaporpunto*/
estatusJuego=GANA;/*findeljuego,ganaeljugador*/
}/*findeif*/
else{

if(suma==7){/*pierdealtirar7*/
estatusJuego=PIERDE;/*terminaeljuego,pierdeeljugador*/
}/*findeif*/

}/*findeelse*/

}/*findewhile*/

/*despliegaelmensajedelganadoroperdedor*/
if(estatusJuego==GANA){/*Ganeljugador?*/
printf("Ganaeljugador\n");
}/*findeif*/
else{/*pierdeeljugador*/
printf("Pierdeeljugador\n");
}/*findeelse*/

return0;/*indicaterminacinexitosa*/

}/*findemain*/

137

AlgoritmoyEstructuradeDatosI

/*tirodedados,calculalasumaydespliegalosresultados*/
inttiraDados(void)
{
intdado1;/*primerdado*/
intdado2;/*segundodado*/
intsumaTemp;/*sumadelosdados*/

dado1=1+(rand()%6);/*tomaelaleatorioparaeldado1*/
dado2=1+(rand()%6);/*tomaelaleatorioparaeldado2*/
sumaTemp=dado1+dado2;/*sumaeldado1yeldado2*/

/*despliegalosresultadosdeestetiro*/
printf("Eljugadortiro%d+%d=%d\n",dado1,dado2,sumaTemp);

returnsumaTemp;/*devuelvelasumadelosdados*/

}/*findelafuncintiraDados*/

Ejercicio28:

/*Ejemplo28.c
Ejemplodealcance*/
#include<stdio.h>

voidusoLocal(void);/*prototipodefuncin*/
voidusoStaticLocal(void);/*prototipodefuncin*/
voidusoGlobal(void);/*prototipodefuncin*/

intx=1;/*variableglobal*/

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intx=5;/*variablelocalamain*/

printf("xlocalfueradelalcancedemaines%d\n",x);

{/*comienzaelnuevoalcance*/
intx=7;/*variablelocalconnuevoalcance*/

printf("xlocalenelalcanceinternodemaines%d\n",x);

138

AlgoritmoyEstructuradeDatosI

}/*findenuevoalcance*/

printf("xlocalenelalcanceexternodemaines%d\n",x);

usoLocal();/*usoLocalcontieneaautomaticlocalx*/
usoStaticLocal();/*usoStaticLocalcontieneastaticlocalx*/
usoGlobal();/*usoGlobalutilizaglobalx*/
usoLocal();/*usoLocalreinicializaautomaticlocalx*/
usoStaticLocal();/*staticlocalxretienesuvalorprevio*/
usoGlobal();/*xglobaltambinretienesuvalor*/

printf("\nxlocalenmaines%d\n",x);

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*usoLocalreinicializaalavariablelocalxdurantecadallamada*/
voidusoLocal(void)
{
intx=25;/*seinicializacadavezquesellamausoLocal*/

printf("\nxlocalenusoLocales%ddespusdeentrarausoLocal\n",x);
x++;
printf("xlocalenusoLocales%dantesdesalirdeusoLocal\n",x);
}/*findelafuncinusoLocal*/

/*usoStaticLocalinitializalavariablestaticlocalxslolaprimeravez
queseinvocaalafuncin;elvalordexseguardaentrelasllamadasaesta
funcin*/
voidusoStaticLocal(void)
{
/*seinicializaslolaprimeravezqueseinvocausoStaticLocal*/
staticintx=50;

printf("\nlocalstaticxes%dalentrarausoStaticLocal\n",x);
x++;
printf("localstaticxes%dalsalirdeusoStaticLocal\n",x);
}/*findelafuncinusoStaticLocal*/

/*lafuncinusoGlobalmodificalavariableglobalxdurantecadallamada*/
voidusoGlobal(void)
{

139

AlgoritmoyEstructuradeDatosI

printf("\nxglobales%dalentrarausoGlobal\n",x);
x*=10;
printf("xglobales%dalsalirdeusoGlobal\n",x);
}/*findelafuncinusoGlobal*/

Ejercicio29:

/*Ejemplo29.c
Funcinrecursivadelfactorial*/
#include<stdio.h>

longfactorial(longnumero);/*prototipodelafuncin*/

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
inti;/*contador*/

/*repite11veces;durantecadaiteracin,calcula
elfactorial(i)ydespliegaelresultado*/
for(i=0;i<=10;i++){
printf("%2d!=%ld\n",i,factorial(i));
}/*findefor*/

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*definicinrecursivadelafuncinfactorial*/
longfactorial(longnmero)
{
/*casobase*/
if(nmero<=1){
return1;
}/*findeif*/
else{/*pasorecursivo*/
return(numero*factorial(numero1));
}/*findeelse*/

}/*findelafuncinfactorial*/

140

AlgoritmoyEstructuradeDatosI

Ejercicio30:

/*Ejemplo30.c
Funcinrecursivadefibonacci*/
#include<stdio.h>

longfibonacci(longn);/*prototipodelafuncin*/

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
longresultado;/*valorfibonacci*/
longnumero;/*numeroaintroducirporelusuario*/

/*obtieneunenterodelusuario*/
printf("Introduzcaunentero:");
scanf("%ld",&numero);

/*calculaelvalorfibonaccidelnmerointroducidoporelusuario*/
resultado=fibonacci(numero);

/*despliegaelresultado*/
printf("Fibonacci(%ld)=%ld\n",numero,resultado);

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*definicindelafuncinrecursivafibonacci*/
longfibonacci(longn)
{
/*casobase*/
if(n==0||n==1){
returnn;
}/*findeif*/
else{/*pasorecursivo*/
returnfibonacci(n1)+fibonacci(n2);
}/*findeelse*/

}/*findelafuncinfibonacci*/

141

AlgoritmoyEstructuradeDatosI

Ejercicio31:

/*Ejemplo31.c
inicializarunarreglo*/
#include<stdio.h>

/*lafuncinmaininicialaejecucindelprograma*/
intmain()
{
intn[10];/*nesunarreglode10enteros*/
inti;/*contador*/

/*inicializaloselementosna0delarreglo*/
for(i=0;i<10;i++){
n[i]=0;/*estableceelelementoia0*/
}/*findefor*/

printf("%s%13s\n","Elemento","Valor");

/*muestraelcontenidodelarreglonenformatabular*/
for(i=0;i<10;i++){
printf("%7d%13d\n",i,n[i]);
}/*findefor*/

return0;/*indicaterminacinexitosa*/

}/*findemain*/

Ejercicio32:

/*Ejemplo32.c
Inicializaunarreglomedianteunalistadeinicializacin*/
#include<stdio.h>

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
/*utilizalalistadeinicializacinparainicializarelarreglon*/
intn[10]={32,27,64,18,95,14,90,70,60,37};
inti;/*contador*/

printf("%s%13s\n","Elemento","Valor");

142

AlgoritmoyEstructuradeDatosI

/*muestraelcontenidodelarregloenformatabular*/
for(i=0;i<10;i++){
printf("%7d%13d\n",i,n[i]);
}/*findefor*/

return0;/*indicaterminacinexitosa*/

}/*findemain*/

Ejercicio33:

/*Ejemplo33.c
Inicializaloselementosdelarreglosa
losenterosparesde2a20*/
#include<stdio.h>
#defineTAMANIO10

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
/*sepuedeutilizarlaconstantesimblicaTAMANIOparaespecificareltamaodel
arreglo*/
ints[TAMANIO];/*elarregloscontiene10elementos*/
intj;/*conntador*/

for(j=0;j<TAMANIO;j++){/*establecelosvalores*/
s[j]=2+2*j;
}/*findefor*/

printf("%s%13s\n","Elemento","Valor");

/*muestraelcontenidodelarreglosenformatabular*/
for(j=0;j<TAMANIO;j++){
printf("%7d%13d\n",j,s[j]);
}/*findefor*/

return0;/*indicaterminacinexitosa*/

}/*findemain*/

143

AlgoritmoyEstructuradeDatosI

Ejercicio34:

/*Ejemplo34.c
Calculalasumadeloselementosdelarreglo*/
#include<stdio.h>
#defineTAMANIO12

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
/*utilizaunalistadeinicializacinparainicializarelarreglo*/
inta[TAMANIO]={1,3,5,4,7,2,99,16,45,67,89,45};
inti;/*contadorr*/
inttotal=0;/*sumadelarreglo*/

/*sumaelcontenidodelarregloa*/
for(i=0;i<TAMANIO;i++){
total+=a[i];
}/*findefor*/

printf("Eltotaldeloselementosdelarregloes%d\n",total);

return0;/*indicaterminacinexitosa*/

}/*findemain*/

Ejercicio35:

/*Ejemplo35.c
Programaderespuestasdeexamen*/
#include<stdio.h>
#defineTAMANIO_RESPUESTA40/*definelostamaosdelosarreglos*/
#defineTAMANIO_FRECUENCIA11

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intrespuesta;/*contadoratravsdelas40respuestas*/
intrango;/*contadorderangoesde1a10*/

/*inicializaloscontadoresdefrecuanciaa0*/
intfrecuencia[TAMANIO_FRECUENCIA]={0};

144

AlgoritmoyEstructuradeDatosI

/*colocalasrespuestasdelexmendentrodelarreglorespuestas*/
intrespuestas[TAMANIO_RESPUESTA]={1,2,6,4,8,5,9,7,8,10,
1,6,3,8,6,10,3,8,2,7,6,5,7,6,8,6,7,5,6,6,
5,6,7,5,6,4,8,6,8,10};

/*porcadarespuesta,selecionaelvalordeunelementodelarreglorespuestas

yutilizadichovalorcomosubndiceenelarreglofrecuenciapara

determinarelelementoaincrementar*/
for(respuesta=0;respuesta<TAMANIO_RESPUESTA;respuesta++){
++frecuencia[respuestas[respuesta]];
}/*findefor*/

/*despliegalosresultados*/
printf("%s%17s\n","Rango","Frecuencia");

/*muestralasfrecuenciasenformatabular*/
for(rango=1;rango<TAMANIO_FRECUENCIA;rango++){
printf("%6d%17d\n",rango,frecuencia[rango]);
}/*findefor*/

return0;/*indicaterminacinexitosa*/

}/*findemain*/

Ejercicio36:

/*Ejemplo36.c
ProgramadeimpresindeunHistograma*/
#include<stdio.h>
#defineTAMANIO10

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
/*utilizaunalistadeinicializacinparainicializarelarreglon*/
intn[TAMANIO]={19,3,15,7,11,9,13,5,17,1};
inti;/*contadorforexternoparaelarregloelementos*/
intj;/*contadorforinternocuenta*sencadabarradelhistograma*/

printf("%s%13s%17s\n","Elemento","Valor","Histograma");

145

AlgoritmoyEstructuradeDatosI

/*paracadaelementodelarreglon,muestraunabarraenelhistograma*/
for(i=0;i<TAMANIO;i++){
printf("%7d%13d",i,n[i]);

for(j=1;j<=n[i];j++){/*imprimeunabarra*/
printf("%c",'*');

}/*findelforinterno*/

printf("\n");/*findeunabarradelhistograma*/
}/*findelforexterno*/

return0;/*indicaterminacinexitosa*/

}/*findemain*/

Ejercicio37:

/*Ejemplo37.c
Lanzaundadodeseislados6000veces*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#defineTAMANIO7

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intcara;/*valoraleatoriodeldadoentre1y6*/
inttiro;/*contadordetiros*/
intfrecuencia[TAMANIO]={0};/*inicializalacuenta*/

srand(time(NULL));/*generadordelasemilladenmerosaleatorios*/

/*tiraeldado6000veces*/
for(tiro=1;tiro<=6000;tiro++){
cara=1+rand()%6;
++frecuencia[ cara];/*remplazalainstruccin switch delalnea26 delafigura
5.8*/
}/*findefor*/

printf("%s%17s\n","Cara","Frecuencia");

146

AlgoritmoyEstructuradeDatosI

/*muestraloselementos16defrecuenciaenformatabular*/
for(cara=1;cara<TAMANIO;cara++){
printf("%4d%17d\n",cara,frecuencia[cara]);
}/*findefor*/

return0;/*indicaterminacinexitosa*/

}/*findemain*/

Ejercicio38:

/*Figura6.10:fig06_10.c
Manipulacindearreglosdecaracterescomocadenas*/
#include<stdio.h>

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
charcadena1[20];/*reserva20caracteres*/
charcadena2[]="literaldecadena";/*reserva18caracteres*/
inti;/*contador*/

/*leelacadenadelusuarioylaintroduceenelarreglocadena1*/
printf("Introduceunacadena:");
scanf("%s",cadena1);/*entradaquefinalizaconunespacioenblanco*/

/*muestralascadenas*/
printf("Lacadena1es:%s\ncadena2es:%s\n"
"Lacadena1conespaciosentrecaractereses:\n",
cadena1,cadena2);

/*muestraloscaractereshastaqueencuentraelcaracternulo*/
for(i=0;cadena1[i]!='\0';i++){
printf("%c",cadena1[i]);
}/*findefor*/

printf("\n");

return0;/*indicaterminacinexitosa*/

}/*findemain*/

147

AlgoritmoyEstructuradeDatosI

Ejercicio39:

/*Ejemplo39.c
Arreglosestticosqueseinicializanencero*/
#include<stdio.h>

voidiniciaArregloEstatico(void);/*prototipodelafuncin*/
voidiniciaArregloAutomatico(void);/*prototipodelafuncin*/

/*lafuncinmaincomienzaleejecucindelprograma*/
intmain()
{
printf("Primerallamadaacadafuncin:\n");
iniciaArregloEstatico();
iniciaArregloAutomatico();

printf("\n\nSegundallamadaacadafuncin:\n");
iniciaArregloEstatico();
iniciaArregloAutomatico();

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*funcinparademostrarunarregloestticolocal*/
voidiniciaArregloEstatico(void)
{
/*inicializloselementosa0laprimeravezquesellamaalafuncin*/
staticintarreglo1[3];
inti;/*contador*/

printf("\nValoresalentrarainiciaArregloEstatico:\n");

/*muestraelcontenidodelarreglo1*/
for(i=0;i<=2;i++){
printf("arreglo1[%d]=%d",i,arreglo1[i]);
}/*findefor*/

printf("\nValoresalsalirdeiniciaArregloEstatico:\n");

/*modificaymuestraelcontenidodearreglo1*/
for(i=0;i<=2;i++){
printf("arreglo1[%d]=%d",i,arreglo1[i]+=5);

148

AlgoritmoyEstructuradeDatosI

}/*findefor*/

}/*findelafuncininiciaArregloEstatico*/

/*funcinparademostrarunarreglolocalautomtico*/
voidiniciaArregloAutomatico(void)
{
/*inicializaloeelementoscadavezquesellamaalafuncin*/
intarreglo2[3]={1,2,3};
inti;/*contador*/

printf("\n\nValoresalentrarainiciaArregloAutomatico:\n");

/*muestraelcontenidodearreglo2*/
for(i=0;i<=2;i++){
printf("arreglo2[%d]=%d",i,arreglo2[i]);
}/*findefor*/

printf("\nValoresalsalirdeiniciaArregloAutomatico:\n");

/*modificaymuestraelcontenidodearreglo2*/
for(i=0;i<=2;i++){
printf("arreglo2[%d]=%d",i,arreglo2[i]+=5);
}/*findefor*/

}/*findelafuncininiciaArregloAutomatico*/

Ejercicio40:

/*Ejemplo40.c
Pasodearreglosydeelementosdeunarregloafunciones*/
#include<stdio.h>
#defineTAMANIO5

/*prototiposdelasfunciones*/
voidmodificaArreglo(intb[],inttamanio);
voidmodificaElemento(inte);

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
inta[TAMANIO]={0,1,2,3,4};/*inicializaa*/

149

AlgoritmoyEstructuradeDatosI

inti;/*contador*/

printf("Efectosdepasararregloscompletosporreferencia:\n\nThe"
"losvaloresdelarreglooriginalson:\n");

/*muestraelarreglooriginal*/
for(i=0;i<TAMANIO;i++){
printf("%3d",a[i]);
}/*findefor*/

printf("\n");

/*pasaelarregloamodificaArregloporreferencia*/
modificaArreglo(a,TAMANIO);

printf("Losvaloresdelarreglomodificadoson:\n");

/*muestraelarreglomodificado*/
for(i=0;i<TAMANIO;i++){
printf("%3d",a[i]);
}/*findefor*/

/*muestraelvalordea[3]*/
printf("\n\n\nEfectosdepasarunelementodelarreglo"
"porvalor:\n\nElvalordea[3]es%d\n",a[3]);

modificaElemento(a[3]);/*pasaelelementoa[3]delarregloporvalor*/

/*muestraelvalora[3]*/
printf("Elvalordea[3]es%d\n",a[3]);

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*enlafuncinmodificaArreglo,"b"apuntaalarreglooriginal"a"
ememoria*/
voidmodificaArreglo(intb[],inttamanio)
{
intj;/*contador*/

/*multiplicacadaelementodelarreglopor2*/
for(j=0;j<tamanio;j++){

150

AlgoritmoyEstructuradeDatosI

b[j]*=2;
}/*findefor*/

}/*findelafuncinmodificaArreglo*/

/*enlafuncinmodificaElemento,"e"esunacopialocaldelelementoa[3]
delarreglosepasdesdemain*/
voidmodificaElemento(inte)
{
/*multiplicaelparmetropor2*/
printf("ElvalorenmodificaElementoes%d\n",e*=2);
}/*findelafuncinmodificaElemento*/

Ejercicio41:

/*Ejemplo41.c
Demostracindelcalificadordetipoconstconarreglos*/
#include<stdio.h>

voidintentaModifElArreglo(constintb[]);/*prototipodelafuncin*/

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
inta[]={10,20,30};/*inicializaa*/

intentaModifElArreglo(a);

printf("%d%d%d\n",a[0],a[1],a[2]);

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*en la funcin intentaModifElArreglo, elarreglo besconst,por lotantono puede


ser
utilizadoparamodificarelarreglooriginalaenmain.*/
voidintentaModifElArreglo(constintb[])
{
b[0]/=2;/*error*/
b[1]/=2;/*error*/
b[2]/=2;/*error*/
}/*findelafuncinintentaModifElArreglo*/

151

AlgoritmoyEstructuradeDatosI

Ejercicio42:

/*Ejemplo42.c
Esteprogramaintroduceeltemadelanlisisdedatos.
Calculalamedia,lamedianaylamodadelosdatos*/
#include<stdio.h>
#defineTAMANIO99

/*prototiposdelasfunciones*/
voidmedia(constintresp[]);
voidmediana(intresp[]);
voidmoda(intfrec[],constintresp[]);
voidordenamBurbuja(inta[]);
voidimprimeArreglo(constinta[]);

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intfrecuencia[10]={0};/*inicializaelarreglofrecuencia*/

/*inicializaelarreglorespuestas*/
intrespuesta[TAMANIO]=
{6,7,8,9,8,7,8,9,8,9,
7,8,9,5,9,8,7,8,7,8,
6,7,8,9,3,9,8,7,8,7,
7,8,9,8,9,8,9,7,8,9,
6,7,8,7,8,7,9,8,9,2,
7,8,9,8,9,8,9,7,5,3,
5,6,7,2,5,3,9,4,6,4,
7,8,9,6,8,7,8,9,7,8,
7,4,4,2,5,3,8,7,5,6,
4,5,6,1,6,5,7,8,7};

/*procesalasrespuestas*/
media(respuesta);
mediana(respuesta);
moda(frecuencia,respuesta);

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*calculaelpromediodetodoslosvaloresdelasrespuestas*/

152

AlgoritmoyEstructuradeDatosI

voidmedia(constintresp[])
{
intj;/*contadordeltotaldeelementosdelarreglo*/
inttotal=0;/*variableparamantenerlasumadeloselementosdelarreglo*/

printf("%s\n%s\n%s\n","********","Media","********");

/*totaldelosvaloresdelasrespuestas*/
for(j=0;j<TAMANIO;j++){
total+=resp[j];
}/*findefor*/

printf("Lamediaeselvalorpromediodelosdatos.\n"
"Lamediaesigualaltotalde\n"
"todosloselementosdedatosdivididospor\n"
"elnumerodeelementosdedatos(%d).Lamedia\n"
"enestaejecucines:%d/%d=%.4f\n\n",
TAMANIO,total,TAMANIO,(double)total/TAMANIO);
}/*findelafuncinmedia*/

/*ordenaelarregloydeterminaelvalordelamediana*/
voidmediana(intresp[])
{
printf("\n%s\n%s\n%s\n%s",
"********","Mediana","********",
"Elarregloderespuestasdesordenadoes");

imprimeArreglo(resp);/*muestraelarreglodesordenado*/

ordenamBurbuja(resp);/*ordenaelarreglo*/

printf("\n\nElarregloordenadoes");
imprimeArreglo(resp);/*muestraelarregloordenado*/

/*muestralamediana*/
printf("\n\nLamedianaeselelemento%ddel\n"
"arregloordenadodeelementos%d.\n"
"Paraestaejecucinlamedianaes%d\n\n",
TAMANIO/2,TAMANIO,resp[TAMANIO/2]);
}/*findelafuncinmediana*/

/*determinalasrespuestasmsfrecuentes*/
voidmoda(intfrec[],constintresp[])

153

AlgoritmoyEstructuradeDatosI

{
intrango;/*contadorparaaccederaloselementosde1a9delarreglofrec*/
intj;/*contadorparasumarloselementosde0a98desarreglorespuesta*/
inth;/*contadorparadesplegarhistogramasdeloselementosenelarreglofrec*/
intmasGrande=0;/*representalafrecuenciamsgrande*/
intvalorModa=0;/*respresentalarespuestamsfrecuente*/

printf("\n%s\n%s\n%s\n",
"********","Moda","********");

/*inicializalasfrecuenciasa0*/
for(rango=1;rango<=9;rango++){
frec[rango]=0;
}/*findefor*/

/*sumalasfrecuencias*/
for(j=0;j<TAMANIO;j++){
++frec[resp[j]];
}/*findefor*/

/*muestralosencabezadosdelascolumnastcolumns*/
printf("%s%11s%19s\n\n%54s\n%54s\n\n",
"Respuesta","Frecuencia","Histograma",
"1122","50505");

/*muestralosresultados*/
for(rango=1;rango<=9;rango++){
printf("%8d%11d",rango,frec[rango]);

/*siguelapistadelvalordelamodaydelvalordelafrecuenciamsgrande*/
if(frec[rango]>masGrande){
masGrande=frec[rango];
valorModa=rango;
}/*findeif*/

/*muestraloshistogramasdebarrasquerepresentanelvalordelafrecuencia*/
for(h=1;h<=frec[rango];h++){
printf("*");
}/*findelforinterno*/

printf("\n");/*nuevalneadesalida*/
}/*findelforexterno*/

154

AlgoritmoyEstructuradeDatosI

/*despliegaelvalordelamoda*/
printf("Lamodaeselvalormasfrecuente.\n"
"Paraestaejecucinlamodaes%delcualocurrio"
"%dveces.\n",valorModa,masGrande);
}/*findelafuncinmoda*/

/*funcinqueordenaunarreglomedianteelalgoritmodelmtododelaburbuja
algorithm*/
voidordenamBurbuja(inta[])
{
intpasada;/*contadordepasadas*/
intj;/*contaodrdepasadas*/
intalmacena;/*ubicacintemporalutilizadaparaintercambiarloselementos*/

/*cicloparacontrolarelnmerodepasadas*/
for(pasada=1;pasada<TAMANIO;pasada++){

/*cicloparacontrolarelnmerodecomparacionesporpasada*/
for(j=0;j<TAMANIO1;j++){

/*intercambialoselementossinoseencuentranenorden*/
if(a[j]>a[j+1]){
almacena=a[j];
a[j]=a[j+1];
a[j+1]=almacena;
}/*findeif*/

}/*findelforinterno*/

}/*findelforexterno*/

}/*findeordenamBurbuja*/

/*muestraelcontenidodelarreglo(20valoresporlnea)*/
voidimprimeArreglo(constinta[])
{
intj;/*contador*/

/*muestraelcontenidodelarreglo*/
for(j=0;j<TAMANIO;j++){

if(j%20==0){/*comienzaunanuevalneacada20valores*/
printf("\n");

155

AlgoritmoyEstructuradeDatosI

}/*findeifendif*/

printf("%2d",a[j]);
}/*findefor*/

}/*findelafuncinimprimeArreglo*/

Ejercicio43:

/*Ejemplo43.c
Bsquedalinealenunarreglo*/
#include<stdio.h>
#defineTAMANIO100

/*prototipodelafuncin*/
intbusquedaLineal(constintarreglo[],intllave,inttamanio);

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
inta[TAMANIO];/*creaelarregloa*/
intx;/*contadorparainicializarloselementosde0a99delarregloa*/
intllaveBusqueda;/*valorparalocalizarenelarregloa*/
intelemento;/*variableparaalmacenarlaubicacindellaveBusquedao1*/

/*crealosdatos*/
for(x=0;x<TAMANIO;x++){
a[x]=2*x;
}/*findefor*/

printf("Introduzcalallavedebusquedaentera:\n");
scanf("%d",&llaveBusqueda);

/*intentalocalizarllaveBusquedaenelarregloa*/
elemento=busquedaLineal(a,llaveBusqueda,TAMANIO);

/*despliegalosresultados*/
if(elemento!=1){
printf("Encontreelvalorenelelemento%d\n",elemento);
}/*findeif*/
else{
printf("Valornoencontrado\n");

156

AlgoritmoyEstructuradeDatosI

}/*findeelse*/

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*comparalallaveconcadaelementodelarreglohastaquelocalizaelelemento
ohastaquealcanzaelfinaldelarreglo;devuelveelsubndicedelelemento
siloencontro1sinoloencontr*/
intbusquedaLineal(constintarreglo[],intllave,inttamanio)
{
intn;/*contador*/

/*cicloatravsdelarreglo*/
for(n=0;n<tamanio;++n){

if(arreglo[n]==llave){
returnn;/*devuelvelaubicacindelallave*/
}/*findeif*/

}/*findefor*/

return1;/*llavenoencontrada*/

}/*findelafuncinbusquedaLineal*/

Ejercicio44:

/*Ejemplo.c
Bsquedabinariadentrodeunarreglo*/
#include<stdio.h>
#defineTAMANIO15

/*prototiposdelasfunciones*/
intbusquedaBinaria(constintb[],intclaveDeBusqueda,intbajo,intalto);
voiddespliegaEncabezado(void);
voiddespliegaLinea(constintb[],intbajo,intmedio,intalto);

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
inta[TAMANIO];/*creaelarregloa*/

157

AlgoritmoyEstructuradeDatosI

inti;/*contadorparainicializarloselementosde0a14delarregloa*/
intllave;/*valoralocalizarenelarregloa*/
intresultado;/*variableparaalmacenarlaubicacindelallaveo1*/

/*crealosdatos*/
for(i=0;i<TAMANIO;i++){
a[i]=2*i;
}/*findefor*/

printf("Introduzcaunnumeroentre0y28:");
scanf("%d",&llave);

despliegaEncabezado();

/*buscalallaveenelarregloa*/
resultado=busquedaBinaria(a,llave,0,TAMANIO1);

/*despliegalosresultados*/
if(resultado!=1){
printf("\n%dseencuentraenelelemento%ddelarreglo\n",llave,resultado);
}/*findeif*/
else{
printf("\n%dnoseencuentra\n",llave);
}/*findeelse*/

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*funcinpararealizarlabsquedabinariaenunarreglo*/
intbusquedaBinaria(constintb[],intclaveDeBusqueda,intbajo,intalto)
{
intcentral;/*variableparamantenerelelementocentraldelarreglo*/

/*realizaelciclohastaqueelsubnicebajoesmayorqueelsubndicealto*/
while(bajo<=alto){

/*determinaelelementocentraldelsubarregloenelquesebusca*/
central=(bajo+alto)/2;

/*despliegaelsubarregloutilizadoenesteciclo*/
despliegaLinea(b,bajo,central,alto);

158

AlgoritmoyEstructuradeDatosI

/*siclaveDeBusquedacoincideconelelementocentral,devuelvecentral*/
if(claveDeBusqueda==b[central]){
returncentral;
}/*findeif*/

/*siclaveDeBusquedaesmenorqueelelementocentral,estableceelnuevovalor
dealto*/
elseif(claveDeBusqueda<b[central]){
alto=central1;/*buscaenlamitadinferiordelarreglosearchlowendofarray
*/
}/*findeelseif*/

/*siclaveDeBusquedaesmayorqueelelementocentral,estableceelnuevovalor
parabajo*/
else{
bajo=central+1;/*buscaenlamitadsuperiordelarreglo*/
}/*findeelse*/

}/*findewhile*/

return1;/*noseencontrclaveDeBusqueda*/

}/*findelafunciponbusquedaBinaria*/

/*Imprimeunencabezadoparalasalida*/
voiddespliegaEncabezado(void)
{
inti;/*contador*/

printf("\nSubindices:\n");

/*muestraelencabezadodelacolumna*/
for(i=0;i<TAMANIO;i++){
printf("%3d",i);
}/*findefor*/

printf("\n");/*comienzalanuevalneadesalida*/

/*muestraunalneadecaracteres*/
for(i=1;i<=4*TAMANIO;i++){
printf("");
}/*findefor*/

159

AlgoritmoyEstructuradeDatosI

printf("\n");/*iniciaunanuevalneadesalida*/
}/*findelafuncindespliegaEncabezado*/

/*Imprimeunalneadesalidaquemuestralaparteactual
delarregloqueseestaprocesando.*/
voiddespliegaLinea(constintb[],intbaj,intcen,intalt)
{
inti;/*contadorparalaiteracinatravsdelarreglob*/

/*cicloatravsdelarreglocompleto*/
for(i=0;i<TAMANIO;i++){

/*despliegaespaciossiseencuentrafueradelrangoactualdelsubarreglo*/
if(i<baj||i>alt){
printf("");
}/*findeif*/
elseif(i==cen){/*despliegaelelementocentral*/
printf("%3d*",b[i]);/*marcaelvalorcentral*/
}/*findeelseif*/
else{/*despliegaotroselementosenelsubarreglo*/
printf("%3d",b[i]);
}/*findeelse*/

}/*findefor*/

printf("\n");/*inicialanuevalneadesalida*/
}/*findelafuncindespliegaLinea*/

Ejercicio45:

/*Figura6.22:fig06_22.c

Ejemplodeunarreglodedoblesubndice*/

#include<stdio.h>

#defineESTUDIANTES3

#defineEXAMENES4

/*prototiposdelasfunciones*/

intminimo(constintcalificaciones[][EXAMENES],intalumnos,intexamenes);

intmaximo(constintcalificaciones[][EXAMENES],intalumnos,intexamenes);

doublepromedio(constintestableceCalif[],intexamenes);

void despliegaArreglo( const int calificaciones[][ EXAMENES ], int alumnos, int


examenes);

160

);

AlgoritmoyEstructuradeDatosI

/*lafuncinmaincomienzalaejecucindelprograma*/
intmain()
{
intestudiante;/*contadordeestudiantes*/
/*inicializalascalificacionesparatresestudiantes(filas)*/
constintcalificacionesEstudiantes[ESTUDIANTES][EXAMENES]=

{{77,68,86,73},

{96,87,89,78},

{70,90,86,81}};
/*muestraelarreglocalificacionesEstudiantes*/
printf("Elarregloes:\n");
despliegaArreglo(calificacionesEstudiantes,ESTUDIANTES,EXAMENES);
/*determinaelvalormspequeoyelvalormsgrandedelascalificaciones*/
printf("\n\nCalificacionmasbaja:%d\nCalificacionmasalta:%d\n",

minimo(calificacionesEstudiantes,ESTUDIANTES,EXAMENES),

maximo(calificacionesEstudiantes,ESTUDIANTES,EXAMENES));
/*calculaelpromediodecalificacionesdecadaestudiante*/
for(estudiante=0;estudiante<ESTUDIANTES;estudiante++){

printf("Elpromediodecalificaciondelestudiante%des%.2f\n",

estudiante,promedio(calificacionesEstudiantes[estudiante],EXAMENES)
}/*findefor*/
return0;/*indicaterminacinexitosa*/
}/*findemain*/
/*Encuentralacalificacinmnima*/
intminimo(constintcalificaciones[][EXAMENES],intalumnos,intexamenes)
{
inti;/*contadordeestudiantes*/
intj;/*contadordeexamenes*/
intcalifBaja=100;/*inicializaalacalificacinmsaltaposible*/
/*cicloatravsdelasfilasdecalificaciones*/
for(i=0;i<alumnos;i++){

/*cicloatravsdelascolumnasdecalificaciones*/

161

AlgoritmoyEstructuradeDatosI

for(j=0;j<examenes;j++){

}/*findelforinterno*/

if(calificaciones[i][j]<califBaja){

califBaja=calificaciones[i][j];
}/*findeif*/

}/*findelforexterno*/
returncalifBaja;/*devuelvelacalificacinmnima*/
}/*findelafuncinmain*/
/*Encuentralacalificacinmsalta*/
intmaximo(constintcalificaciones[][EXAMENES],intalumnos,intexamenes)
{
inti;/*contadordeestudiantes*/
intj;/*contadordeexamenes*/
intcalifAlta=0;/*inicializaalacalificacinmsbajaposible*/
/*cicloatravsdelasfilasdecalificaciones*/
for(i=0;i<alumnos;i++){

/*cicloatravsdelascolumnasdecalificaciones*/
for(j=0;j<examenes;j++){

}/*findelforinterno*/

if(calificaciones[i][j]>califAlta){

califAlta=calificaciones[i][j];
}/*findeif*/

}/*findelforexterno*/
returncalifAlta;/*devuelvelacalificacinmxima*/
}/*findelafuncinmaximo*/
/*Determinalacalificacinpromedioparaunestudianteenespecial*/
doublepromedio(constintconjuntoDeCalificaciones[],intexamenes)
{
inti;/*contadordeexenes*/

162

AlgoritmoyEstructuradeDatosI

inttotal=0;/*sumadelascalificacionesdelexamen*/

/*totaldecalificacionesdeunestudiante*/

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

total+=conjuntoDeCalificaciones[i];

}/*findefor*/

return(double)total/examenes;/*promedio*/

}/*findelafuncinpromedio*/

/*Imprimeelarreglo*/

void despliegaArreglo( const int calificaciones[][ EXAMENES ], int alumnos, int


examenes)

inti;/*contadordeestudiantes*/

intj;/*contadordeexamenes*/

/*muestraelencabezadodelascolumnas*/

printf("[0][1][2][3]");

/*muestralascalificacionesenformatabular*/

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

/*muestralaetiquetadelafila*/

printf("\ncalificacionesEstudiantes[%d]",i);

/*muestralascalificacionesdeunestudiante*/

for(j=0;j<examenes;j++){

printf("%5d",calificaciones[i][j]);

}/*findelforinterno*/

}/*findelforexterno*/

}/*findelafuncindespliegaArreglo*/

Ejercicio46:
/*Ejemplo46.c
Usodelosoperadores&y**/
#include<stdio.h>

intmain()

163

AlgoritmoyEstructuradeDatosI

{
inta;/*aesunentero*/
int*ptrA;/*ptrAesunapuntadoraunentero*/

a=7;
ptrA=&a;/*ptrAtomaladireccindea*/

printf("Ladirecciondeaes%p"
"\nElvalordeptrAes%p",&a,ptrA);

printf("\n\nElvalordeaes%d"
"\nElvalorde*ptrAes%d",a,*ptrA);

printf("\n\nMuestradeque*y&soncomplementos"
"unodelotro\n&*ptrA=%p"
"\n*&ptrA=%p\n",&*ptrA,*&ptrA);

return0;/*indicaterminacinexitosa*/

}/*findemain*/

Ejercicio47:

/*Figura7.6:fig07_06.c
Elevaalcubounavariablemedianteunallamadaporvalor*/
#include<stdio.h>

intcuboPorValor(intn);/*prototipo*/

intmain()
{
intnumero=5;/*inicializanumero*/

printf("Elvalororiginaldenumeroes%d",numero);

/*pasanumeroporvaloracuboPorValor*/
numero=cuboPorValor(numero);

printf("\nElnuevovalordenumeroes%d\n",numero);

return0;/*indicaterminacinexitosa*/

164

AlgoritmoyEstructuradeDatosI

}/*findemain*/

/*calculaydevuelveelcubodeunargumentoentero*/
intcuboPorValor(intn)
{
returnn*n*n;/*elevaalcubolavariablelocalnydevuelveelresultado*/

}/*findelafuncincuboPorValor*/

Ejercicio48:

/*Figura7.7:fig07_07.c
Eleva al cubo una variable mediante el uso de una llamada por referencia con un
apuntadorcomoargumento*/

#include<stdio.h>

voidcuboPorReferencia(int*ptrN);/*prototipo*/

intmain()
{
intnumero=5;/*inicializanumero*/

printf("Elvalororiginaldenumeroes%d",numero);

/*pasaladireccindenumeraacuboPorReferencia*/
cuboPorReferencia(&numero);

printf("\nElnuevovalordenumeroes%d\n",numero);

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*calculaelcubode*ptrN;modificalavariablenumeroenmain*/
voidcuboPorReferencia(int*ptrN)
{
*ptrN=*ptrN**ptrN**ptrN;/*cubode*ptrN*/
}/*findelafuncincuboPorReferencia*/

165

AlgoritmoyEstructuradeDatosI

Ejercicio49:

/*Ejemplo49.c
Conversindeletrasminsculasaletrasmaysculas
medianteelusodeunapuntadornoconstanteaundatonoconstante*/

#include<stdio.h>
#include<ctype.h>

voidconvierteAmayusculas(char*ptrS);/*prototipo*/

intmain()
{
charcadena[]="caracteresy$32.98";/*inicializachararreglo*/

printf("Lacadenaantesdelaconversiones:%s",cadena);
convierteAmayusculas(cadena);
printf("\nLacadenadespuesdelaconversiones:%s\n",cadena);

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*convierteunacadenaaletrasmaysculas*/
voidconvierteAmayusculas(char*ptrS)
{
while(*ptrS!='\0'){/*elcaracteractualnoes'\0'*/

if(islower(*ptrS)){/*sielcaracteresminscula,*/

*ptrS=toupper(*ptrS);/*Loconvierteamayscula*/
}/*findeif*/

++ptrS;/*mueveptrSalsiguientecaracter*/
}/*findelwhile*/

}/*findelafuncinconvierteAmayusculas*/

166

AlgoritmoyEstructuradeDatosI

Ejercicio50:

/*Figura7.11:fig07_11.c
Impresindeunacadenacaracterporcaractermedianteeluso
deunapuntadornoconstanteaundatoconstante*/

#include<stdio.h>

voidimprimeCaracteres(constchar*ptrS);

intmain()
{
/*inicializaelarreglodecaracteres*/
charcadena[]="imprimeloscaracteresdeunacadena";

printf("Lacadenaes:\n");
imprimeCaracteres(cadena);
printf("\n");

return0;/*indicaterminacinexitosa*/

}/*findemain*/

/*ptrSnopuedemodificarelcaracteralcualapunta,
esdecir,ptrSesunapuntadorde"sololectura"*/
voidimprimeCaracteres(constchar*ptrS)
{
/*repiteelcicloparatodalacadena*/
for(;*ptrS!='\0';ptrS++){/*sininicializacin*/
printf("%c",*ptrS);
}/*findefor*/

}/*findelafuncinimprimeCaracteres*/

167

AlgoritmoyEstructuradeDatosI

168

AlgoritmoyEstructuradeDatosI

Bibliografa

BORESRosario,ROSALESRoman;"Computacin.Metodologa,lgicacomputacional
yprogramacin"McGrawHill2006

CORREA URIBE Guillermo; "Desarrollo de algoritmos y sus aplicaciones en Basic,


PascalyC(3.Edicin)"McGrawHill2005

JEANPaulTremblay,B.BuntRichard;"Introduccinalacienciasdelascomputadoras
(enfoquealgoritmico)"McGrawHill2005

JOYANESAGUILARLuis;"Metodologadelaprogramacin"McGrawHill2006

JOYANES AGUILAR Luis; "Problemas de metodologa de la programacin" Mc Graw


Hill2006

JOYANESAGUILARLuis;"Fundamentosdeprogramacin,algoritmosyestructurade
datos".McGrawHill2006

JOYANES AGUILAR Luis, Luis Rodrguez Baena y Matilde Fernndez Azuela;


"Fundamentosdeprogramacin,librodeproblemas"McgrawHill2005

LEVINEGuillermo;"Introduccinalacomputacinyalaprogramacinestructurada"
McGrawHill2006

LOZANO Letvin; "Diagramacin y programacin estructurada y libre" Mc Graw Hill


2006

169

También podría gustarte