Professional Documents
Culture Documents
LP_2012
WIWI&DATA-INGS
3.- Leer una slaba y una palabra y escribir en qu posicin de la palabra est la slaba si es que est,
LP_2012
WIWI&DATA-INGS
PRINT*,"DAME UN NOMBRE" READ*, busca !Los datos a buscar en mayusculas switch=0 DO i=i+1 IF (nom(i) == busca) THEN switch=1 ipos=i PRINT*,"EL NOMBRE SE ENCUENTRA EN LA POSICION ",ipos END IF IF (i == 4 .OR. switch == 1) EXIT END DO IF (switch == 0) THEN PRINT*,"EL NOMBRE NO ESTA EN LA LISTA" END IF END PROGRAM Problema4
5.- Inicializar los cdigos y los nombres de diez provincias en dos vectores carcter. A continuacin, se pide al usuario un cdigo por teclado y el programa debe mostrar el nombre de la provincia correspondiente. Si no existe el cdigo ledo, mostrar un mensaje que avise de ello. El programa se ejecuta mientras el usuario lo desee.
PROGRAM Problemas5 IMPLICIT NONE INTEGER:: i CHARACTER (LEN=1) :: resp CHARACTER(LEN=2):: cod CHARACTER (LEN=2), DIMENSION(10) ::tcod=(/'A ','IC ','MO','T ','LI','AR ','LL','TU','PI','CA'/) CHARACTER (LEN=12),DIMENSION(10) :: tnom=(/'ANCASH ','ICA ','MOQUEGUA','TACNA ', 'LIMA', & & 'AREQUIPA','LA LIBERTAD','TUMBES ','PIURA ', 'CAJAMARCA'/) DO PRINT*,"DAME UN CODIGO DE PROVINCIA" READ*, cod ! ***BUSQUEDA EN EL ARRAY i=0 DO i=i+1 IF (cod == tcod(i) .OR. i == 10) EXIT END DO IF (cod /= tcod(i)) THEN PRINT*, "ERROR. NO EXISTE ESE CODIGO" ELSE PRINT*, "LA PROVINCIA ES ",tnom(i) END IF PRINT*, "CONTINUAR(S/N)?" READ*,resp IF (resp /= "S" .AND. resp /= "s") EXIT END DO END PROGRAM Problema5
6.- Ordenar ascendentemente los nombres de tres personas que se introducen por teclado. Utilizar el mtodo de la burbuja.
PROGRAM Problema6 IMPLICIT NONE INTEGER, PARAMETER::N=3 CHARACTER (LEN=20), DIMENSION(N) :: nom INTEGER:: i CALL leer(nom,N) CALL ordenar(nom,N) PRINT*, "LA LISTA ORDENADA ASCENDENTEMENTE ES" PRINT*,(nom(i),i=1,N) END PROGRAM Problema6 SUBROUTINE ordenar(x,n) !Segunda subrutina IMPLICIT NONE INTEGER, INTENT(IN):: n CHARACTER (LEN=*), DIMENSION(n), INTENT(IN OUT) :: x CHARACTER (LEN=20)::aux INTEGER:: i,j DO i=n-1,1,-1 DO j=1,i SUBROUTINE leer(x,tam) !Primera subrutina IMPLICIT NONE INTEGER, INTENT(IN):: tam CHARACTER (LEN=20), DIMENSION(tam), INTENT(OUT) :: x INTEGER:: i DO i=1,tam PRINT*,"DAME NOMBRE ENTRE APOSTROFES",i READ*,x(i) END DO RETURN END SUBROUTINE leer
LP_2012
WIWI&DATA-INGS
PROBLEMAS PROPUESTOS 1.- Hacer un programa que lea dos palabras y las muestre ordenadas alfabticamente. (No usar ningn mtodo de ordenamiento) 2.- Programa que pida una frase y cuente el nmero de palabras. 3.- Programa que lea una frase y cuente el nmero de vocales de cada palabra mostrando la de mayor nmero por pantalla. Usa una subrutina para leer la frase y otra para determinar la palabra que contiene ms vocales. 4.- Programa que lea una palabra aguda y diga si requiere tilde o no segn las reglas de acentuacin. El programa se ejecuta hasta que el usuario introduzca la palabra FIN. Usa programacin modular para la construccin del programa. 5.- Programa que lea una palabra y el idioma en que est escrita (ingls/castellano) y muestre su traduccin (castellano/ingls). Suponer que el diccionario est formado por las palabras siguientes: Computador, ratn, pantalla, teclado, programa, ejecutar. Computer, mouse, screen, keyboard, program, execute. Usa programacin modular para la construccin del programa.
6.- Despus de transcribir, compilar y ejecutar el programa (modificar si es necesario), escriba el enunciado que correspondera al programa
PROGRAM LongitudCadena IMPLICIT NONE CHARACTER (LEN=50) :: cad PRINT*, "Escribe algn texto" READ*, cad PRINT*, "La cadena puede almacenar un mximo de ",LEN(cad)," caracteres" PRINT*, "Has escrito ",LEN_TRIM(cad)," caracteres" PRINT*, "Has escrito ",LEN(TRIM(cad))," caracteres" END
7.- Despus de transcribir, compilar y ejecutar el programa (modificar si es necesario), escriba el enunciado que correspondera al programa
PROGRAM Caracter IMPLICIT NONE CHARACTER :: car PRINT*, "Teclea un carcter: " READ*, car PRINT*, "El cdigo ASCII de ",car," es ",IACHAR(car) END PROGRAM Caracter
8.- Despus de transcribir, compilar y ejecutar el programa (modificar si es necesario), escriba el enunciado que correspondera al programa
PROGRAM EliminaB1 IMPLICIT NONE CHARACTER(LEN=100) :: cad INTEGER :: pos
LP_2012
WIWI&DATA-INGS
! Leemos la cadena de entrada PRINT*,"Dime la cadena" READ*,cad pos=1 ! Damos un valor para obligar a entrar la primera vez al bucle DO WHILE (pos/=0) pos=INDEX(cad,'b') ! Posicin de la letra 'b' IF (pos==0) pos=INDEX(cad,'B') ! Si no hay 'b' buscamos la 'B' ! Si hay 'b' o 'B' la eliminamos de cad IF (pos/=0) cad=cad(:pos-1)//cad(pos+1:) ENDDO ! Escribimos el resultado PRINT*,"La cadena resultante es: ",cad END PROGRAM
9.- Despus de transcribir, compilar y ejecutar el programa (modificar si es necesario), escriba el enunciado que correspondera al programa
PROGRAM Conversion IMPLICIT NONE CHARACTER(LEN=100) :: cad INTEGER :: i PRINT*, "Dime una cadena de caracteres" READ*, cad DO i=1, LEN_TRIM(cad) IF (cad(i:i)>='a' .AND. cad(i:i)<='z') THEN cad(i:i) = ACHAR(IACHAR(cad(i:i))-32) ELSE IF (cad(i:i)=='') THEN cad(i:i) = '' ELSE IF (cad(i:i)=='') THEN cad(i:i) = '' ELSE IF (cad(i:i)=='') THEN cad(i:i) = '' ELSE IF (cad(i:i)=='') THEN cad(i:i) = '' ELSE IF (cad(i:i)=='') THEN cad(i:i) = '' ELSE IF (cad(i:i)=='') THEN cad(i:i) = '' ELSE IF (cad(i:i)=='') THEN cad(i:i) = '' ENDIF ENDDO PRINT*, "La cadena en maysculas es: ", TRIM(cad) END
10.- Despus de transcribir, compilar y ejecutar el programa (modificar si es necesario), escriba el enunciado que correspondera al programa, adems debe analizar lnea por lnea las sentencias del programa (obligatorio)
CHARACTER (70) Line REAL, PARAMETER :: Pi = 3.1415927 REAL:: dx, X INTEGER::N,Trips dx = Pi/20.0 Trips = INT(2.0*Pi/dx + dx/2.0 ) + 1.0 X=0 PRINT "(' X', T37, 'SIN(X)')" !Titulo PRINT* DO I = 1, Trips WRITE( line, '(F4.2)' ) X ! Line es una archivo interno N = NINT( 25 * (1 + SIN(X)) ) + 15 Line(40:40) = ':' Line(N:N) = '*' PRINT 10, Line
LP_2012
WIWI&DATA-INGS
11.- Despus de transcribir, compilar y ejecutar el programa (modificar si es necesario), escriba el enunciado que correspondera al programa
CHARACTER(80) Line INTEGER :: Blanks = 0 INTEGER I PRINT*,"INGRESE TEXTO CONTENIeNDO ESPACIOS EN BLANCOS" READ*, Line ! use quotes if text contains blanks DO I = 1, LEN_TRIM( Line ) IF (Line(I:I) == " ") Blanks = Blanks + 1 END DO PRINT*,Blanks END
12.- Despus de transcribir, compilar y ejecutar el programa (modificar si es necesario), escriba el enunciado que correspondera al programa
INTEGER:: I, PosStop CHARACTER(LEN=80):: Sentence READ*,Sentence ! enclose in quotes if blanks in text PRINT*, Sentence PosStop = INDEX(Sentence, "." ) PRINT*, PosStop DO I = PosStop-1, 1, -1 WRITE (*, "(A1)", ADVANCE = "NO") Sentence( I:I ) END DO END
13.- Despus de transcribir, compilar y ejecutar el programa (modificar si es necesario), escriba el enunciado que correspondera al programa
PROGRAM Zeller CHARACTER (9), DIMENSION(0:6) :: DayOfWeek = & (/ "Sunday ", "Monday ", "Tuesday ", & "Wednesday", "Thursday ", "Friday ", "Saturday " /) INTEGER::Centy, Day, Month, Year, F PRINT*, "Enter day, month, year:" READ*, Day, Month, Year Month = Month - 2 IF (Month <= 0) Month = Month + 12 IF (Month >= 11) Year = Year - 1 Centy = Year / 100 Year = MOD( Year, 100 ) ! year in century now F = INT(2.6 * Month - 0.2) + Day + Year + Year / 4 & & + Centy / 4 - 2 * Centy F = MOD( F, 7 ) PRINT*, DayOfWeek(F) END
14.- Despus de transcribir, compilar y ejecutar el programa (modificar si es necesario), escriba el enunciado que correspondera al programa PROGRAM BinToDec CHARACTER(LEN=80)::StrBin ! maximum length is 80 INTEGER, ALLOCATABLE :: Bin(:) INTEGER Dec, I, N PRINT*,"INGRESE UN NUMERO EN BINARIO" READ*, StrBin N = LEN_TRIM( StrBin ) ! number of binary digits
LP_2012
WIWI&DATA-INGS
ALLOCATE( Bin(N) ) READ(StrBin, "(80I1)") Bin ! reads first N digits Dec = 0 DO I = 1, N Dec = Dec + Bin(I) * 2 ** (N-I) END DO PRINT*, Dec END 15.- Despus de transcribir, compilar y ejecutar el programa (modificar si es necesario), escriba el enunciado que correspondera al programa program caracteres implicit none integer i, num, num1,symbol character*30 line character titulo*80 titulo="CANAL DE SECCION RECTANGULAR" print "(t26,a)", titulo print* num=20 num1=10 symbol=219 !la parte superior del canal, caracteres horizontales do i=1,num1 line(i:i)=achar(symbol) end do print 101, line, line 101 format(t21,a,t49,a) !caracteres verticales do i=1,num1 print 10, achar(symbol),achar(symbol) 10 format(t30,a,t49,a) end do !caracteres en la parte inferior do i=1,num line(i:i)=achar(symbol) end do print 200, line 200 format(t30,a) end program caracteres
16.-Teniendo en cuenta el programa numero 15, realice un programa que muestre un canal de seccin triangular. 17.-Teniendo en cuenta el programa numero 15, realice un programa que muestre un canal de seccin Trapezoidal
LP_2012
WIWI&DATA-INGS
Informacin terica
Datos carcter La longitud de una constante carcter puede ser de 0 a 2000. Pueden usarse como delimitadores un apstrofo (') o comillas (").
PRINT "(' ', I3, ' isn''t', I3)", i,j
Se
Funciones intrnsecas de caracteres CHAR(I,[kind]) Carcter en la posicin I en la secuencia del procesador. ICHAR(C) Posicin que ocupa el carcter C en la secuencia del procesador. INDEX(STR,SUB_STR,[back]) Posicin de comienzo de SUB_STR en STR. LGE, LGT, LLE, LLT(STR_A,STR_B) Comparaciones lexicograficas. Nuevas: ACHAR(I) Carcter en la posicin I en la secuencia ASCII IACHAR(C) Posicin que ocupa el carcter C en la secuencia ASCII. ADJUSTL(STR) Ajusta a la izquierda moviendo los blancos iniciales al final. ADJUSTR(STR) Ajusta a la derecha moviendo los blancos finales al principio. LEN_TRIM(STR) Longitud de STR sin los blancos finales. REPEAT(STR,N) Concatena STR consigo mismo N veces SCAN(STR,SET,[BACK]) Posicin del primer carcter por la izquierda de STR que est en SET. 0 si ninguno est. TRIM(STR) Subcadena inicial obtenida al suprimir los blancos finales. VERIFY(STR,SET,[BACK]) Posicin del primer carcter por la izquierda de STR que no est en SET. 0 si estn todos. ACHAR coincide con CHAR