P_68_E10-Cadenas+con+Numero+y+Nombre

=__**Leer edades y nombre y obtener la media de las edades**__=

> Leer cadenas formadas por un número (edad) y un nombre y obtener la media de las edades leídas

code format="pascal" PROGRAM P_68_E10 ; { strin_10 } USES Crt ; CONST iLONG_FISICA      = 20 ; iNUMERO_DE_CADENAS = 10 ; iINCORRECTO       = -1 ; TYPE tsCadenas = String [iLONG_FISICA] ;

FUNCTION fnsEliminarEspaciosInicFin (sCadena : tsCadenas) : tsCadenas ; BEGIN WHILE (sCadena[1] = ' ') AND (Length (sCadena) > 0) DO                Delete (sCadena, 1, 1) ;

WHILE (sCadena[Length (sCadena)] = ' ') AND (Length (sCadena) > 0) DO                Delete (sCadena, Length (sCadena), 1) ;

fnsEliminarEspaciosInicFin := sCadena ; END ;

PROCEDURE SepararNumeroNombre (   sCadena : tsCadenas;                               VAR iNumero : Integer ;                               VAR sNombre : tsCadenas); VAR iPosicError : Integer ; sNumero : tsCadenas ; BEGIN IF Length (sCadena) = 0 THEN BEGIN iNumero := iINCORRECTO ; sNombre := '' ; END ELSE BEGIN Val (sCadena, iNumero, iPosicError) ;

IF iPosicError = 0 THEN BEGIN iNumero := iINCORRECTO ; sNombre := '' ; END ELSE BEGIN sNombre := Copy (sCadena, iPosicError, Length (sCadena)) ;

sNombre := fnsEliminarEspaciosInicFin (sNombre) ;

sNumero := Copy (sCadena, 1, iPosicError - 1) ; VAL (sNumero, iNumero, iPosicError) ;

IF iPosicError <> 0 THEN iNumero := iINCORRECTO ; END ; END ; END ;

VAR {-- Variables del programa principal -} iNumCadena, iCorrectos, iEdad, iSumaEdades, iEdadMenor  : Integer ; sCadena, sNombre,  sNombreMenor : tsCadenas ; cEspera                         : Char ;

BEGIN { programa principal } Writeln ; WriteLN (' Programa que calcula media de las edades de ', iNUMERO_DE_CADENAS,            ' personas') ; Writeln ; Writeln ('Se debe escribir el nombre despues de la edad (ej. 12Eva)'); Writeln ;

iCorrectos := 0 ; iSumaEdades := 0 ; iEdadMenor := MAXINT ;

FOR iNumCadena := 1 TO iNUMERO_DE_CADENAS DO      BEGIN Writeln ; Write (iNumCadena:3, ' : Edad y Nombre (ej. 12Eva): ') ; Readln (sCadena) ;

SepararNumeroNombre (sCadena, iEdad, sNombre) ;

WriteLn ('     --- Edad: ', iEdad) ; WriteLn ('     - Nombre: #', sNombre, '#') ;

IF iEdad <> iINCORRECTO THEN BEGIN IF iEdad < iEdadMenor THEN BEGIN iEdadMenor  := iEdad ; sNombreMenor := sNombre ; END ; iSumaEdades := iSumaEdades + iEdad ;

iCorrectos  :=  iCorrectos + 1 ; END ; END ;

Writeln ('-'); IF iCorrectos = 0 THEN BEGIN Writeln ('No se ha introducido ningun dato correcto: NombreEdad (ej. 12Eva)') ; END ELSE BEGIN WriteLn ('Edad media: ', iSumaEdades / iCorrectos :0:2) ; WriteLn ('Edad menor: ', iEdadMenor) ; WriteLn ('   Nombre: ', sNombreMenor) ; END ; Writeln ('-');

Writeln ; cEspera := ReadKey ;

END. { Fin de STRIN_10.PAS } code