Está en la página 1de 16

UNIVERSIDADDEELSALVADOR

FACULTADDEINGENIERAYARQUITECTURA
ESCUELADEINGENIERAELCTRICA
INTRODUCCINALAINFORMTICA

GUANo.7

ANSIC:ARREGLOS

Profesor:Ing.WalterZelaya
Instructores:Brs.EdgardoGlvez,BenjamnHernndezyEdgardoLarn
NOTA:Estelaboratoriodura2semanas.Laprimerasemanaesarreglosylasegundapunteros.
GuaNo.7

UESCICLOI2016

1/16

Introduccin.
Lapresenteguaestdedicadaaexplotarlasvirtudesdearreglos,comienzadefinicinydeclaracindeun
arreglo.Severcomolosarreglospuedenseralimentadosdesdeeltecladoodesdeunarchivoyaseautilizando
loselementosyeloperadordedireccin&opormediodepunteros.Losarreglossonesencialesenaquellas
aplicaciones en las cuales se analizarn mucho datos de un mismo fenmeno. Por ejemplo: al existir un
terremotoenalgunapartedelmundodiferentessismgrafosalrededordelglobohacenmilesdelecturasdelas
cuales se puede extraer informacin valiosa como epicentro, hipocentro, aceleraciones, velocidades,
desplazamientos entre otros. Las lecturas de estos sensores son almacenadas en archivos para luego ser
analizadaspormediodeunprogramaqueporlogeneralutilizaarreglos.Deaqulaobligacindeexplotarlas
virtudesdelosarreglos.

Objetivo:
Utilizararreglosparalasolucindeproblemas.
Relacionarpunterosconarreglos
Alimentararreglosdesdetecladoyarchivos.

Referenciaterica
Quesunarreglo?
Ladefinicinseraalgoas:
Unarregloesunconjuntodevariablesdelmismotipoquetienenelmismonombreysediferencianenelndice.
Peroququieredecirestoyparaquloqueremos?.Puesbien,supongamosquesomosunmeteorlogoy
queremosguardarenlacomputadoralatemperaturaquehahechocadahoradelda.Paradarleciertautilidadal
final,calcularemoslamediadelastemperaturas.Conloquesabemoshastaahoraseraalgoas:
1.#include<stdio.h>
2.
3.intmain()
4.{
5./*Declaramos24variables,unaparacadahoradelda*/
6.inttemp1,temp2,temp3,temp4,temp5,
7.temp6,temp7,temp8,temp9,temp10,
8.temp11,temp12,temp13,temp14,temp15,
9.temp16,temp17,temp18,temp19,temp20,
10.temp21,temp22,temp23,temp0;
11.intmedia;
12./*Ahoratenemosquedarelvalordecadauna*/
13.printf("Temperaturadelas0:");
14.scanf("%i",&temp0);
15.printf("Temperaturadelas1:");
16.scanf("%i",&temp1);
17.printf("Temperaturadelas2:");
GuaNo.7

UESCICLOI2016

2/16

18.scanf("%i",&temp2);
19.printf("Temperaturadelas23:");
20.scanf("%i",&temp23);
21.media=(temp0+temp1+temp2+temp3+...+temp23)/24;
22.printf("\nLatemperaturamediaes%i\n",media);
23.return0;
24.}
NOTA:Lospuntossuspensivosloshepuestoparanotenerqueescribirtodoyquenoocupetantoespacio,estos
nosepuedenusarenunprograma.
Paraacortarunpocoelprogramapodramoshaceralgoas:
1.#include<stdio.h>
2.intmain()
3.{
4./*Declaramos24variables,unaparacadahoradelda*/
5.inttemp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8;
6.inttemp9,temp10,temp11,temp12,temp13,temp14,temp15,temp16;
7.inttemp17,temp18,temp19,temp20,temp21,temp22,temp23,temp0;
8.intmedia;
9./*Ahoratenemosquedarelvalordecadauna*/
10.printf("INTROlastempsdesdelas0hastalas23:");
11.scanf("%i%i%i...%i",&temp0,&temp1,&temp2,...&temp23);
12.media=(temp0+temp1+temp2+temp3+...+temp23)/24;
13.printf("\nLatemperaturamediaes%i\n",media);
14.}
Yestoconunejemploquetienetanslo24variables,imagnatesisonms!!Yprecisamenteaquesdonde
nosvienendeperlaslosarreglos.Vamosahacerelprogramaconunarreglo.Usaremosnuestrosconocimientos
debuclesforydescanf.
1.#include<stdio.h>
2.intmain()
3.{
4.inttemp[24];
5.floatmedia;
6.inthora;
7./*Ahoratenemosquedarelvalordecadauna*/
8.for(hora=0;hora<24;hora++)
9.{
10.printf("Temperaturadelas%i:",hora);
11.scanf("%i",&temp[hora]);
12.media+=temp[hora];
13.}
14.media=media/24;
15.printf("\nLatemperaturamediaes%f\n",media);
16.return0;
17.}

GuaNo.7

UESCICLOI2016

3/16

Comovesesunprogramamsrpidodeescribir(yesmenosaburridohacerlo),ymscmodoparaelusuario
queelanterior.
Comoyahemoscomentadocuandodeclaramosunavariableloqueestamoshaciendoesreservarunazonadela
memoriaparaella.Cuandodeclaramosunarregloloquehacemos(enesteejemplo)esreservarespacioen
memoriapara24variablesdetipoint.Eltamaodelarreglo(24)loindicamosentrecorchetesaldefinirlo.Esta
eslapartedeladefinicinquedice:Unarregloesunconjuntodevariablesdelmismotipoquetienenelmismo
nombre.
Lapartefinaldeladefinicindice:ysediferencianenelndice.Enejemplorecorremoslamatrizmedianteun
bucleforyvamosdandovaloresalosdistintoselementosdelamatriz.
Paraindicaraquelementonosreferimosusamosunnmeroentrecorchetes(enestecasolavariablehora),este
nmeroesloquesellamandice.ElprimerelementodelamatrizenANSICtieneelndice0,Elsegundotiene
el1yassucesivamente.Demodoquesiqueremosdarunvaloralelemento4(ndice3)haremos:
temp[3]=20;
NOTA:Nohayqueconfundirse.Enladeclaracindelarregloelnmeroentrecorcheteseselnmerode
elementos,encambiocuandoyausamoslamatrizelnmeroentrecorcheteseselndice.

Declaracindeunarreglo
Laformageneraldedeclararunarregloeslasiguiente:
tipo_de_datonombre_del_arreglo[dimensin];
tipo_de_datoesunodelostiposdedatosconocidos(int,char,float...)odelosdefinidosporelusuariocon
typdef.Enelejemploeraint.
nombre_del_arregloeselnombrequedamosalarreglo,enelejemploeratemp.
dimensineselnmerodeelementosquetieneelarreglo.
Comoheindicadoantes,aldeclararunarregloreservamosenmemoriatantasvariablesdeltipo_de_datocomo
lasindicadaendimensin.

Sobreladimensindeunarreglo
Hemosvistoenelejemploquetenemosqueindicarenvariossitioseltamaodelarreglo:enladeclaracin,en
elbucleforyalcalcularlamedia.Esteesunprogramapequeo,enunprogramamayorprobablementehabr
queescribirlomuchasmsveces.Sienunmomentodadoqueremoscambiarladimensindelarreglotendremos
quecambiartodos.Sinosequivocamosalescribireltamao(ponemos25envezde24)cometeremosunerrory
puedequenonosdemoscuenta.Poresoesmejorusarunaconstanteconnombre,porejemploELEMENTOS.

GuaNo.7

UESCICLOI2016

4/16

1.#include<stdio.h>
2.#defineELEMENTOS24
3.intmain()
4.{
5.inttemp[ELEMENTOS];
6.floatmedia;
7.inthora;
8./*Ahoratenemosquedarelvalordecadauna*/
9.for(hora=0;hora<ELEMENTOS;hora++)
10.{
11.printf("Temperaturadelas%i:",hora);
12.scanf("%i",&temp[hora]);
13.media+=temp[hora];
14.}
15.media=media/ELEMENTOS;
16.printf("\nLatemperaturamediaes%f\n",media);
17.return0;
18.}
Ahoraconslocambiarelvalordeelementosunavezloestaremoshaciendoentodoelprograma.

Inicializarunarreglo
EnANSICsepuedeninicializarlosarreglosaldeclararlosigualquehacamosconlasvariables.
Recordemosquesepodahacer:
inthojas=34;
Puesconarreglossepuedehacer:
inttemperaturas[24]={15,18,20,23,22,24,22,25,26,
25,24,
22,21,20,18,17,16,17,15,14,14,14,
13,12};
Ahoraelelemento0(queserelprimero),esdecirtemperaturas[0]valdr15.Elelemento1(elsegundo)valdr
18yascontodos.Vamosaverunejemplo:
1.#include<stdio.h>
2.intmain()
3.{
4.inthora;
5.inttemperaturas[24]={15,18,20,23,22,24,22,25,
6.26,25,24,22,21,20,18,17,16,
7.17,15,14,14,14,13,12};
8.for(hora=0;hora<24;hora++)
9.{
10.printf("Latemperaturaalas%ierade%igrados.\n",
11.hora,temperaturas[hora]);
12.}
13.return0;
14.}

GuaNo.7

UESCICLOI2016

5/16

Peroaverquineselhabilidosoquenoseequivocaalmeterlosdatos,noesdifcilolvidarsealguno.Hemos
indicadoalcompiladorquenosreservememoriaparaunarreglode24elementosdetipoint.Quocurresi
metemosmenosdelosreservados?Puesnopasanada,sloqueloselementosquefaltenvaldrncero.
1.#include<stdio.h>
2.
3.intmain()
4.{
5.inthora;
6./*Faltanlostresltimoselementos*/
7.inttemperaturas[24]={15,18,20,23,22,24,22,25,
8.26,25,24,22,21,20,18,17,
9.16,17,15,14,14};
10.for(hora=0;hora<24;hora++)
11.{
12.printf("Latemperaturaalas%ierade%igrados.\n",
13.hora,temperaturas[hora]);
14.}
15.return0;
16.}
Elresultadoser:
Latemperaturaalas0erade15grados.
Latemperaturaalas1erade18grados.
Latemperaturaalas2erade20grados.
Latemperaturaalas3erade23grados.
...
Latemperaturaalas17erade17grados.
Latemperaturaalas18erade15grados.
Latemperaturaalas19erade14grados.
Latemperaturaalas20erade14grados.
Latemperaturaalas21erade0grados.
Latemperaturaalas22erade0grados.
Latemperaturaalas23erade0grados.
Vemosquelosltimos3elementossonnulos,quesonaquellosalosquenohemosdadovalores.Elcompilador
nonosavisaquehemosmetidomenosdatosdelosreservados.
NOTA:Fjatequepararecorrerdelelemento0al23(24elementos)hacemos: for(hora=0;hora<24;
hora++).Lacondicinesquehoraseamenosde24.Tambinpodamoshaberhechoquehora!=24.
Ahoravamosaverelcasocontrario,metemosmsdatosdelosreservados.Vamosameter25envezde24.Si
hacemos esto dependiendo del compilador obtendremos un error o al menos un warning (aviso). En unos
compiladoreselprogramasecrearyenotrosno,peroanasnosavisadelfallo.Debeindicarsequeestamos
intentandoguardarundatodems,nohemosreservadomemoriaparal.
Silamatrizdebetenerunalongituddeterminadausamosestemtododedefinirelnmerodeelementos.En
nuestrocasoeraconveniente,porquelosdassiempretienen24horas.Esdefinireltamaodelamatrizparaque
nosavisesimetemosmselementosdelosnecesarios.

GuaNo.7

UESCICLOI2016

6/16

Enlosdemscasospodemosusarunmtodoalternativo,dejaralordenadorquecuenteloselementosque
hemosmetidoynosreserveespacioparaellos:
1.#include<stdio.h>
2.intmain()
3.{
4.inthora;
5./*Faltanlostresltimoselementos*/
6.inttemperaturas[]={15,18,20,23,22,24,22,25,
7.26,25,24,22,21,20,18,17,
8.16,17,15,14,14};
9.for(hora=0;hora<24;hora++)
10.{
11.printf("Latemperaturaalas%ierade%igrados.\n",
12.hora,temperaturas[hora]);
13.}
14.return0;
15.}
Vemos que no hemos especificado la dimensin del arreglo temperaturas. Hemos dejado los corchetes en
blanco.Elordenadorcontarloselementosquehemospuestoentrellavesyreservarespacioparaellos.Deesta
forma siempre habr el espacio necesario, ni ms ni menos. La pega es que si ponemos ms de los que
queramosnonosdaremoscuenta.
Parasaberenestecasocuantoselementostienelamatrizpodemosusareloperadorsizeof.
Dividimoseltamaodelamatrizentreeltamaodesuselementosytenemoselnmerodeelementos.
1.#include<stdio.h>
2.intmain()
3.{
4.inthora;
5.intelementos;
6.inttemperaturas[]={15,18,20,23,22,24,22,25,26,25,
7.24,22,21,20,18,17,16,17,15,14,14};
8.elementos=sizeoftemperaturas/sizeof(int);
9.for(hora=0;hora<elementos;hora++)
10.{
11.printf("Latemperaturaalas%ierade%igrados.\n",
12.hora,temperas[hora]);
13.}
14.printf("Hansido%ielementos.\n",elementos);
15.return0;
16.}

GuaNo.7

UESCICLOI2016

7/16

Recorrerunarreglo
Enelapartadoanteriorveamosunejemploquemostrabatodoslosdatosdeunarreglo.Veamostambinloque
pasabasimetamosmsomenoselementosalinicializarlamatriz.
Ahoravamosaverqupasasiintentamosimprimirmselementosdelosquehayenlamatriz,enestecaso
intentamosimprimir28elementoscuandoslohay24:
1.#include<stdio.h>
2.intmain()
3.{
4.inthora;
5./*Faltanlostresltimoselementos*/
6.inttemperaturas[24]={15,18,20,23,22,24,22,25,26,25,
7.24,22,21,20,18,17,16,17,15,14,
8.14,13,13,12};
9.for(hora=0;hora<28;hora++)
10.{
11.printf("Latemperaturaalas%ierade%igrados.\n",
12.hora,temperaturas[hora]);
13.}
14.return0;
15.}
Loqueseobtieneenmiordenadores:
Latemperaturaalas22erade15grados.
...
Latemperaturaalas23erade12grados.
Latemperaturaalas24erade24grados.
Latemperaturaalas25erade3424248grados.
Latemperaturaalas26erade7042grados.
Latemperaturaalas27erade1grados.
Vemosqueapartirdelelemento24(incluido)tenemosresultadosextraos.Estoesporquenoshemossalidode
loslmitesdelarregloeintentaaccederalelementotemperaturas[25]ysucesivosquenoexisten.Asque
nosmuestraelcontenidodelamemoriaqueestjustodetrsdetemperaturas[23](estoeslomsprobable)que
puedesercualquiera.AlcontrarioqueotroslenguajesCnocompruebaloslmitesdelosarreglo,nosdeja
saltrnoslosalatorera. Esteprogramanoda erroralcompilar ni al ejecutar, tanslodevuelveresultados
extraos.Tampocobloquearelsistemaporquenoestamosescribiendoenlamemoriasinoleyendodeella.
Otracosamuydiferenteesmeterdatosenelementosquenoexisten.Veamosunejemplo(niseteocurra
ejecutarlo):
1.#include<stdio.h>
2.intmain()
3.{
4.inttemp[24];
5.floatmedia;
6.inthora;
7.for(hora=0;hora<28;hora++)
GuaNo.7

UESCICLOI2016

8/16

8.{
9.printf("Temperaturadelas%i:",hora);
10.scanf("%i",&temp[hora]);
11.media+=temp[hora];
12.}
13.media=media/24;
14.printf("\nLatemperaturamediaes%f\n",media);
15.}
Loquesospechaba,loheprobadoenmiordenadorysehabloqueado.Hetenidoqueapagarlo.Elproblema
ahora es que estamos intentando escribir en el elemento temp[24] que no existe y puede ser un lugar
cualquieradelamemoria.Comoconsecuenciadeestopodemosestarcambiandoalgnprogramaodatodela
memoriaquenodebemosyelsistemahacepluf.Asquemuchocuidadoconesto.

Punterosaarreglos1
Aqutenemosotrodelosimportantesusosdelospunteros,lospunterosaarreglos.Estosestnntimamente
relacionados.Paraqueunpunteroapunteaunarreglosepuedehacerdedosformas,unaesapuntandoalprimer
elementodelarreglo:
int*puntero;
inttemperaturas[24];
puntero=&temperaturas[0];
Elpunteroapuntaaladireccindelprimerelemento.Otraformaequivalente,peromuchomsusadaes:
puntero=temperaturas;
Conestotambinapuntamosalprimerelementodelarreglo.Fijarsequeelpunterotienequeserdelmismotipo
queelarreglo(enestecasoint).
Ahoravamosavercmoaccederalrestodeloselementos.Paraelloempezamosporcmofuncionaunarreglo:
Unarregloseguardaenposicionesseguidasenmemoria,detalformaqueelsegundoelementova
inmediatamentedespusdelprimeroenlamemoria.Enunordenadorenelqueeltamaodeltipointesde32
bits(4bytes)cadaelementodelarregloocupar4bytes.Veamosunejemplo:
1.#include<stdio.h>
2.intmain()
3.{
4.inti;
5.inttemp[24];
6.for(i=0;i<24;i++)
7.{
8.printf("Ladireccindelelemento%ies%p.\n",
9.i,&temp[i]);
10.}
11.return0;
12.}
1

Comoseverenelprocedimientonoesnecesarioquesedeclareunpunteroextrayaqueelidentificadordelarregloesunpuntero.

GuaNo.7

UESCICLOI2016

9/16

NOTA:Recuerdaque%psirveparaimprimirenpantallaladireccindeunavariableenhexadecimal.
Elresultadoes(dependedelordenador):
Ladireccindelelemento0es4c430.
Ladireccindelelemento1es4c434.
Ladireccindelelemento2es4c438.
Ladireccindelelemento3es4c43c.
...
Ladireccindelelemento21es4c484.
Ladireccindelelemento22es4c488.
Ladireccindelelemento23es4c48c.
(Lasdireccionesestnenhexadecimal).Vemosaququeefectivamenteocupanposicionesconsecutivasyque
cadaunaocupa4bytes.Silorepresentamosenunatabla:
Direccin
ndice

4C430
temp[0]

4C434
temp[1]

4C438
temp[2]

4C43C
temp[3]

Yahemosvistocmofuncionaslosarreglospordentro,ahoravamosaverloconpunteros.Voyaponerun
ejemplo:
1.#include<stdio.h>
2.intmain()
3.{
4.inti;
5.inttemp[24];
6.int*punt;
7.punt=temp;
8.for(i=0;i<24;i++)
9.{
10.printf("Ladireccindetemp[%i]es%pyladepuntes%p.\n",
11.i,&temp[i],punt);
12.punt++;
13.}
14.return0;
15.}
Cuyoresultadoes:
Ladireccindetemp[0]es4c430yladepuntes4c430.
Ladireccindetemp[1]es4c434yladepuntes4c434.
Ladireccindetemp[2]es4c438yladepuntes4c438.
...
Ladireccindetemp[21]es4c484yladepuntes4c484.
Ladireccindetemp[22]es4c488yladepuntes4c488.
Ladireccindetemp[23]es4c48cyladepuntes4c48c.
Enesteejemplohaydoslneasimportantes(ennegrita).Laprimeraespunt=temp.Conestahacemosqueel
puntapuntealprimerelementodelamatriz.Sinohacemosestopuntapuntaaunsitiocualquieradelamemoria
ydebemosrecordarquenoesconvenientedejarlospunterosas,puedeserdesastroso.
GuaNo.7

UESCICLOI2016

10/16

Lasegundalneaimportanteespunt++.Conestoincrementamoselvalordepunt,perocuriosamenteaunque
incrementamosunaunidad(punt++equivaleapunt=punt+1)elvaloraumentaen4.Aqusemuestrauna
delascaractersticasespecialesdelospunteros.
Recordemosqueenunpunteroseguardaunadireccin.Tambinsabemosqueunpunteroapuntaauntipode
datosdeterminado(enestecasoint).Cuandosumamos1aunpunterosumamoseltamaodeltipoalque
apunta.Enelejemploelpunteroapuntaaunavariabledetipointqueesde4bytes,entoncesalsumar1loque
hacemosessumar4bytes.Conestoloqueseconsigueesapuntaralasiguienteposicinintdelamemoria,en
estecasoeselsiguienteelementodelamatriz.

Cuandohemosacabadoestamosentemp[24]quenoexiste.Siqueremosrecuperarelelemento1podemos
hacerpunt=tempotravezorestar24apunt:
punt=24;
conestohemosrestado24posicionesapunt(24posicionesint*4bytesporcadaint=96posiciones).
Vamosaverahoraunejemplodecmorecorrerlamatrizenteraconpunterosycmoimprimirla:
1.#include<stdio.h>
2.intmain(intargc,char*argv[])
3.{
4.inttemperaturas[24]={15,18,20,23,22,24,22,25,
5.26,25,24,22,21,20,18,17,
6.16,17,15,14,14,13,12,12};
7.int*punt;
8.inti;
9.punt=temperaturas;
10.for(i=0;i<24;i++)
11.{
12.printf("Elemento%i:%i\n",i,*punt);
13.punt++;
14.}
15.return0;
16.}

GuaNo.7

UESCICLOI2016

11/16

Cuandoacabamospuntapuntaatemperaturas[24],ynoalprimerelemento,siqueremosvolverarecorrer
lamatrizdebemosvolvercomoantesalcomienzo.Paraevitarperderlareferenciaalprimerelementodela
matriz(temperaturas[0])sepuedeusarotraformaderecorrerlamatrizconpunteros:
1.#include<stdio.h>
2.intmain(intargc,char*argv[])
3.{
4.inttemperaturas[24]={15,18,20,23,22,24,22,25,26,25,5.24,
22,21,20,18,17,16,17,15,14,
6.14,13,12,12};
7.
8.int*punt;
9.inti;
10.punt=temperaturas;
11.for(i=0;i<24;i++)
12.{
13.printf("Elemento%i:%i\n",i,*(punt+i));
14.}
15.return0;
16.}
Con*(punt+i)loquehacemosestomarladireccinalaqueapuntapunt(ladireccindelprimerelemento
delamatriz)ylesumamosiposiciones.Deestaformatenemosladireccindelelementoi.
Noestamossumandounvalorapunt,parasumarleunvalorhabraquehacerpunt++opunt+=algo,as
quepuntsiempreapuntaalprincipiodelamatriz.
Sepodrahaceresteprogramasinusarpunt.Sustituyndoloportemperaturasydejar*(temperaturas+i).
Loquenosepuedehaceres:temperaturas++;.
Importante:Comofinaldebocomentarqueelusodendicesesunaformademaquillarelusodepunteros.El
ordenadorconviertelosndicesapunteros.Cuandoalordenadorledecimostemp[5]enrealidadleestamos
diciendo*(temp+5).Asqueusarndicesesequivalenteausarpunterosdeunaformamscmoda.

GorkaUrrutia,19992001
cursoc@elrincondelc.com
www.elrincondelc.com

GuaNo.7

UESCICLOI2016

12/16

Procedimiento:
PARTE1a.Lecturadesdeelteclado.
/*
Conesteprogramasetratademostrarcomoasignardatosdesdeeltecladoaunarreglo.RecordarqueJAMAS
sedebesobrepasarlacapacidaddelarregloyporesoseutilizaelbreak.
*/
1.#include<stdio.h>
2.#defineMAX8//Limitedelarreglo
3.intmain(intargc,char*argv[])
4.{
5.floatA[MAX];
6.intindice=0,p;
7.doif(indice>=8)break;
8.elsescanf("%f",A+indice++);
9.while(getchar()!=EOF);
10.printf("\n\n\nIndiceDatoDireccion\n");
11.for(p=0;p<indice;p++)
12.printf("%4d%14.3g%10x\n",p,*(A+p),A+p);
13.return0;
14.
}//finmain
15.

PARTE1b.Encontrartodaslasdiferencias,ConpunterosoSinpunterosdelos
siguientesprogramas:
ProgramaA:
1.intmain(intargc,char*argv[])
2.{
3.floatA[MAX];
4.intindice=0,p;
5.doif(indice>8)break;
6.elsescanf("%f",A+indice++);
7.while(getchar()!=EOF);
8.printf("\nIndiceDatoDireccion\n");
9.for(p=0;p<indice;p++)
10.printf("%4d%14.3g%10x\n",p,*(A+p),A+p);
11.return0;
12.}

GuaNo.7

UESCICLOI2016

13/16

ProgramaB:
1.intmain(intargc,char*argv[])
2.{
3.floatA[MAX];
4.intindice=0,p;
5.doif(indice>=8)break;
6.elsescanf("%f",&A[indice++]);
7.while(getchar()!=EOF);
8.printf("\nIndiceDatoDireccion\n");
9.for(p=0;p<indice;p++)
10.printf("%4d%14.3g%10x\n",p,A[p],&A[p]);
11.return0;
12.}

PARTE2.Lecturadesdearchivo.
/*
Conesteprogramasetratademostrarcomoasignardatosdesdeelunarchivoaunarreglo.Recordarque
JAMASsedebesobrepasarlacapacidaddelarregloyporesoseutilizaelbreak.
*/
1.#include<stdio.h>
2.#defineMAX20//Limitedelarreglo
3.intmain(intargc,char*argv[])
4.{
5.floatA[MAX];
6.intindice=0,p;
7.FILE*f;
8.if(argc!=2)exit(1);
9.else
10.{
11.f=fopen(argv[1],"r");
12.for(indice=0;indice<MAX;indice++)
13.fscanf(f,"%f",A+indice);
14.printf("\n\n\nIndiceDatoDireccion\n");
15.for(p=0;p<indice;p++)
16.printf("%4d%14.3g%10x\n",p,*(A+p),A+p);
17.}//finifelse
18.return0;
19.}
Unasolucinsinpunteros,escambiandolassiguienteslneas:
13.fscanf(f,"%f",&A[indice]);
16.printf("%4d%14.3g%10x\n",p,A[p],&A[p]);

GuaNo.7

UESCICLOI2016

14/16

PARTE3.Mtododelaburbuja.
/*
Esteprogramaordenaunarreglodemayoramenorutilizandoelmtododela
burbuja.
*/
1.#include<stdio.h>
2.#defineMAX50//Limitedelarreglo
3.intmain(intargc,char*argv[])
4.{
5.floatA[MAX];
6.intindice,pasada,temp;
7.FILE*f;
8.if(argc!=2)exit(1);
9.else
10.{
11.f=fopen(argv[1],"r");
12.for(indice=0;indice<MAX;indice++)
13.fscanf(f,"%f",A+indice);
14./*Enestaseccinseimprimeelarregooriginal*/
15.printf("\n\nArreglooriginal\n\n");
16.for(indice=0;indice<MAX;indice++)
17.if(!(indice%10))printf("\n");
18.elseprintf("%8g",*(A+indice));
19./*Enestaseccionseaplicaelmetododelaburbuja*/
20.for(pasada=1;pasada<MAX;pasada++)
21.for(indice=0;indice<MAX1;indice++)
22.if(A[indice]>A[indice+1])
23.{
24.temp=A[indice];
25.A[indice]=A[indice+1];
26.A[indice+1]=temp;
27.}//finif
28./*Enestaseccionseimprimeelarregoordenado*/
29.printf("\n\nArregloordenado\n\n");
30.for(indice=0;indice<MAX;indice++)
31.if(!(indice%10))printf("\n");
32.elseprintf("%8g",*(A+indice));
33.fclose(f);
34.printf("\n");
35.}//finelse
36.return0;
37.}//finmain

GuaNo.7

UESCICLOI2016

15/16

Asignacin:
1.Utilizarelmtododelaburbuja,paraordenarunarreglodenmerosrealesyqueseimprimandemayora
menor.
2.Guardarenunarreglolosprimeros50nmerosprimos,ydespusestosdatospoderguardarlosenunarchivo
local.
3.Utilizandoarreglosylaregladeltrapezoidalencontrarelreabajolacurva.Elegirunafuncinmatemticay
leerdesdeeltecladon,xo,xn.

4.Enunarreglode80elementosasignarlosnmerosdeBernoulli.Esdecirqueenelprimerelementodeber
estarB1ensesegundoelementoB2yassucesivamente.Ademssedebeimprimirenunarchivoenformade
tabla.

5.PormediodeunprogramaescritoenANSICguardarenunarreglolosprimeros100trminosdelasiguiente
serie.

GuaNo.7

UESCICLOI2016

16/16

También podría gustarte