Tipos y Uso de Variables en C
Tipos y Uso de Variables en C
#
A
CLASE 1 f-
Tipos de variables
.int :
números enteros , siempre que no sean muy grandes 113 Xxx )
.
float :
variables reales
'
.
Char :
son un golpe de teclado ( retorno de carro n
'
)
. printf :
el ordenador nos habla C escribir algo en la consola )
print f Scarf
. Scarf :
para decirle algo nosotros ( guardamos algo en la memoria )
int % d I. d
float % f % f
Drintfl "
Usuario intro un num :
"
); → el ordenador nos habla
CIOUBLE I. f I. lf
scanfl , 8nA) ; → guarda la info en su memoria
Char i. C % C
TIPO de variable Nombre de
va leer la variable
que a
printfl "
El num introducido es : i. d
"
, num I ; → nos muestra la info que ha guardado
Para mostrar 2 decimales
•
.
•
Zf
LEIQ-abksti~haripr.int
-11 "
Intro una letra :
"
) ;
Flush ( stdin ) ;
→ sirve para guardar un
'
In '
en letra
SCGMFL "
% C "
, & letra ) ;
Declaración :
Otorgamos un nombre a una celda de memoria del ordenador
Inicialización :
asignamos un valor a la variable declarada .
Esta asignación la puede hacer el usuario o la podemos hacer
float b ;
|
prjnlfl
"
"
Intro num :
%
usuario
SCANFI "
% f "
,
Arum ) ;
b =
4.72 ; } código
Char letra ;
letra =
'
#
'
; comillas simples
MUM =
7.9 ;
las los
"
gracias Truncaciones descomponer que forman Utilizando los
-
a podemos un n en n , operadores % .
1
:
ALCAIDE (PGRA) 29/05/21
3 .
Atención a igualar variables de distinto Tipo
int num -
IMT ;
float num -
real ;
Char letra ;
✗ Inicializa
num -
int Íletra ;
num -
int =
num -
real ; > No me va a dar error ,
me va a dar un Warning
'
Operadores
.
Suma :
siempre el
.
Resto :
que
ordenador se
• Multiplicación :
encuentre un
División :
int int pensará
i
que
•
el resultado es int
a RESTO ( MÓDULO ) :
.
Divisiónimm :
FLOATMUM ; num =
float (b) a ;
int a. D; num =
b a ; → num -0
a =
9 ; MUM =
4 9 ;
D= 4; real
MUM =
4.0 9 ; → = real
¡ nt
FLOGT MUM ;
MUM 7
II. ; 7.000
= -
→
int int =
0.5 → 0
MI PRIMER PROGRAMA
Nombre :
Cris Alcaide
Programa :
Media dos enteros
Fecha :
29/05/21
Librerías
define PI 3.1416
cuerpo
float res ;
printfl
"
n Intro MUM 1 :
"
) ; }
SCQMFC "
% CI "
.
& MUM _
1) ;
printfl
" "
In INTO MUM 2 : ) ;
④ nfc
"
1. d "
, 8h4m 2) ;
2
esos
ALCAIDE (PGRA) 29/05/21
Control de flujo
F
preg preg preg
VIF F " F " F F
En el momento en el que se CUMDLC
V ODCI OPCZ
V
y
una de las condiciones de if , se
acción acción acción acción
acción acción
} el set } te / se if ( condición 2) {
} } elset
NACIÓN
y
las condiciones se definen con 3 tipos de operadores :
1 .
Relacionales : =
,
=
; ;
2. De igualdad : = =
; ! =
3 .
Lógicos :
88 ;
si todas las
condición :
PA condiciones son V
si almenos
P q poldq pq
< 1 condición es v
V V V V
V F F V
F V F V
F F F F
EEEEEIEEvacio.nu
ifla > =
b) & a b C Salida
printfl
"
1
"
) ; 3 2 1 1 3
} 5 1 3 1 2
iflb < =
c) 4 3 21 7 5
printfl );
" "
Z
"
printfl
"
3 ) ;
te / se if la > =
b) a siempre que me pidan hacer un
prirhtfl "
4 "
); menú →
hacer Un SWITCH
Geisel
printfl ) ;
" "
5
3
esos
ALCAIDE (PGRA) 29/05/21
MENÚ:
PTIMTFL OPCIÓN
"
"
IMTTO A ,
B , C :
) ;
fflllsh ( STCIIM ) ;
Scarf ( " I. C
"
, & ODC ) ;
ACCIÓN
' '
case A : comillas simples A
Case
'
a
'
: YCISC if ( OPC = =
'
B
'
OPC = = '
b '
34
Acción A Acción B
break ; Y el se if ( OPC = =
'
C
'
OPC = = '
c
'
34
case
'
B
'
: ACCIÓN C
case '
b
'
: } el se 4
break ; }
'
CQSC Cl :
case
'
C
'
: include CTYPEH
Acción C OPC =
TOUPPEP ( OPC ) ;
break ; OPC =
TOLOCOERCODC ) ;
default siempre ! !
~
Menú insensible de mayúsculas
} bucle de validación
Bucles
QEEEEEIEEsignacio.nu
.
¡ + + →
¡ =
¡ +1
.
j - -
→ i =
j -1
.
j *
=3 →
¡ =
¡ *
3
.
¡ + =
2 →
j = j + 2
BUCLE FOR
acción de
for ( inicialización ; condición ; iteración ) 4
¿ = O i < n ¡ ++
" Acción
acción de iteración :
es una línea de código que se
ejecuta después de cada iteración ( barrido del código dentro del bucle )
BUCLE DO-WHILE →
validación
EL n° de iteraciones es desconocido de antemano y cuando queremos conocer una serie de líneas de código antes
do 4
de evaluar la condición
✗ Acción
4
:
ALCAIDE (PGRA) 29/05/21
BUCLE WHILE
while l condición ) x cuando el n° de iteraciones es desconocido de antemano
✗ Acción
EEEEE :
1. la condición for siempre ha de ser una condición simple y que haya alusión a la variable que inicial izamos y
2. Con un bucle do -
while puede enfrentar cualquier problema que pueda hacer con un for , pero lo contrario no es cierto
i. =
0;
do 4 ( for en do -
while )
✗ Acción ian
¡ + + ;
le while ( condición ) ;
3. Pese a que los bucles for serán nuestra primera opción siempre que sea posible
4 .
siempre que tengamos que validar una entrada . Utilizamos un bucle de validación
las validaciones son necesarias siempre , solo si dicen que no es necesario validar ,
no valida remos
Ejerciciomotivaciónmmnn
Nombre :
-
Cris Alcaide
Programa :
Validación con un bucle while , num entero y entre 144
Fecha :
29105121 En el while tengo que inicializar para asegurarme de
2. *
1. ODC
=
0 ,
←
"
); ocurrido error
Pliutfl un
{
"
Intro num :
"
I. d
"
8mm ) 2 la condición que ponemos el if tiene ser igual a la
scanfl , ; .
en que
while
Plintfl "
Error
"
);
Ejerciciomotivaciónmmnn
Nombre :
Cris Alcaide
Programa :
validación num entero y entre 144 PIERREFITTE :
Para asegurarme de
que nuestro bucle no
Fecha :
29105121 se haga o ,
en la condición tenemos que usar una variable que se
da
"
);
Pliutfl
"
Intro num :
scanfl
"
I. d
"
, 8mm ) ;
Plintfl "
Error
"
);
5
Baz
ALCAIDE (PGRA) 29/05/21
E- jerciciomotivaciónmmnn
Nombre :
Cris Alcaide
Programa :
muestre todos los nos pares menores que uno entumecido por el usuario siempre que sea positivo
Fecha :
29105121
int num .
i ;
002
"
printfl
"
Intro num : ) ;
scanfl "
1. d
"
, drum ) ;
"
printfl "
Error ) ;
for Ii =
O ; i < num ; i + +14
if Li -1.2 =
O }
printfl
"
" I. d It , I );
retorno ;
le
LIBRERIAS
induce
.
STCIIO h .
printf ,
scanf
.
Math h .
Sqrt , POCO
. String .
h strcpy , STRCMP , STRLEM
.
STCKID h . MALIOC ,
CALOC
. CTYPC .
h tolocoer , toupper
.
time.tn rana
6
-
ALCAIDE (PGRA) 30/05/21
F -
CLASE 2 -
-
-
Dnrnogramatm
Nombre :
da Cris Alcaide
Programa :
Hacer un programa que muestre las tablas del 2,4 y 6 de manera consecutiva
Fecha : 30/05/21
include <
STCIIO .
te >
int i , j ;
for (i =
2 ; ¡ < =
6 ; i + =
2) {
"
printfl
"
Tabla del % d :
si ) ;
Forli -1 -
; i < =
10 ; j -1+14
"
printfl "
1. d * t.cl =
1. d In ,
i ,
y , i *
f) ;
te
} ¡ = 8 en este punto
• 11
y =
retorno ;
le
Dmrogramcimm
El elemento neutro en el producto es
Nombre :
. Cris Alcaide 5 ! =
5.4.3 -2.1
el 1 el la
y elemento neutro en
Programa : Factorial
suma es el 0 .
Fecha : 30/05/21
int num ,
ACUM ;
int i ;
"
printfl
"
Intro num : );
scanfl
"
d "
,
slnum ) ;
acum =
1;
for Ii =
num ; ¡ > =
1 ; i -
-
> {
acum * =
i
le
1. d ACUM ) ;
"
Drintfl "
% d! =
, num ,
retorno ,
7
:
ALCAIDE (PGRA) 30/05/21
Pfnogramcissm
Nombre :
Programa :
Números primos
Fecha : 30/05/21
int i ;
"
Printfl
"
Intro num :
);
scanfl "
d "
.
dnum ); lo inicializa 2
pq siempre va a ser divisible entre 1
for Ii =
2 ; I num ; i -1+14
iflnum % i =
-014
-
✗ no hago un dse con cont -1 pq por ejemplo el 6 no es divisible entre 4 y nos devolvería un 1
ACUM =D ;
} =dMbucpmmm
} 1. Iteración inicial del bucle
iflnum = =
1 11 num -
=D 11 acum = =
D) 4 2 .
Iteración intermedia del bucle
bucle
"
prinifl
"
El número no es primo ); 3 .
Iteración final del
leelse 4 4 .
Considerar casos específicos que quedan
printfl "
El número es primo
"
) ; fuera de la lógica del bucle
retorno ;
le
la
"
Pmrnogramalim Dado un num introducido C > o ) , devolver suma de todos los n divisibles entre 7 que son <
que el N
Nombre :
Cris Alcaide
Programa :
Suma números
Fecha :
30105121
int num ;
int suma =
0 ;
int i ;
DOL
"
printfl "
Intro num :
) ;
SCGNFL "
I. d
"
,
olnum ) ;
if ( num < =
D) {
"
printfl
"
Error ) ;
for ( i =
0 ; i < num ; i -1=714
sum + =
i ;
retorno ;
8
-
ALCAIDE (PGRA) 30/05/21
Pnrnogramatsm
*
Nombre :
Programa :
Triangulo *
* * *
Fecha :
30/05/21
* * * *
printfl
"
Intro altura :
"
) ; altura →
num -
filas
Scarf / "
Id
"
,
& altura ) ;
Forli =
1 ; ¡ ⇐ altura ; i -1+12 ✗ siempre van primero las filas pq nuestro cursor va de izq a der y de arriba a abajo
for lj =
1 ; j < =
i ; y + + ) }
"
printfl
"
* );
" "
prinifl In );
retorno ;
Pftgramacom
*
Nombre :
. Cris Alcaide
* *
Programa :
Triangulo *
* * *
Fecha :
30/05/21
* * * *
int filas ;
int num -
filas ;
int num -
AST ;
int espacios ;
printfl
"
Intro altura :
"
) ;
Scarf ( " Id
"
,
& num filas ) - ; num -
filas -
fila
for ( filas =
1 ; filas < =
num -
filas ; filas + + )} 3 *
espacios -1
-
; espacios < =
filas
( num fila )-
-
; espacios + + )}
for espacios > filas
.ie#ig0s---
2
lespacios-nu-mf.iq
; 2 * *
"
printfl
"
); # 3 1 * * *
} * * * *
for ( num -
CDT -1 ; num -
CDT < =
filas ; num -
Cest + +12
"
printfl )
"
*
;
printf
"
( " In ) ;
retorno ;
9
:
ALCAIDE (PGRA) 30/05/21
Funciones
2. Mejorar la presentación del Main aclarando el código , y también nuestra manera de pensar y revisar
Gramática 1 .
Tipo de variable que devuelve la función mediante el return
* 2. Nombre de la función la .
letra mayúscula
* 3 .
Argumentos de entrada
librerías
1 2 3
int Main ( Void ) { Una función que devuelve algo por medio del return ,
tiene que estar igualada a una
Declaración →
int sum ; variable que coincide con el tipo marcado en el DIOTOTIPO .
Cosas varias En la llamada tenemos que asegurarnos de mandar los argumentos de entrada de manera
sum =
suma ( × , y) ;
→ llamada En la llamada a la función , el ordenador Otorga un espacio de memoria desechable
retorno ; Además ,
en el momento de la llamada , se efectúa un paso por valor de los elementos
} de entrada ,
las variables del Main se copian en la memoria desechable de la función .
int suma ;
suma =
a +
D;
reiurn suma ;
}
tienen que coincidir
en el tipo
ETCMDLOMOTIVACIÓNN
Nombre :
Cris Alcaide
Programa :
Promedio 2 números
Fecha :
30105121
scanfl "
%d
"
.
slnuml ) ;
"
Drintfl "
INTRO NUMZ :
);
Scarf ( " 1. d
"
,
&MUMZ ) ;
media =
Promedio ( num ,
numz ) ;
printfl Media
" =
y .
. zf "
,
media ) ;
return 0 ;
10
:
ALCAIDE (PGRA) 30/05/21
Vector :
es una sucesión de números agrupados en posiciones de memoria consecutiva . Tienen que ser datos del mismo tipo
dimensión estática fija
int Vector [ N ] ; declaración de un vector estático de tamaño N
Vector
vector [ 0 ]
EQEIEMEL :
vector
UCCTOP [1 ]
Char cadena [ N ] ;
=
cadena 0 String pq empiezo
vector [ N -1 ] →
contando desde 0
Ejerciciomotivaciónmmmm crear un LECTOR estático que contenga la sucesión a 1. 2.3.4.54 y después multiplicado por 5
define N 100
INT VECTOR [ N ] ;
int i ;
dim =
5 ; siempre empiezo nunca llego al 5 , pq empiezo a contar en el = .
Í < =
( si pongo ti =
0 ; i < =
N ; i + + ) no me sale
en 0
Forli =
0 ; i < dim ; i + + la Warning pero está mal )
UECTOR [ i ] =
¡ +1 ;
le
for Ii =
0 ; i < dim ; i + + µ
UECTOR [ i ] * =
5;
le
retorno ;
le
Nombre :
Cris Alcaide
Programa :
rellenar vector y devolver MÓX
Máximum
Fecha :
30105121 Forma :
1 .
Igualamos Max al UCCTOR [ 0 ]
¡ ni maincuoid ) a Forli =
0 ; i < dim ; i + + la lógica :
INT MÓX =
vector [ 0 ] ; } grandes .
Según voy recorriendo el vector ,
Drintfl "
Intro dim :
"
); al número más alto ,
no se mete en el
printfl
"
"
Error );
11
Maurice
ALCAIDE (PGRA) 30/05/21
Ejercicio
~ mmmm
2 :
Nombre :
B- Cris Alcaide
Programa :
Función Rellenar ,
Función Buscar Máx
Fecha :
include CSTCIIO h .
>
Pasoporrlfcrcncicmmnmm
define N 100 los vectores ,
las cadenas y las matrices se
int dim ;
int máx ;
int i ;
do 4
Printfl "
Intro dim :
"
Y
scanfl "
% d "
, 80in ) ;
"
Drintfl " Error );
Rellenar IUCCTOR ,
dim ) ; Paso por referencia
Max =
Buscar Max IUECTOR ,
dim ) ; Paso por valor
printfl
"
Max %d Max ) ;
" =
,
retorno ;
} uoid →
se pasa por referencia la función ( return ;)
iui i ;
for Li =
0 ; i a n ; i + +32
plintfl
" "
Elemento 1. d : si +11 ;
SCGNFL "
I. d "
, & UECTOT [ i ] );
le
return ;
int i ;
¡ ni res ;
res =
Uec [ 0 ];
for Ii =D ; ¡ < n ; i + f) {
if ( res a UEC [ i ] ) {
res =
uec [i ];
return res ;
le
12
Alza
ALCAIDE (PGRA) 05/06/21
F -
CLASE 3 -
-
-
Vectores
En matemáticas : 4 1 ,
2 , 3 ,
4 ,
5 }
UECTOT [ 0 ]
En C :
int UCCTOP [ NI ;
tiene que
UCCTOR [ N ] → 7 Pero no está dentro
estar vacío
de mi vector
cuando mandamos un vector a una función , siempre mandamos también su dimensión ( de manera explícita o implícita )
* Explicita →
mediante un parámetro ( int dim )
* Implícita → mediante otros argumentos que nos permiten sacar la dimensión ( ficheros )
Ejemplo
:
Función inicializar
int i ;
for Ii =
0 ; i < dim ; i + + K NO hace falta inicializar a ,
se hace
leer vector [ II ; pero siempre vector
-10L
→
} la posición
return ;
Ejercicio :
Algoritmo de ordenación vector
Nombre :
-0mg
Alcaide
Cris
Programa :
Ordenar el vector de menor a mayor 17 1 4 5 60 .
Tengo este vector
Fecha : 05106121
1 4 5 17 60 ,
Quiero ordenarlo así
for Li =
0 ; i < dim ; i + +14
for I j =
i +1 ; j < ( dim -1 ) ; j + +12 UCCTOR [ I ] =
valores
AUX =
UCCTOR [ i ];
UECTOR [ j ] =
aux ; Empiezo en 0 , llego hasta dim -
6
j =
i +1 ; j < dim -1
- -
si UCCTOR [ j ] UCCTOR ti ]
aux =
vector [i ] ;
→
Utilizamos la variable aux para no machacar el vector ti ]
Uec [ i ] =
Uec [ j ] ;
→ me cargo el 17 y lo sustituyo por un 1 que es la posición
^
UCC [ j ] =
aux ; →
en la posición 1 del vector pongo el valor de aux
13
Abaza
ALCAIDE (PGRA) 05/06/21
Cadenas de caracteres
" "
Char caracter solo puede guardar 1 hola
⚠
;
→ caracter
Char cadena [ N ] →
cadena estática →
puede guardar caracter < =
N I palabras , frases , . . .
)
"
'
n
' cadena [ 0 ]
"
hola
' '
O
Dim Útil =
4 '
l
'
"
'
Al
Dim real =
5 →
4 +1 >
hola 10 "
' '
10 s cadena [ N -1 ]
Dim máxima =
N
"
Resulta fundamental incluir el 10 cuando escribimos una cadena "
a mano
cactenasmn
• leer de teclado
fflush ( Stain ) ;
→
scanfl "
is
"
De palabra ) ;
→ solo puede guardar palabras .
No guarda el '
In '
→ GELSCFRGSE ) ; No es segura N
getsl frase ) :
hola 10 →
dim Útil = 4
'
el
'
10 por el
'
In '
•
Mostrar por pantalla
→ Printfl
"
Frase =
%s
"
, frase ) ; →
Frase =
hola sirven las 2
1 I → caracter
→ PUTSIFRCDC ) ;
→
hola
⚠
Funciones para cadenas
w w w. m m m r m m m
include String h .
→
libreria para usar STRCDY ,
strlln y STRCMD
1 STRCPY :
sirve para
" "
1. Inicializar Una cadena I ) STRCDY ( frase ,
"
hola ); →
frase =
"
hola
2 strlen :
sirve para obtener la dimensión útil de una cadena
dim =
Strlln ( frase ) ;
dim =
O ; O 1 2 3 4
for /¡ =
0 ; frase [ i ] =
'
IO '
; it -1K h O l a 0
dim + +
;
3 STRCMD :
sirve para ver si 2 cadenas son iguales o no .
Típicamente la usaremos para encontrar una frase dentro de una matriz de frases
V91 =
STRCMD lfrasel ,
frase 2) ;
si UAI =
→ frase 1 =
frase 2
14
Boga
ALCAIDE (PGRA) 05/06/21
Ejercicio cadenas :
dada una cadena de caracteres arbitraria ,
introducida por el usuario . eliminar las vocales de la cadena
Nombre :
Cris Alcaide
Programa :
Eliminar vocales
Fecha : 05106121
j =
0 ;
for I I =
; cadena [ i ] ! =
'
10 '
; ¡ + + )h
if ( cadena [ i ] ! = '
a
'
& & cadena [i ] ! = '
e
'
&& cadena [ i ] ! = '
i '
&& cadena [ i ] ! = '
o
'
&& cadena [ i ] ! = '
U
'
)4
cadena [
j] =
cadena [i ];
j + +
; O r d e n a d O r
y r a n a
cadena [ j ] =
40 '
; que nos hemos cargado lo que había dentro de algunas →
Matrices
IMT MQT [ N ] [M ] ;
Mat [ 0J [ 0J
for Li =
0 ; i < nfilas ; i + + 4 may [ ] [a ]
las matrices se rellenan
''
print fl f-
"
Intro elemento [ i. d ,
t.cl ] :
,
i +1 ,
+
1) ;
Scarf ( "
% d "
,
& MAT [ IJ [ j ] ;
MGT [ 0J [ M -1 ]
MGT [ 1 ] [ 0 ]
y
MATEN -1 ] [ M -1 ]
IEEE.sc/ecacienasm
for Li =
0 ; i a nalum ; i + +14 Vectores , cadenas y matrices
printfl "
Intro nombre del alumno %d :
"
si -11 ); se pasan por referencia
Flush ( Stain ) ;
getslmat [ i ];
Ejercicio matrices :
Pedir al usuario una lista de nombres de alumnos y sus notas en 5 asignaturas ,
guardar los datos en sendas matrices y obtener un
media ,
su nombre se ha de mostrar por pantalla desde el Main
int i ,
j; una función que recibe una matriz exige que en el PIOTOTIDO , en los corchetes , se indique el n° de columnas Max
for Li =
0 ; i < num -
ALUM ; i + + 1h
NOTOD _
MCCIICD [ 0 ] =
0 ;
for I j =
0 ; ja N ; j + + 1h
NOTOD _
medias [ i ] + =
Mat [ i ] [ j ]
;
notas _
medias =
ROTOD -
medias [i ] / N ;
15
eso
ALCAIDE (PGRA) 05/06/21
Punteros
1. Trabajar sobre las variables del Main desde las funciones & dirección
3. Permiten trabajar con vectores de tamaño variable l dinámicos) los * de las declaraciones no
es el mismo
Ejemplo
pa =
da ; El puntero pa apunta a la dirección de a. un puntero
operador & la
"
.
El Unicamente se aplica a variables
"
normales , quiere decir dirección de memoria en
a
y →
valor a =
,
dirección a =
XRZDZ
que se almacena la variable
☠
pa
XZRZDZ
.
El operador * solo se aplica a variables de tipo puntero , quiere decir valor almacenado dentro de la casilla
.
No confundir el *
que se pone en la declaración con el * usado sobre el puntero para indicar valor
COSES :
Di =
di ;
2. INT i ;
int *
Di ; las 2 opciones están bien pq da igual el valor que
0pct :
pi = di
i =
13 ; tenga i ,
nos importa la dirección de i .
ODCZ :
pi = di
ifl * pi = =
ir se lee : valor de la dirección de la celda a la que apunta
del set
"
printfl
"
Error );
3.int * pi ;
int i ;
pj
=
&i ,
→
pi =
dirección i ✓
dpi =
i ; → dirección pi =
i ✗ no tiene sentido → no puede ser igual una dirección de memoria a un valor
pi
=
i ;
→
puntero =
entero ✗
4. int I ,
Q , D, pi = di , Di =
✗ ☐ 55
int * pi ; i =
i * 2 ; i =
10
INT * PK ; i =
20 * ( * pi ) ; i =
20
¿ =
5 ; * pi =
a + D; pi =
16
A =
4 ; * Di + =
7 ; pi
=
23
D= 12 ; * pi =
10 / ( * pi ) ; i =
O l int / int )
DK =
Di ; PK =
XDJJ
*
PK =
8; *
PK = 8 → ¡ =
8
16
cosas
ALCAIDE (PGRA) 05/06/21
Main suma
Másiacercaclllpasoporreferenciammmmmmn
m m n
llamadas
nes return
, sum
a h
SUM
neg
indico que mando punteros 2 .
Pls =
Suma ( DX , DY ) ; 2
✗
h h
y
int Main ( UOICI ) { mando punteros
int *
px ; 1 .
tres =
Suma ( ✗ ,
4) ;
ini *
Dy ; 2. res =
suma ( Ix . dy ) ; Un programa que utiliza funciones que reciben punteros
px =
oex , como argumentos de entrada .
no declarará argumentos
py =
dy ; en el Main . declara variables normales y envía sus
17
cosas
ALCAIDE (PGRA) 06/06/21
÷
CLASE 4 #
#
Punteros
Ejemplo :
función suma
Main Función
UOICI Suma ( int *
pa , int * pb , int *
psuma ) ;
✗ Pa
14
INT Main ( Void ) 4
Y Pb
49
suma psumq
int ✗ ;
int y ;
int suma ;
✗ leer ✗ e y
retorno ;
( * psuma ) =
( *
pa s + ( * Db ) ; ( ) no son obligatorios pero ayuda a ver LO MÓD Claro
✗ * pa =
19 ;
→
estamos cambiando el valor del pa del Main →
los punteros nos dejan trabajar desde las funciones ,
valores del Main
return ;
Memoriaclinámicammm
la memoria dinámica permite generar vectores de tamaño variable
float * vector ; Declaramos un puntero con el nombre del vector que nos interesa
int dim ;
leer dim →
dim =
5
ifluector = =
NULL 14 Poner siempre este if
UCCTOR es un vector :
float UECTOR [ dim ]
cosas varias ;
:
si tengo que asignar memoria dinámica a un segundo vector ,
free luecior ) ; liberamos la memoria lo hago dentro del ese del 1er vector dinámico
Y importante no
olvidarse
EHEEEEEEEEIIEEuuectoresm.int reside en la
|
* vector ; son casi equivalentes .
La diferencia seguridad
Ejemplo
> * puector
si me dan :
Void Iniuector ( int * vector ,
int dim ) ; Escribo este DLOTOTIPO
Tengo que leer esto : Void Iniuectort int vector [ ] , int dim ) ; Tengo que pensarlo COMO esto y Trabajar con este
-
( int PUCCTOR [ ] ,
int dim ) ;
18
llaga
M!I
UNIVERSID AD
PONTIFICIA
Computing Basics
Test: Pointers
#
First Name: Last Name:
Student Number:
Group: Room:
INSTRUCTIONS:
the header of your program code.
Write your name and PC number on this paper sheet and on
Create the project in the PATH
AND FOLDER specified by the teacher
file must be you student number. Example:
The name for the project and the source code
201401234.cpp
All functions should not contain more than one return
It is not allowed to use exit, continue, or break (except within a switch structure).
It is not allowed to use global variables.
TIME: 50 minutes
Program
•
Example: Given the following matrix of temperatures
25.5 23
26 25
28
29
32 27.5
33
32 26
19
The number
29 32 33 32 29.5 30
And the corresponding vector of cities:
Traga
The average temperature of the 21 temperatures is 28.38
B q . ae
The vector of temperatures would be filled as follows (if the matrix is read by rows, you may choose
the solution):
29. 30 29 33
The city with more number of temperatures that are over the average is city number 2 (the third one),
with temperatures over the average
Grading:
4,5 pts Main program, header, includes, defines, prototypes
1 pts - Function Readmat()
2,5 ois Function AverageTemp()
20
T oda
ALCAIDE (PGRA) 06/06/21
EEEEEamenmn
Nombre :
-
Alcaide
Cris
Programa :
Temperature 3 Cities
Fecha :
06/06/21 UOICL Reed Hat ( float Mat [ JCM ] ) 4
¡ ni i , j ;
include STCIIO h .
for Li =
☒ ; i < N ; i + +14
define 14 3
scanfl
"
/d
"
, & Matti ] [ j] );
UOID Fill -
Temp and City
- -
I float Mat [] [M] ,
float * uec.SUD.int * UCC -
City ,
float One ) ; returns ;
¡ ni Main ( uol.dk y
int City -
Max ; }
Reed Matlmat ) ;
}
Aueragetempcmat ,
dame , & cor ta ); ( * pone > =
SUMIIM + N ); lo mando directamente al Main
UEC - SUD =
( float * ICCEIIOC ( cor ta > sizcof ( float ) ) ; for I j =
0 ; j <
M ; f- ++ 1h
iflulc - SUD = =
NULL ) } IFIMAI [i] [ j] > * BAUER
printfl asignación
"
"
In EUOR de memoria ); cont + +
;
bebed Y
UEC -
City =
( IMT * ) CAIIOC ( CONTI , SIZCOFI int ) ) ;
}
¡ FIUEC - City = =
NULL ) { }
seises uec -
City es un vector reiurn ;
Fill Temps - -
and -
City ( Mat ,
nel SUD - , nel -
City Que ) ;
_
&
'
temp .
Max = -1 ;
int i. j , 1<=0 ; para recorrer vector ;
for ( j =
; j < N ;
j -1+14 Recorremos 1ero por columnas for Ii =
0 ; i < N ; ¡ + +12
CONTZ =
0 ; cuenta cuántas temps están por encima de la media for ( j =D ; j < M, ¿ + + K
for I I =
0 ; i < M ; ¡ + +14 Iflmat [i ] [ j] > Que µ
cont + t
; Uec -
City [K ] =
j; UEC - CITY [ K ] =
COLUMNAS
} K + +
;
} Y
y a
6 return ;
retorno ;
21
ama
ALCAIDE (PGRA) 06/06/21
Ejercicio :
número invertido
004
resto =
num inuert -
% 10 ;
→ 4 →
2 → 7
DUM inuert -
=
num -
inner * 10 + RESTO ; →
4 →
42 →
742
Orig Orig 7
→
num -
=
num -
10 ; 72 → →
} while ( num -
Orig .
=
0 );
retorno ,
te
Estructuras
las estructuras son un nuevo tipo de variable en las que podemos empaquetar distintos tipos de variables
TIPO Uarl -
nombre 1 ; Char nombre [ N ] ;
TIDO UARZ -
nombre 2 ; BamzpB•ÑH int edad ;
} IVAR ; Y T PACIENTE ;
_
TYPECRF STTUCT 4
cnar letra ; que accedemos al valor de una de las variables que componen la estructura
4T DNI-
;
¿ü÷:*
T .
DNI Oni -
paciente ;
paciente _
nombre [ 0 ]
Char nombre [ N ];
paciente .
nombre
¡ ni edad ;
. .
6T PACIENTE
_ ;
int i ;
T PACIENTE
- paciente ;
Ejemplo motivación :
inicialización del dni de la variable paciente
Forli =
0 ; i < M ; i -1+12
"
printfl del dni del si -11 ) ;
"
Intro el # paciente y.cl :
le
22
Bla
ALCAIDE (PGRA) 06/06/21
Ejercicio motivación :
inicializar un vector de pacientes ,
acto seguido , cambiar la 59 posición del dni del paciente 17 por 8 .
TYPECRF STTUCT 4
IMT CINI [ M ] ;
Char letra ;
YT DNI-
;
T.
DNI Oni -
paciente ;
Char nombre [ N ];
¡ ni edad ;
6T PACIENTE
_ ;
ini i , j;
5- PACIENTE pacientes [N ] ;
int dim ;
for Li =
0 ; i < CIIM ; i + + K
"
printfl paciente 1. d
"
Intro nombre :
si +1 );
fflushlstdin) ;
GCTSI pacientes [i ] .
nombre ) ;
for lj =
0 ; j < 8 ; j + + ) { dni '
8 # s
"
Printfl d del dni del j i +1 ) ;
"
Intro elemento % paciente :
,
+1 ,
scanfl "
id "
,
& pacientes [ i ] .
dni _
paciente .
codigo dni _
[ j] );
"
printfl " Intro letra Oni del paciente Id :
,
¡ +1 ) ;
Flush ( Stain ) ;
print -11
"
Intro edad paciente % d :
"
si -11 ) ;
scanfl "
% d "
, & pacientes [ i ] . edad ) ;
pacientes [ 16 ] .
dni paciente _ .
codigo - dni [Y] =
8 ;
retorno ;
le
EUIEIEI estructuran
Typeckf STTUCI 4
igualar vectores →
NO
float real ;
igualar estructuras → si
float imag ;
T COMPLEJO
_
resultado ;
resultado real .
=
( * pcl ) .
real + ( * PCZ ) . real ;
resultado . IMAG =
pcl →
imag +
DCZ →
imag ;
El operador
'
.
'
tiene máxima precedencia ,
si no pusiéramos el paréntesis ,
el ordenador nos dirá que pcl .
real no es un puntero
23
HAI
ONII
Nombre:
Apellidos
Group: FL7 Fl 9
Programa 1 (3 puntos)
a conjetura de Golbach dice que todo número par mayor que 2 es la suma de dos números primos
Lo cierto es que éste es uno de los problemas matemáticos abiertos más antizuos de la historia. Est
conjetura ha sido investigada por muchos teóricos de números y ha sido comprobada por ordenadores
para todos los números pares menores que 10
e debe realizar una función Golbach() que reciba un número entero par mayor que 2, y devuelva
Li
si no cumple la conjetura de Golbach y el valor 1 si la cumple, además de los dos números primos
por reterencia) que han demostrado que se cumple la conjetura de Golbach. La función Golbach(
debe utlizar lafunción int Primo(int n) que devuelve el valor1 si elnúmero nes primo y el
valor 0, si el número nno es primo
rogramar un programa principal que solicite un número num par y mayor que 2, validando
mostrando un mensaie en caso de no haber introducido un número válido
Lamar a la función Golbach() para saber si num cumple o no la conjetura de Golbach, y en caso
de cumplirla devuelva por referencia los dos números primos que permiten que se cumpla
Desde el programa principal, si numcumple la conjetura, se muestra los dos primos que
demuestran la conjetura de Golbach para dicho número, o bien se indica que no se cumple, en
caso de que no se cumpla la conjetura
Programar la función Golbach ()
NO ESCRIBIR el código de la función Primo únicamente se lama a esa función desde la
función Golbach().
Ejemplo de ejecución
24
aaaa
ALCAIDE (PGRA) 12/06/21
÷
CLASE 5 #
#
Ejercicio :
Nombre :
• Cris Alcaide
Programa :
Función Golbach
Fecha :
12/06/21
induce STCIIO h .
¡ nt Primo lintn ) ;
int mainluoid ) 4
int num ;
¡ ni leal ;
004
(
printfl número 1>2 par )
"
Intro un y :
"
);
scanfl "
Id "
. drum ) ; En el enunciado pone que hagamos 2
iflnum < =
2 11 num 72 ! =
0K bucles de validación podemos poner 2 mensajes
|
→
"
"" " "
"
"° " " "^^ " "" ° ° " "° "° -
°" "
Ual =
Golbach ( num ,
& print , olprimz );
If I Gal = =
D) &
"
printfl cumple GOLDACH );
"
NO se
leelseh
1. d
''
printfl
"
se cumple GOLDACH :
% d + =
%d ,
print , DRIMZ ,
num ) ;
return 0 ;
le
int ret ;
int i , j ;
int es _ primo ;
rect =
O ; Asumimos que la conj .
no se cumple de primeras
for ( ¡ =
2 ; ¡ < =
( num / 2) ; ¡ + +14
es _ primo =
Primo Ii ) ;
Ifl es _
primo = =
1) 4
es _
primo =
Primo ( num -
i ) ;
ifl es _ primo = =
1) 4
* Prim 1=1 ;
* Prim 2 =
num -
i ;
ret =
1 ;
le
reiurn ret ;
26
arre
aMFCi
Fundamentos de Informática
ComiliaS May/2015
1° IEM, ITL
codigo vecorde enteros que contene el número de código de cada lbro comprado porese
lector en la libreria
ama cakular el gasto la función recibe tambiéèn un vector de libros Vlibros vel número de
ementos en este vector El vectorvlibros es un vector de esbucturas TLI8RO.Cada emue
-L18R0 contiene: numero codigo (int), ttulo, autory el precio del libro (float
atunción CompletarInfo( deberárecomerelvectorlectores ylectoralectorir reenandos
ampo gasto. Para cada lector la función deberárecorrer el vector de codigos vcodigo deese le
ouscará mediante la función BuscarLibro() elcódigo del libroleido enelvectorvioros
a funcón BuscarLibro()recbe el código del libro leido, el vector vlibros vel número de
ementos del vectorvlibros, ydebe devolver por referencia la estucmra del lbro enconmao
hocodigo. Ademis debe devolverelvalor1 en caso de encontarellibro vel valorgencondon
encontrarlo.
atunción CompletarInfo()deberáir sumando el precio de todos los libros leidos porcada lecto
amacenarel resultado en el campo gasto de ese lector Si el código del libro no se ha enconade
el vectorde libros, lafunción CompletarInfo() supone que elpreciodeeselibroesn
OlA se supone que cada código de libro del vector vcodigo indica que se ha comprado un únco
ejemplar.
#include <stdio.h>
#define N 30
typedef struct
char nombre[N
int id numero:
int vcodiaofM
Na
25
.
raza
ALCAIDE (PGRA) 12/06/21
Ejercicio 2 :
Nombre :
Programa :
completar vector de libros
nombre
id
Fecha :
12106121 LECTORA
✓ codigo ±
nl
* GASTO *
include STCIIO h
num lectores
.
define N 30
# CÓDIGO
Char nombre [N ] ;
☐- -
int id numero ;
libros
-
num
.
float GCDTO ;
} T LECTOR ;
_
TYPCCRF STTUCT 4
¡ ni numero _
codigo ;
chal Autor [ N ] ;
Char titulo [N ] ;
float precio ;
YT LIBRO ;
_
int i , j ,
ual ;
T LIBRO
-
aux ;
float GCDTO ;
for Li =
0 ; i < numlec ; i + +14
GCDTO
=
0;
for lj =
; j < lectores [i ] .
nl ; j + + 34
UAL =
Buscar libro I lectores [ i ] .
VCOCII [ j ] , libros ,
numlib ,
& aux );
¡ f ( Ual = =
1) &
gasto + =
aux . precio ;
lectores [i ] .
GCDIO
=
GCDTO ;
returns
int ual ,
i ;
leal =
0;
for I I =
0 ; i < numlib ; i + +14
¡f ( V libros [ i] . numero _
codigo = =
Cod ) 9
* pencont =
libros [i ] ;
mal =
1 ;
}
}
returnual ;
y
27
BABI
ALCAIDE (PGRA) 12/06/21
Ejercicio 3 Hacer una función cifrar que recibe un vector de dim NXN ,
recibe N y devuelve un vector modificado ,
cifrado según la lógica de la figura
Nombre :
Cris Alcaide
Programa :
Función cifrar 1) copia en una matriz las posiciones pares del vector ,
recorriendo la matriz por
0 1 2 3 4 5 6 7 8
5 6 7 1 4 2 8 1 3
Fecha :
12/06/21 filas y a continuación escribe las posiciones impares .
induce STCIIO h .
define N 3
3 5 7
int MAT [ n ] [ n ] ;
O 6 3 2 8 5 4 1 7
5 8 1 7 3 2 4 6 l
int i ; Pasar por todas las posiciones
IMT fila =
0 ;
int columna =
0;
for I I =D ; i < (n * n ) ; i + =
2) &
columna + +
;
columna = n
if ( columna = =
n 14 llegamos al final de la fila y queremos pasar a la siguiente fila →
"
columna =D
columna =
0;
fila + +
;
:
for Li =
1 ; i < ( n # n ) ; i + =
2) 4
columna + +
;
if ( columna = =
n ) d
fila + +
;
columna =
0 ;
te
¡ =
0 ;
for ( columna =
; columna < n ; columna + +14
V. Cifr [i ] =
MGT [ fila ] [ COLUMNA ] ;
i + +
;
le
reiurn ;
le
28
aaaa
ALCAIDE (PGRA) 12/06/21
ASCII
Asociado a caracteres
la tabla ascii es una tabla que asocia elementos numéricos a los distintos caracteres .
3) Los números del 1 al 9 también tienen un valor en la tabla y están ordenados de mayor a menor , aunque el 0--31
Ejemplo
Hacer un programa completo en el que el usuario escribe una frase y un valor de desplazamiento .
llamada a la función César c) , se codifica la cadena , y la cadena modificada se muestra desde el Main .
include STCIIO h .
define N 50
int i ;
print fl frase );
"
"
Intro :
Flush ( Stain ) ;
GCTS ( frase ) ;
for Li =
0 ; frase [ i ] ! =
'
10
'
i i + + ){
frase [i] =
toupper ( frase [i]) ; toda la cadena a mayúsculas
DUTS ( frase ) ;
retorno ;
int i ;
for l i =
0; cadena [ i ] ! =
'
10
'
; ¡ + + K
cadena [i] + =
desp ;
¡ f ( cadena [ i ] >
'
z 1) {
cadena [i ] =
cadena [ i ] -
( '
Z
' -
'
AI ) ;
le
reiurn ;
29
BATES
ALCAIDE (PGRA) 12/06/21
Ficheros
texto binarios
Existen 2 tipos distintos de ficheros :
04 172 03 * 417 I. ¿ ?
1. De Texto :
se pueden leer a simple vista + 18 %
196619 20
2. Binarios :
no se pueden leer a simple vista , pero son más eficientes ( permiten el acceso directo lfseek ) )
mercadona dat
QIAIEEEENREEEEEEREEEE mercadona # . .
int n ; 2 .
Extensión txt (texto ) ,
. dat ( binario )
pf =
fopenl
"
Mmt "
,
"
3
"
); EXISTEN 4 MODOS de apertura
iflpf = =
NUUK i) n :
abre el archivo para leer .
El archivo tiene que estar ya creado
printfl
"
No se puede abrir el fichero "
)
; Ii ) ft :
abre el archivo para leer y escribir ,
si el archivo no está creado ,
lo crea y si lo está ,
fl del fichero Iii ) abre el archivo para escribir si el archivo ya está creado bala contenido y sino lo
print
"
Apertura correcta "
); W :
, ,
su , crea
Archivos de texto
EEEOELEIEEEEEEEYEEetexio.mn
fprintf escribe en el fichero
}
:
*
DTIMTF →
fprintf
"
printfl
"
%d1.cl % f , producto .
Cod , PRODUCTO Uds .
, PRODUCTO . precio ) ;
fprintflpf PRODUCTO
"
%d1.cl PRODUCTO PRODUCTO Uds
"
, % f , .
COQ , .
,
. precio ) ;
=
al fichero en el que
se quiere escrito
Scarf → fscasnf
scanfl "
% d % d 1. f-
"
.
& AUX Cod . ,
& AUX . Uds ,
& aux precio ) ;
.
do a
CTTI =
fscanflpf ,
"
% d % d 1. f-
"
.
& AUX Cod . ,
& AUX . Uds ,
& AUX precio ) ;
.
l 2 3
if ( Ctrl = =
3) & ha leído correctamente las 3 COSCD .
aqui va el cuerpo
} While ( Ctrl =
=3 ) ; concepto →
sigue leyendo si está COUECTO
los ficheros cada vez que se leen , se leen enteros ( de auiba a abajo ) .
Hay que comprobar una línea del fichero , hay que asegurarse de que se
lee conectamente ,
es decir , que no está corrupto .
lectura de ficheros :
siempre con do -
while de condición que la lectura de datos sea conecta . solamente cuando nos aseguremos de que hemos
30
4.7
UNIVERSIDAD ONTIFICI
Fundamentos de Informatica
com Juniol2014
Examen 1° IEM, ITL
Ecaincvicislprordeiscineri
Programa 2 (4 puntos
Una empresa dedicada a los estudios meteorológicos desea crear un programa en C para
evaluar los datos de los registros de las precipitaciones mensuales de diferentes ciudades de
España. Inicialmente, los nombres de las ciudades que participan en el estudio se guardan en
una matriz de cadenas de tamaño máximo 100x100.
Por otro lado, los datos de las precipitaciones mensuales de cada ciudad en mm de lluvia pa
ra los meses de enero a diciembre se almacenan en otra matriz estática de enteros de tamaño
100x12.
Matriz de ciudades
L
M RREe
arn 0
aaaaanrd0
Nnearnroee
0
66Eo66
Te
41 38 30 3 23 1 10 42 43 33
40 61 1 24 29
EEE6
23 21 20 14 10 23 23 23
26 26 30 33 1 26
6 434
38 13 23 62 34
32 37 19 74 51 52
A partir de estos datos el programa debe crear un vector dinamico de estructuras para guar
dar los datos de las ciudades cuya precipitación media anual sea mayor o igual que 30 mm
Para crear el vector de estructuras se debe usar la estructura T LLUVLA con los siguientes
datos: Nombre de la ciudad (cadena de caracteres), la media anual de precipitacion en mm
de agua (float)
31
UNIVERSIDAL
9
COMMLAS Fundamentos de Informática
icade
Junio/2014
Examen 1° IEM, ITL
Ti
nc de estructuras
)Mostrar en main los datos de la ciudad que tiene la máxima precipitación medis
typedef struct
32
←
III
Clase |L
PONTISICL
Fun amentos de Informática 1° IEM, NTL
Conmias enero - 2012
Abeg
xamen práctico Enero 201
Nombre: Apellidos:
InstruccionEs.
Se pondrá el nombre y el número de PCen esta hoja, así como en la ficha (cabecera) del pro
45 mi
A1
Bu ti
Preparación inicial:
El alumno debe crear al archivo de texto “estrellas.txt" para guardar la información asociada a las es
trellas visibles en el cielo. Para ello se debe utilizar un editor de texto (como por ejemplo Ini
cio/Programas/Accesorios/Bloc de Notas). Para cada estrella se debe guardar el identificador (un
entero), distancia en años luz (un número real), masa en kg (un número real) y la temperatura (un
número real).
ambo
Descripción general del programa:
Un centro de observaciones astronómicas tiene una base de datos de las estrellas visibles del cielo en
un archivo TEXTÓ llamado “estrellas.bt". Los datos de cada estrella (estructura tipo TESIRELLA
son.
typedef structt
int id
float dist
float masa;
float temp;
HT_ESTRELLAI
•
33
•
q
mi EBay
PONTIEICLI
undamentos de Informática 1° IEM-ITL enero - 2012
ConAs Examen: Enero
uke no
Es necosario crear un vector dinámico con los datos de las estrellas que existen entre las distancias de
10 a 1000 años luz, y después, eliminar del vector la estrella indicada or el usuario. Escribir un pro-
rama completo para crear el vector. Para ello, es necesario asignar memoria a un vector de estruch
as y a continuación rellenar el vector (de tipo TESTRELLA), y después eliminar una estrela
Para realizar el programa se debe escribir lo siguente
1-. La función main() tras declarar las variables,
cuenta el número de estrellas en el fichero entre las distancias de 10 a1000 añosluz llamando
a contar(),
si ha sido encontrada dicha estrella, muestra por pantalla los datos de la estrella eliminada, si
no, se muestra un nensaje "Estrella no encontrada" en main
luego, el programa principal muestra los datos del vector por pantalla (en main), una vez
elininada la estrella
2- Una función Contar( que reciba el puntero (FLE*) al archivo de texto y cuentey devuelva e
número de estrellas entre las distancias indicadas dinferior y dsuperior que recibe como ar
gumento
4 Una función Eliminar() que elimine del vector la estrella con el identificador que recibe como
eumento erce enuenta la esbella la función devnelve como mgumento el muevo número de do
mentos (n1), y devuelve por referencia la estructura TESTRELLA encontrada Si no la encuenta
devuelve el núnero de elementos del vector n, que no ha sido modificado
Nota
Si el alumno no sabe asignar memoria dinámica, utilizará memoria estática, aunque debe tener en
cuenta que obtendrá menor puntuación
Calificacion:
34
i. I.
dletineDSua
con
lo ponen con
en el
PLOTOTIPO
en
la función
el
mismo
float
y
poner
Hay
que
> int .
tipo !
n st
camella,
ldsupr
elimin
ose( “es
N )
(T.eSTRFLL
Vee NULLY
yvcc 1s a ve →
mejor poner el rewind aquí
pf vec
(isn
dear (vecfi3)
ro id. a eliuunar
•
4idsupr)
n - El rtvec, n,ids d elurn )
f neun ✗ si la dimensión se ha mantenido
estrall
arintt ("Ne
2s2
mtf l" ia estrella eiluuiucda es
estra eluin ).
-n = newn
< newu
HostvaVecL i3
35
free iv c)
→ falta d fdoselpf )
.it?TBgygy.pgurnan
Vnt Coutour ( FILE revidtcl
WC r
ntasidl
eatcomo axeli
Cuknafa.
toe axt
do
fscnut (p • " douxId.
( axdlists dmtior 22 curcl
wile (e-l
ewind (pf1 →
para volver al principio del fichero
, ,
salgefifafe ,
reúna para
que vuelva a
arriba
c
TEStrFllA auX
FEAS
e
iztstcud (Dh
d, łax.ds Lavrmsa lan teup)
C
f (r
fwlule (ctri )
Pfff ,
-
amor Len
*. i. i.
ÉÍ¥ÜÉÉ¥¥ :*
condado
in L+
ueij ] =
ueíj + a ] ;
(vectil.id sidsopr)
du zvecLi.id)
* zlm)- vectiI
(pelliu) -
ect Cra1
no
;
36
ooam
ALCAIDE (PGRA) 13/06/21
#
A
CLASE 6 #
#
Archivos binarios
texto binarios
ELANMÓIEQLQIELUEEEEIICNEROSBINCRIOS mmm
04 172 03 ← 417 ! ¿ ?
más eficientes
FILE *
pfb ;
¡ ni
⚠ cualquier función que utilice un fichero
n ; ,
"
Mercadona dat
"
Dfb fopenl
"
productos dat
"
Wb -1 ); Mercadona TXT fichero argumento de entrada
=
.
. . .
el es un
¡ ftp.fb =
=
NULL ) d
Mal ejemplo ,
los ficheros contienen estructuras ,
Drintfl
"
Error en la apertura del fichero "
);
que podemos entenderlas o no
✗ el set
texto binario
l - '
FCLOSE ( pfb ) ;
le
EYIEEIEEIQIENEMMGIEJODEFICHEROSBINARIÓS mmnmnmm
Escritura
"
FDRINTFCPFT ,
-
1. d id f
"
, PRODUCTO .
COCI , producto Uds .
, PRODUCTO precio ) ;
.
Lectura
escribe en la dirección
TIDO dnd lo escribo Ctrl =
Freadl doux ,
SIZCOFCT PROD ) 1 pfb ) ;
de memoria
,
del producto
.
,
direcciones de memoria . .
.
fwritlldulctor.li ] , SIZCOFLIPRODUCTO ) ,
1 pfb ) ;,
✗ misma estructura que fscanf
de uno en uno
y Nunca nunca nunca ! → fread ( vector , SIZEOFCT PROD ) > dim
- Pfb ) ;
sin &
2 fcorite ( vector ,
SIZCOFLIPROD) ,
Lime , pfb ) ; Para escribir si , pelo para leer nunca , siempre hay que
i&Ü%%%mÜr_
, considerar que puede estar compro
Acceso directo
áü
fseek SIZEOFIIPROD ) desde donde ) ; SEEK SET desde el principio frecuente
LEY
→
DOS * →
, , _
-
tiáiruáia
fichero el SEEK CUR desde la posición actual → menos frecuente
contenida en
-
→
fichero
SEEK END →
desde el final →
muy poco frecuente
cuántas filas
-
desplazo el
cursor
Rewind ( Dfb ) =
fseek ( Dfb ,
O * SIZCOFCT PROD ) _
,
SEEK _
SET ) ;
37
aaaa
ALCAIDE (PGRA) 13/06/21
Egica
3 .
Una vez llegados al final ,
actualizamos el fichero →
ponemos descuento y actualizamos el precio
1 fseek Cada vez que leo una fila voy actualizando QUX Al
|
,
.
2 fread
2. 5. Actualizar la ucuiabfe
final de recorrer el fichero , tengo el cursor al final del
| ¡¡¡¡¡
actualizar la variable combo
z fsee "
fichero , para →
actualiza
4 fcurite ¡
" "
pfb =
fopln ( Mercadona dat .
,
"
nbt " ) ;
¡ f ( pfb = =
NULL ) 4
"
printfl Error
"
)
;
:
fclosl ( Dfb ) ;
÷
Uoid Actualizar Fichero LFILE * pfb ,
float Clerk
int Ctrl ,
10C ;
¡ nt ¡ =
☒ ;
5- PROD aux ;
do l
Ctrl =
Freed I &AUX ,
SIZCOFCT PROD ) -
, 1 ,
Pfb ) ;
if ( Ctrl = =
1) {
if ( aux Uds .
>
MAX 14
Max =
aux .
Uds ;
la =
i ;
¡ + +
;
le while ( Ctrl = =
1) ;
aux . descuento =
1 ;
aux . precio =
aux . precio * ( 1- desc ) ;
Beek ( pfb ,
10C * SIZCOF ( T
-
PROD) , SEEK _
SET ) ;
fcurite ( doux ,
SIZCOF ( T PROD ) -
,
1 , pfb ) ;
recurrir ;
38
PONTIFICL
on
CAI* Fundamentos de Informatica
Examen 1° IEM, ITL
Junio/2014
typedef struct
char nombre cliente100|,
|TDAT
Para realizar un estudio de la salud económica del banco, se quiere construir un nuevo fiche
ro binario (new.dat) donde las hipotecas estén ordenadas en función de la deuda pendiente
Para ello se decide cambiar la estructura de datos de manera que contenga el campo deu
da pendiente en lugar de deuda pagada. Por lo tanto la nueva estructura sera
typedef struct
TNEW
Se pide desarrolla una función Copiar() para trasladar la información desde datos.dat a
new.dat de acuerdo a los siguientes pasos:
1. Buscar en el fichero fpdat la cuenta con mayor deuda pendiente (deuda inicial
deuda pagada), siempre que el nombre del cliente sea distinto de “copiado
2.Trasladar la informacion a fpnew
3.Actualizar el registro de fpdat cambiando el nombre del cliente por "copiado" para
indicar que esta infomación ya ha sido trasladada a fpnew
4. Repetir el proceso 1-3 hasta que todos los datos de fpdat hayan sido copiados a
łpnew
5.Devolver al main el múmero de cuentas copiadas.
39
TOMA
ALCAIDE (PGRA) 13/06/21
Nombre :
dos
Cris Alcaide SÓLO me piden
Programa :
Junio 14 .
"
datos .
dat
"
hacer la función
Fecha :
13106121
include STCIIO h .
N m un # 1. El que más
→ Buscar un máximo → do while ( tot gente
-
m m m
m m m
long deuda _
inicial ;
n
n n
long deuda _
pagada ;
°" d. Pagada
6T -
DAT ; nombre
d. pendiente
Char nombre -
Cliente [ 100 ] ;
long deuda _
inicial ;
6T _
NEW ;
¡ MT Copiar / FILE *
fpdat ,
FILE * fpnlw ) ;
NO me pide el Main
T NEW
_ nuevo ; FSLCKLFPDAT , DOS * SIZCOFLIDAT ) ,
SEEK _
SET ) ;
int i ; nuevo .
deuda inicial _
-
datos deuda inicial . _
;
¡ ni DOS ; nuevo .
deuda Pdte -
=
mayor ,
acopiar =
0, ASUMO que no queda nadie fseeklpfdat , POS * SIZCOFCT - DAT ) ,
SEEK SET ) ; -
mayor = -1 ; acopiar ++ ;
¡ =D ; G
doh leconilecacopiar =
-1 ;
Ctrl =
freadlddatos ,
SIZCOFLIDAT ) ,
1 , fpdclt ); retllrn ;
iflctrl = =
1) a }
deuda - Pdte =
datos deuda. _
ini -
datos deuda . _
pagada ;
mayor
-
-
deuda - Pdte ;
DOS
=
i ;
acopiar -1 -
:
¡ ++
;
Eunice ( Ctrl -
- =
1) ;
40
-909
e.
om Fundamentos de Informatica 1°IEM–1º ITL, 2014-2015
Nombre: Apellidos:
Instrucciones:
Se pondrá el nombre y el número de PC en esta hoja, así como en la ficha (cabecera) del programa
Crear el proyecto del programa cn EL DIRECTORIO QUE INDIQUE EL PROFESOR
El profesor enviará al escritorio de los alumnos un archivo ZIP que contiene consumos.txt
Las funciones sólo pueden tener un return
No puede utilizar exit, continue. ni break (salvo en la instrucción swi tch)
No puede utilizar variables globales.
PROgRAMA
Una empresa de suministro de electricidad de una ciudad utiliza un programa para el envio de las
facturas de sus clientes. El programa utiliza un archivo de texto “consumos. txt con los datos
iniciales de cada cliente. Los datos contenidos en el archivo de texto son: DNI de cliente (valor
entero), consumo eléctrico en kwh (un numero float), y el precio por cada kwh de energia (un numero
float). El programa utilizará este archivo de texto para contar el número de los clientes v rellenar un
vector dinámico de estructuras (Vecconsumo) de tipo T CLIENTE. donde cada cliente tiene estos
datos: DNI (un número entero). consumo (un numero float). precio por kwh (un número float). tota
precio a pagar (calcular este dato) y descuento (un entero con valor 0 inicialmente). Finalmente, todos
los datos pasarán a un archivo binario “clientes. dat“. La empresa usa este archivo binario para
aplicar un descuento de 10% a la factura del cliente que tenga el consumo maximo entre todos los
clientes.
¡
Nota: el alumno dispone del archivo "conSumo5. tXt' en el escritorio del PC
4) Crear un archivo binario “clientes.dat" con todos los clientes de la empresa. Usar la
función void Crear Binario(FILE *pfb, T GLIENTE *vec_consumo, Int cont)
Para crear este archivo se utilizará la información almacenada en el vector Vvecconsumo
41
poi
ATEDA
)Mostrar por pantalla los datos completos de las facturas de todos los clientes de la empresa
Para esta opción hay que lamar a la función void Mostrar Facturas(FILE *ofb):. La función
Mostrar_Facturas() puede, opcionalmente, usar la fumción
void Mostrar_Un_Cliente(T_CLIENTE cliente); para mostrar los datos de la factura de
cada uno de los clientes
Nota:noestápermitidousarunvectorniunarchivoauxiliarenlafunción
Buscar Descuento().
Nota: Es necesario realizar en el main() todas las instrucciones de asignación de memoria, apertura
y cierre de archivos, ete. con el fin de que pueda ejecutarse correctamente el programa
Puntuacior
.5 puntos: Programa principal (ficha, memoria dinámica, apertura de archivos, validaciones, mostrar
datos
42
-04
ese
COMIAS c
Partiendo del archivo de texto inicial “ConsumoS.tXt" con los datos sisuientes
4
555555 4000.15
565666 3500.15
l
El resultado de la e ecución será
Numero de clientes-6
¡
Dnt consuMo PRECIO (KWh)TOTAL_PAGAR DESCUENTO
43
µ
Ese
#indude cstiah
iclde
d
shcf
uf DNI
flat consumo,
Hont Pieciokwh
lant preeiopanar
ut deoccen
|TCLISNTE
nn
ChanBiuano elEmcb, T-eLieNIEvecou uo iu
dMostrarfoctoi(FIe upeb
Nosraonto(LCLienedieAe)
rob
Le
C_ (CLLSLI)
de /d"n
←
Mc.consbmo -(TC
f(vecousoaa NL)
printf (nError
else
vec.cousuuo is avector
vec ( t, cconsUm
ell ( "(eLUmes Cia
NULL)I
prial"r)
Cicay-
cturcs (
achras (ptb
•
free (veczcousumo
44
•
•
Erecciones
Cador (FILE *pft,nt *peou
nt c
T.CLIENTEQUx
)0
wind (pft)
B ra m r
[erur
T_ClientE cx:
ntctrl
cve
recio
AUÁ*D
ouk. Ceswe
c„(aSvmoli Jzauk
ulsilaf ctr
relind iat
wr (vec-casumo, seof(TcueNre),cout,pfb
revincl lsfb)
arma
voidl Mes
voidMostrar_Facturas (Filt )
elt
clienre clicue
nt atr
prmt "d i
e
T-ClITiTE AUm
f (ctr rerurn
Jull (ctrl1)
voidBuscar- Desweut
mt ctrl
T-CLIENTE aMX
ek(pb)(*pS) ( EnB),SEE -SE
rmo(2awxef( eNr),1, pfb)
au .descveue
CC OMoX - ax.
Desc:
1
ceusemi0 pee C )
Ca10x
45
jubilelitr
aaaa
ALCAIDE (PGRA)
SIMULACRO I
19/06/21
Pmtngrcmclm :
( 2.5 Ptos )
Nombre :
Programa :
Calcular serie ( )
Fecha :
19106121
include STCIIO h .
include Math h .
float calcular _
Serie ( float × , int A) 4
NO pide el Main
float calcular _
Serie ( float × , int A) 4
int i ;
int FACT ;
float sum =
0 ;
float term ;
float POT -
n -
✗ ;
for I I = 1 ; i < =
n ; ¡ + +74
if I I % 2
= =
1) 4
Factorial ( i. Fact ) ;
term =
1 / ( factorial ) + × ;
Y el set
POT -
n - ✗ =
POCO L ✗ ,
i ) ;
term =
POT n - - ✗ / ( i -
1) ;
sum + =
term ;
return sum ;
le
int i ;
int FGCT =
1;
for l i =
num ; i > =
1 ; i - -
32
Fact =
FACI * i ;
reiurn ;
te
46
Nnta
ALCAIDE (PGRA) 19/06/21
[email protected] Alcaide
Programa :
Buscar _
Cad C)
Fecha :
19106121
include STCIIO h .
define N 10
define K 50
¡ ni Main CUOIDK
int n ;
Char car [K ];
int cont ;
print f l
''
In Intro n :
"
);
scanfl
"
id "
,
dn ) ;
"
printfl "
In Intro palabra a buscar : );
Flush ( Stain );
GCTS ( car ) ;
IFICONT = =
014
printfc "
In NO se ha encontrado la palabra % s en el banco de datos
"
, car ) ;
bebed
printfl "
In la palabra i. s se ha encontrado I. d veces
"
,
car , cont );
PTIMIFC
"
"
In );
retorno ;
int i ;
int j ;
int ual ;
* Dn Ueces
-
=
0;
for Ii =
0 ; i < dim ; i -1+14
for L j =
0 ; matriz [ i ] [ j] ! =
'
10
'
; j -1+14
ual = 1 ;
for LK =
; DGIGDLG [ K]
! =
'
10
'
i Kt -114
IFLPALGBLG [K ] ! =
MAT [ i ] [ j +
K ] Y
ual =
0;
iflual = =
1) {
( * DN _ Veces ) + +
;
y
}
y
y
} return ;
47
Brooks
ALCAIDE (PGRA) 19/06/21
include STCIIO h .
include STCILI b. h
define N 20
typlcllf STTUCT h
Char nomble [ N ] ;
double distancia ;
intuido ;
GT ESTRELLA ;
-
IESTRELLA *
U - est ;
int num -
CST ;
T ESTRELLA
-
* 4. sin vida ;
int num -
sinuida ;
004
printfl "
In Intro numero estrellas : "
Y
scanfl
"
id "
,
drum - est ) ;
le while ( num -
est < =
0 );
V. CST =
( T ESTRELLA
-
* ) CGIIOCL MUM .
CST , SIZCOFLIESTRELLA ) ) ;
¡ FIU - CST = =
NULL ) {
plinifl "
In EUOR asignación de memoria );
deben
contarla . est ,
num est - ,
drum sinuida ) ; .
4. SIMUIDG =
( T ESTRELLA
-
* ICOLIOCL num SIMUIDA -
,
SIZCOFLT ESTRELLA ) ) ;
-
¡ FIU -
SIMUIDA = =
NULLK
piinifl
"
In EUOR asignación de memoria "
);
deben
"
print fl
"
In Las estrellas con posibilidad de vida son : );
posibilidad de vida );
"
Dlintfl In Las "
estrellas sin son :
,
num -
Sinuida ) ;
free lusinuida ) ;
debe {
Plintfl "
In NO hay ninguna sin posibilidad de vida "
Y
free ( U -
CST ) ;
retorno ;
48
amoooor
ALCAIDE (PGRA) 19/06/21
¡ ni i ;
le
reiurn ;
"
printfl "
In Intro Nombre * :
Y
fflllshlstdin );
GCTS ( ( * est ) .
nombre );
"
printfl dise );
"
In Intro :
scanfl
"
% f
"
,
& ( * est ) .
distl ;
DLIMTFL "
Intro vida 10-1 ) : "
);
reiurn ;
¡ ni i ;
* nsu =
;
for Li =
; i < num - est ; ¡ + +14
If ( UECTOR [i ] .
vida = =
D) {
( * NSU ) + +
;
return ;
int I , j , K ;
j =
0;
If ( UECTOT [ I ] .
vida = =
014
USU [ jn ] =
UCCTOT [ i ] ;
j ++
;
for I K =
i +
j ; k < ( * num -
est ) ; k + + 74
UECTOT [ K -1 ] =
UCCTOR [ K];
( * num CST ) -
- -
i - -
le
return ;
}
UOIO MOSTTGRESTTELLCD ( T -
ESTRELLA U [ ] ,
int A) {
int i ;
for l i =
; i < n ; i + +14
} ,
return ;
49