5.1
5.1. Definición de una tabla y acceso a los datos Una tabla, vector, matriz o array (que algunos autores traducen por “arreglo! es un con"unto de elementos, todos los cuales son del mismo tipo. #stos elementos tendr$n todos el mismo nombre, y ocupar$n un espacio contiguo en la memoria. %or e"emplo, si queremos definir un grupo de & n'meros enteros, usaramos int ejemplo int ejemplo[ [4];
%odemos acceder a cada uno de los valores individuales indicando su nombre (e"emplo! y el n'mero de elemento que nos interesa, pero con una precaución) se empieza a numerar desde *, as que en el caso anterior tendramos & elementos, que seran e"emplo+*, e"emplo+1, e"emplo+-, e"emplo+. /omo e"emplo, vamos a definir un grupo de 5 n'meros enteros y 0allar su suma) // Introducción a C++, Nacho Cabanes // Ejemplo 0!0"# // $rimer ejemplo de tablas
%include &iostream' usin( namespace namespace std; std;
int main int main)* )* int numero int numero[ [];
// n arra- de numeros enteros
int suma; int suma;
// n entero .ue (uardar la suma
numero[ numero [0] 100 100; ;
numero["] "0 numero[ "0; ;
numero[1] "00 numero[ "00; ;
numero[] 50 numero[ 0; ;
// 2es damos 3alores
numero[4] 00;
suma numero[0] +
// 6 hallamos la suma
numero["] + numero[1] + numero[] + numero[4]; cout && 78u suma es 7 && suma; /* Nota: esta es la forma más ineficiente e incómoda... Ya lo iremos mejorando */
return 0; 9
Ejercicios propuestos: •
(5.1.1) Un programa que pida al usuario & n'meros, los memorice
(utilizando una tabla!, calcule su media aritmtica y despus muestre en pantalla la media y los datos tecleados. •
(5.1.2) Un programa que pida al usuario 5 n'meros reales y luego los
muestre en el orden contrario al que se introdu"eron.
5.-. 2alor inicial de una tabla 3l igual que ocurra con las variables “normales, podemos dar valor a los elementos de una tabla al principio del programa. 4er$ m$s cómodo que dar los valores uno por uno, como 0emos 0ec0o antes. #sta vez los indicaremos todos entre llaves, separados por comas) // Introducción a C++, Nacho Cabanes // Ejemplo 0!01# // 8e(undo ejemplo de tablas
%include &iostream' usin( namespace std;
int main)* int numero[]
// n arra- de n:meros enteros
100, "0, "00, 50, 009;
int suma;
// n entero .ue (uardar la suma
suma numero[0] +
// 6 hallamos la suma
numero["] + numero[1] + numero[] + numero[4]; cout && 78u suma es 7 && suma; /* Nota: esta forma es algo menos engorrosa, pero todavía no */ /* está bien hecho.
Lo segiremos mejorando */
return 0; 9
Ejercicios propuestos: •
(5.2.1) Un programa que almacene en una tabla el n'mero de das que
tiene cada mes (supondremos que es un ao no bisiesto!, pida al usuario que le indique un mes (16enero, 1-6diciembre! y muestre en pantalla el n'mero de das que tiene ese mes. •
(5.2.2) Un programa que almacene en una tabla el n'mero de das que
tiene cada mes (ao no bisiesto!, pida al usuario que le indique un mes (e". - para febrero! y un da (e". el da 15! y diga qu n'mero de da es dentro del ao (por e"emplo, el 15 de febrero sera el da n'mero &7, el 1 de diciembre sera el da 75!.
5.. 8ecorriendo los elementos de una tabla #s de esperar que e9ista una forma m$s cómoda de acceder a varios elementos de un array, sin tener siempre que repetirlos todos, como 0emos 0ec0o en
suma numero[0] + numero["] + numero[1] + numero[] + numero[4];
#l “truco consistir$ en emplear cualquiera de las estructuras repetitivas que ya 0emos visto (:0ile, do..:0ile, for!. ;o m$s 0abitual, ya que sabemos cu$ntos elementos tiene un array, es usar un
%include &iostream' usin( namespace std;
int main)* int numero[]
// n arra- de n:meros enteros
100, "0, "00, 50, 009;
int suma;
// n entero .ue (uardar la suma
int i;
// $ara recorrer el arra-
suma 0;
// =alor inicial
// 6 hallamos la suma
suma + numero[i];
cout && 78u suma es 7 && suma; return 0; 9
#n este caso, que sólo sum$bamos 5 n'meros, no 0emos escrito muc0o menos, pero si traba"$semos con 1**, 5** o 1*** n'meros, la ganancia en comodidad s que est$ clara. Ejercicios propuestos:
•
(5.3.1) 3 partir del programa propuesto en 5.-.-, que almacenaba en una
tabla el n'mero de das que tiene cada mes, crear otro que pida al usuario que le indique la fec0a, detallando el da (1 al 1! y el mes (16enero, 1-6diciembre!, como respuesta muestre en pantalla el n'mero de das que quedan 0asta final de ao. •
(5.3.2) /rear un programa que pida al usuario 1* n'meros enteros y luego
los muestre en orden inverso (del 'ltimo al primero!, usando
(5.3.3) /rear un programa que pida al usuario 1* n'meros reales, calcule
su media y luego muestre los que est$n por encima de la media. •
(5.3.4) Un programa que pida al usuario 1* n'meros enteros y calcule (y
muestre! cu$l es el mayor de ellos. #n fsica se usan muc0o los < vectores<, para representar magnitudes que no se pueden e9presar sólo con un n'mero. %or e"emplo, para una temperatura basta con decir cosas como , sino que tambin es importante en qu dirección (y sentido! se aplica esa fuerza) no tendr$ el mismo efecto si se aplica en el centro de un cuerpo o en un e9tremo, ni si comprime que si estira. Un vector se suele representar a partir de sus < componentes<, que son las coordenadas de su e9tremo (suponiendo que comienza en el punto (*,*!. Un vector en el plano tendr$ dos componentes (9,y! y un vector en el espacio tendr$ componentes (9,y,z!.como un con"unto de varias coordenadas. 3s, un programa que pida al usuario las coordenadas de - vectores en el espacio y 0alle su vector suma sera) // Introducción a C++, Nacho Cabanes // Ejemplo 0!04# // =ectores, primer contacto
%include &iostream' usin( namespace std;
int main)*
// $edimos los datos del primer 3ector
// $edimos los datos del se(undo 3ector
// Calculamos la suma
3ector8uma[i] 3ector"[i] + 3ector1[i];
// 6 mostramos el resultado cout && 7El 3ector suma es 7;
return 0;
9
>o veremos m$s detalles sobre vectores, porque este no es un curso de fsica. %ero s propondemos algunos e"ercicios para que pueda aplicar sus conocimientos quien ya 0a estudiado con anterioridad lo que es un vector... Ejercicios propuestos sobre vectores: •
(5.3.5) Un programa que pida al usuario los datos de dos vectores en el
plano (- coordenadas! y calcule su diferencia. •
(5.3.6) Un programa que pida al usuario las componentes de dos vectores
en el espacio ( coordenadas! y calcule su producto escalar. •
(5.3.7) Un programa que pida al usuario las componentes de dos vectores
en el espacio y calcule su producto vectorial. •
(5.3.8) Un programa que pida al usuario dos vectores en el plano (-
coordenadas! y diga si son linealmente dependientes (sus componentes son proporcionales!.
5.&. ?ablas bidimensionales %odemos declarar tablas de dos o ms dimensiones . %or e"emplo, si queremos guardar datos de dos grupos de alumnos, cada uno de los cuales tiene -* alumnos, tenemos dos opciones) •
%odemos usar int datos3lumnos+&* y entonces debemos recordar que los -* primeros datos corresponden realmente a un grupo de alumnos y los -* siguientes a otro grupo.
•
@ bien podemos emplear int datos3lumnos+-+-* y entonces sabemos que los datos de la forma datos3lumnos+*+i son los del primer grupo, y los datos3lumnos+1+i son los del segundo.
#n cualquier caso, si queremos indicar valores iniciales, lo 0aremos entre llaves, igual que si fuera una tabla de una 'nica dimensión. 2amos a verlo con un e"emplo de su uso) // Introducción a C++, Nacho Cabanes // Ejemplo 0!0# // >rra- de dos dimensiones
%include &iostream' usin( namespace std;
int main)* int notas[1]["0] ", 1, , 4, , ?, @, A, B, "09, "", "1, ", "4, ", "?, "@, "A, "B, 10 9 9;
cout && 72a nota del tercer alumno del (rupo " es 7 && notas[0][1];
return 0; 9
#ste tipo de tablas son las que se usan tambin para guardar matrices, cuando 0ay que resolver problemas matem$ticos m$s comple"os. %or e"emplo, un programa que pida al usuario los datos de dos matrices de 9 y luego muestre su suma podra ser as)
// Introducción a C++, Nacho Cabanes // Ejemplo 0!0? // atrices, primer contacto
%include &iostream' usin( namespace std;
int main)*
// $edimos los datos de las dos matrices
// Calculamos la suma
matriD8uma[
// 6 mostramos el resultado )puede salir un poco descolocado* cout && 72a matriD suma es 7 && endl;
return 0; 9
!uidado) no podemos dar por sentado que los datos de un array tengan valor
inicial *, sino que pueden contener
%include &iostream' usin( namespace std;
int main)*
// $edimos los datos de las dos matrices
&& 7, dime el dato de la
// Calculamos la suma
matriD8uma[
// 6 mostramos el resultado )puede salir un poco descolocado* cout && 72a suma es 7;
return 0; 9
5.2 MANEJO ARCHIVOS
5.2 "rc#ivos rea$es y virtua$es
3rc0ivo 2irtual y 3rc0ivo 8eal %n arc#ivo virtua$ (&i'.5.2.1) es un arc0ivo de uso temporal que es utilizado por los procesos del sistema mientras se est$n e"ecutando dic0os procesos. #stos arc0ivos se crean durante la e"ecución de un sistema y los utiliza para el almacenamiento de información, intercambio y organización mientras se e"ecuta el sistema (Aig. 5.-.-!, su tamao es muy variable y terminan al detener la e"ecución del sistema, muc0os de ellos son borrados, por e"emplo, los arc0ivos *.tmp(Aig. 5.-.! . 4e le conoce como arc0ivo virtual, aquel que contiene los datos generados por el usuario.
Fig.5.2.1 Archivo virtual
Fig. 5.2.2 Ejecución del proceso
Fig. 5.2.3 Archivos temporales(*.tmp) "rc#ivo ea$ (&i'. 5.2.4) ) #s un ob"eto que contiene programas, datos o cualquier otro elemento. Un arc0ivo se muestra de manera real, en la información del espacio que ocupa en un disco duro o sistema de almacenamiento, en otras palabras su tamao en bytes.
Fig. 5.2. Ejemplos de archivos reales
5.1 Concepto Son los algoritmos y estrctras l!gicas tili"a#as para po#er acce#er a la in$ormaci!n %e tenemos en el #isco. Ca#a no #e los sistemas operati&os crea estas estrctras y logaritmos #e #i$erente manera in#epen#ientemente #el 'ar#(are. El #esempe)o #e nestro #isco #ro* la con+a,ili#a#* segri#a#* capaci#a# #e e-pansi!n y la compati,ili#a#* estar en $nci!n #e estas estrctras l!gicas. /at 120 Es el sistema #e arc'i&os #e OS* y es con el %e $ormateamos los #is%etes. /e my tili"a#o en las primeras Cs. /at 130 Este sistema #e arc'i&os ten4a mc'as limitaciones* por eemplo si el #isco #ro era mayor #e 2 67* era imposi,le particionarlos y no sa,a nom,re largos en los arc'i&os* solo 8 caracteres. /at 920 /e tili"a#o a partir #e 1::;* y p#o ser tili"a#o en
sistema y los tili"a para el almacenamiento #e in$ormaci!n* intercam,io y organi"aci!n mientras se eecta el sistema >/ig. 5.2.2?* s tama)o es my &aria,le y terminan al #etener la eecci!n #el sistema* mc'os #e ellos son ,orra#os* por eemplo* los arc'i&os @.tmp 5.9 Componentes #e n sistema #e arc'i&os o con$orman to#as a%ellas rtinas encarga#as #e a#ministrar to#os los aspectos relaciona#os con el maneo #e Arc'i&os. En BNI se #e+ne n /ile System como n sistema #e so$t(are #e#ica#o a la creaci!n* #estrcci!n* organi"aci!n y lectra* escritra y control #e acceso #e los arc'i&os* $ncionalmente los componentes #e n sistema #e arc'i&os son lengaes #e coman#os* interpreta#or #e coman#os* manea#or #el almacenamiento secn#ario* sistema #e entra#a y sali#a y mecanismos #e respal#o y recperaci!n. En general* n Sistema #e Arc'i&os est compesto por0 MDto#os e Acceso* A#ministraci!n e Arc'i&os* A#ministraci!n e Almacenamiento Secn#ario* Mecanismos e Integri#a#. MDto#os e Acceso. Se ocpan #e la manera en %e se ten#r acceso a la in$ormaci!n almacena#a en el arc'i&o. Eemplo0 Secencial* irecto* in#e-a#o* etc. A#ministraci!n e Arc'i&os. Se ocpa #e o$recer los mecanismos para almacenar* compartir y asegrar arc'i&os* as4 como para 'acer re$erencia a ellos. A#ministraci!n e Almacenamiento Secn#ario. Se ocpa #e asignar espacio para los arc'i&os en los #ispositi&os #e almacenamiento secn#ario. En la sigiente +gra se mestra n eemplo #e la a#ministraci!n #e espacio en n #isco #ro. 5. Organi"aci!n l!gica y $4sica Se re+ere a las #i$erentes maneras en las %e pe#e ser organi"a#a la in$ormaci!n #e los arc'i&os* as4 como las #i$erentes maneras en %e Dsta pe#e ser accesa#a. a#o %e 'ay 2 ni&eles #e &isi!n #e los arc'i&os >$4sico y l!gico?* se pe#e 'a,lar tam,iDn #e 2 aspectos #e organi"aci!n #e arc'i&os0 Organi"aci!n #e arc'i&os l!gicos y #e arc'i&os $4sicos. /ig. 5..1 Organi"aci!n #e n sistema #e arc'i&os tili"an#o #irectorios. Organi"aci!n l!gica. a mayor4a #e las compta#oras organi"an los arc'i&os en erar%4as llama#as carpetas* #irectorios o catlogos. >El concepto es el mismo in#epen#ientemente #e la terminolog4a sa#a.? Ca#a carpeta pe#e contener n n=mero ar,itrario #e arc'i&os* y tam,iDn pe#e contener otras carpetas. as otras carpetas pe#en contener to#a&4a ms arc'i&os y carpetas* y as4 scesi&amente* constryDn#ose n estrctra en r,ol en la %e na Fcarpeta ra4"G >el nom,re &ar4a #e na compta#ora a otra? pe#e contener cal%ier n=mero #e ni&eles #e otras carpetas y arc'i&os. A las carpetas se les pe#e #ar nom,re e-actamente igal %e a los arc'i&os >e-cepto para la carpeta ra4"* %e a men#o no tiene nom,re?. El so #e carpetas 'ace ms $cil organi"ar los arc'i&os #e na manera l!gica. 5.5 Mecanismos #e acceso a los arc'i&os E-isten &arios mecanismos para acce#er los arc'i&os0 irectorios* #escriptores #e arc'i&os* mecanismos #e control #e acceso y proce#imientos para a,rir y cerrar arc'i&os. escriptores #e arc'i&os. El #escriptor #e arc'i&os o ,lo%e #e control #e arc'i&os es n ,lo%e #e control %e contiene in$ormaci!n %e el sistema necesita para a#ministrar n arc'i&o. Es na estrctra my #epen#iente #el sistema. e#e inclir la sigiente in$ormaci!n0 Nom,re •
sim,!lico #el arc'i&o. ocali"aci!n #el arc'i&o en el almacenamiento secn#ario. Organi"aci!n #el arc'i&o >mDto#o #e organi"aci!n y acceso?. ipo #e #ispositi&o. atos #e control #e acceso. ipo >arc'i&o #e #atos* programa o,eto* programa $ente* etc.?. isposici!n >permanente contra temporal?. /ec'a y tiempo #e creaci!n. /ec'a #e #estrcci!n. /ec'a #e la =ltima mo#i+caci!n. Sma #e las acti&i#a#es #e acceso >n=mero #e lectras* por eemplo?. os #escriptores #e arc'i&os selen mantenerse en el almacenamiento secn#ario se pasan al almacenamiento primario al a,rir el arc'i&o. El #escriptor #e arc'i&os es controla#o por el sistema #e arc'i&os el sario pe#e no 'acer re$erencia #irecta a Dl. 5.3 Maneo #e espacio en memoria secn#aria A #i$erencia #e la Memoria rincipal la Memoria Secn#aria * a-iliar* masi&a* e-terna no es tan &elo" pero tiene gran capaci#a# para almacenar in$ormaci!n en #ispositi&os tales como #iscos* cintas magnDticas* #iscos !pticos. /recentemente los #atos y programas se gra,an en la Memoria Secn#aria * #e esta $orma* can#o se eecta &arias &eces n programa o se tilicen repeti#amente nos #atos* no es necesario #arlos #e ne&o a tra&Ds #el #ispositi&o #e entra#a. 5.; Mo#elo err%ico El #irectorio contiene n connto #e #atos por ca#a arc'i&o re$erencia#o. /ig. 5.;.1 Eemplo #e #irectorio err%ico Bna posi,ili#a# es %e el #irectorio contenga por ca#a arc'i&o re$erencia#o0 El nom,re. Ss atri,tos. as #irecciones en #isco #on#e se almacenan los #atos. Otra posi,ili#a# es %e ca#a entra#a #el #irectorio contenga0 El nom,re #el arc'i&o. Bn apnta#or a otra estrctra #e #atos #on#e se encentran los atri,tos y las* #irecciones en #isco. 5.8 Mecanismos #e recperaci!n en caso #e $alla Recperaci!n os arc'i&os y #irectorios se mantienen tanto en memoria principal como en #isco* y #e,e tener. Se ci#a#o para %e los $allos #el sistema n o pro&o%en na pDr#i#a #e #atos o na inco'erencia en los mismos. Compro,aci!n #e co'erencia. Como 'emos e-plica#o en la Secci!n 11.9* parte #e la in$ormaci!n #e #irectorios se almacena en la memoria principal >o en cac'D? para acelerar el acceso. a in$ormaci!n #e #irectorios en11a memoria principal est* generalmente* ms actali"a#a %e la correspon#iente in$ormaci!n en el #isco* por%e la in$ormaci!n #e #irectorios almacena#a en cac'D n o se escri,e necesariamente en el #isco na#a ms pro#cirse la actali"aci!n. Consi#ere* entonces* el posi,le eemplo #e n $allo #e la compta#ora. El conteni#o #e la cac'D y #e los ,=$eres* as4 como #e las operaciones #e ES %e se est&ieran reali"an#o en ese momento* pe#en per#erse* y con Dl se per#ern los cam,ios reali"a#os en los #irectorios correspon#ientes a los arc'i&os a,iertos. ic'o sceso pe#e #ear el sistema #e arc'i&os en n esta#o inco'erente. El esta#o real #e algnos arc'i&os no ser el %e se #escri,e en la estrctra #e #irectorios. Con $recencia* sele eectarse n programa especial #rante el reinicio para compro,ar las posi,les inco'erencias #el #isco y corregi#as. •
•
•
•
•
•
•
•
•
•
•
•
•
•
•