0% encontró este documento útil (0 votos)
92 vistas49 páginas

Tipos y Uso de Variables en C

Este documento explica los diferentes tipos de variables en C como enteros, reales y caracteres, y cómo comunicarse con el ordenador mediante funciones como printf() y scanf(). También cubre la declaración e inicialización de variables, donde se les asigna un nombre en memoria y pueden asignarse valores iniciales ya sea por el usuario o en el código.

Cargado por

Mcristina
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
92 vistas49 páginas

Tipos y Uso de Variables en C

Este documento explica los diferentes tipos de variables en C como enteros, reales y caracteres, y cómo comunicarse con el ordenador mediante funciones como printf() y scanf(). También cubre la declaración e inicialización de variables, donde se les asigna un nombre en memoria y pueden asignarse valores iniciales ya sea por el usuario o en el código.

Cargado por

Mcristina
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Ana

ALCAIDE (PGRA) 29/05/21

#
A
CLASE 1 f-

Tipos de variables

.int :
números enteros , siempre que no sean muy grandes 113 Xxx )

.
float :
variables reales

double variables reales grandes que las tipo float


: +
.

'
.
Char :
son un golpe de teclado ( retorno de carro n
'
)

Comunicarse con el ordenador

. 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 e inicialización de variables

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

NOSOTROS desde el código


iui a ;

float b ;

|
prjnlfl
"
"
Intro num :
%
usuario
SCANFI "
% f "
,
Arum ) ;

b =
4.72 ; } código

JUSTO después de declarar una variable ,


esta almacena basura ( un valor desconocido no nulo )

1. Para almacenar un caracter desde el código

Char letra ;

letra =
'
#
'
; comillas simples

2. Truncaciones : no redondea , guarda la parte entera

int num ; >


7

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

'

se va a quedar con el entero

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 :

Ojo a la división de enteros

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

include < STCIIO .tn >

define PI 3.1416

cuerpo

int Main ( Void ) d

int num 1 ; res =


( num -1 + num -
2) 2.0 ; está mal porque es int int .
Tendría que ser 2. O

int num 2 ; PRIMTFC " In EL RESULTADO ES % .


ZF "
, Pls ) ;

float res ;

printfl números FCTUTR O ;


"
"
n Intro 2 : );

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

IF-ELSE IF IF-ELSE ANIDADO

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

va hasta la última llave anidada

if ( condición ) 4 ¡ f ( condición ) a IFC condición 1) 4

1 Acción si V ✗ Acción IIACCIÓM si V

} el set } te / se if ( condición 2) {

✗ Acción si F ✗ Acción si 7- < ✗ <


9

} } 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

} ése ifca > b) &

"
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 ) ;

~ Poner aquí el tupper tolower

Switch ( Opc ) d if ( OPC = =


'
A
'
OPC = =
la 1) 4

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

Acción B Opción default

break ; }

'
CQSC Cl :

case
'
C
'
: include CTYPEH

Acción C OPC =
TOUPPEP ( OPC ) ;

break ; OPC =
TOLOCOERCODC ) ;

default siempre ! !
~
Menú insensible de mayúsculas

Acción puede utilizarse como O minú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

cuándo el n° de iteraciones realizar


.

se usa ? Cuando conocemos a PUOU que vamos a

Inicialización de la variable que aparece

condición que se ha de verificar para realizar una iteración adicional

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

→ se cumple la condición → acción → se vuelve a verificar → se vuelve a realizar la acción


✗ while ( condició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

actualizamos en la acción de iteración

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

que se mete en el bucle

2. *

1. ODC
=
0 ,

mejor Bucle validación


m m m m m m. m n

while ( num < 1 11 nueve > 4) 4 1 .


Siempre tiene que haber un if que indique al usuario que ha

"
); 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

ifcnuma 1 11 num > 4) a condición del do -

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

pueda actualizar con cada iteración del bucle ~ -


ii + + )

da

"
);
Pliutfl
"
Intro num :

scanfl
"
I. d
"
, 8mm ) ;

ifcnumc 1 11 num > 4) a

Plintfl "
Error
"
);

} while ( num < 1 11 nueve > 4) ;

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 Main ( Void ) 4

int num .
i ;

002

"
printfl
"
Intro num : ) ;

scanfl "
1. d
"
, drum ) ;

¡ f ( num < 014

"
printfl "
Error ) ;

le while ( num < 0 ) ;

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 Main ( Void ) s

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

include < STCIIO .tn >

poner librerías de más


induce a Math h .
> penaliza

int Main ( Void ) d número del que queremos sacar el factorial

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 :

oao Cris Alcaide

Programa :
Números primos

Fecha : 30/05/21

include < STCIIO .tn >

int maincvoid ) & almacena 1 si es primo y 0 si no

int num , ACUM =


1 ;

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

include < STCIIO h .


>

int Main ( Void ) &

int num ;

int suma =
0 ;

int i ;

DOL

"
printfl "
Intro num :
) ;

SCGNFL "
I. d
"
,
olnum ) ;

if ( num < =
D) {

"
printfl
"
Error ) ;

Y while ( num < =D ) ;

for ( i =
0 ; i < num ; i -1=714

sum + =
i ;

retorno ;

8
-
ALCAIDE (PGRA) 30/05/21

Pnrnogramatsm
*

Nombre :

stop Cris Alcaide


* *

Programa :
Triangulo *

* * *

Fecha :
30/05/21
* * * *

include < STCIIO h .


>

int Main ( Void ) & Es mejor poner :

int altura ; filas i → filas

int i , j; columnas j → num -


asteriscos

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
* * * *

include < STCIIO h - >

int Main ( Void ) {

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

Las funciones sirven para :

1. Permiten descomponer problemas complejos en problemas más simples

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

PROTOTIPOS Declaración de funciones

int Suma tinta int b) ;


,

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

llamadas a funciones que coinciden en tipo y orden con el prototipo .

sum =
suma ( × , y) ;
→ llamada En la llamada a la función , el ordenador Otorga un espacio de memoria desechable

. . . para las variables de la función .

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 Cinta ,


int b) {

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

include < STCIIO h .


>

float Promedio ( int ✗ ,


int y ) ;

int Main ( Void ) 4 float Promedio ( int ✗ , int y) d

int NUMI ; float res ;

IMT MUMZ ; res =


( ✗ +
y ) 2.0 ;

float media ; return res ;

Drintfl " Intro MUMI :


"
); }

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

Vectores, cadenas y matrices

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

include < STCIIO h .


>

define N 100

int Main ( Void ) a dim máx

INT VECTOR [ N ] ;

int i ;

int dim ; dim real

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

dimensión lo rellena que después le


devolveremos
EJEEE.EE hacer un Dg en el que el usuario introduce una para un vector y , y al

el nmáx almacenado en el vector

Nombre :
Cris Alcaide

Programa :
rellenar vector y devolver MÓX
Máximum
Fecha :
30105121 Forma :

1 .
Igualamos Max al UCCTOR [ 0 ]

induce < STCIIO .hr 2 .


For ( recorro UECTOR ] ,
dentro del for

define N 100 ifl Max CUCCTOT [ i ] → Max =


UECTOR [ i ]

¡ ni maincuoid ) a Forli =
0 ; i < dim ; i + + la lógica :

int vector [ N ] ; if I Max < vector [ i ] la IMICIQLIZO MAX al UCCTOR [ 0 ] ( tiene el

int dim ; Max =


vector [ i ] ; valor más bajo ) ,
asi me aseguro de que

int i ; } todas las uaeiables del vector son más

INT MÓX =
vector [ 0 ] ; } grandes .
Según voy recorriendo el vector ,

do & validación dim printfl "


MAX =
I. d "
,
Max ) ; hoy actualizando el máximo ,
cuando llega

Drintfl "
Intro dim :
"
); al número más alto ,
no se mete en el

scanfl d" oldim ) ; PETURM 0 if


"
% ,
; .

if I dim < 0 II dim > NK 6

printfl
"
"
Error );

} while ( dim < 0 II dim > N) ;

for Ii =D ; i < dim ; i + +12 Al usuario le da igual la posición


"
printfl " Elemento % d :
si -11 ) ; que sea , quiere saber el elemento ,

& UECTOR ti empezamos desde 0


"
scanfl % d "
, ] ); y COMO es i -11 .

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

UOICI Rellenar ( int UCC [ ] ,


int n ); pasan por referencia .
ESTO es
que cuando en la

int Buscar Maxliniuec [] , intn ) ; llamada mandamos un vector ,


no hacemos una

int Main ( Void ) 4 copia ,


sino que trabajamos sobre el vector original
IMT UECTOR [N ] ; ( del Main) .

int dim ;

int máx ;

int i ;

do 4

Printfl "
Intro dim :
"
Y

scanfl "
% d "
, 80in ) ;

if ( dim < 0 II dim > N ) }

"
Drintfl " Error );

} while I dim < 0 II dim > N ) ;

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 ;)

uoid Rellenar liui Uec [ ] ,


int A) {

iui i ;

for Li =
0 ; i a n ; i + +32

plintfl
" "
Elemento 1. d : si +11 ;

SCGNFL "
I. d "
, & UECTOT [ i ] );

le

return ;

int Buscar Max line UECE ] ,


int Climb

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 ;

Podemos inicializar un vector con una función → Paso por referencia

VOICI INIVCCTOR ( int UCCTOR [ ] ,


int dim ) ; UCCTOT [ N -1 ]

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

UOID INIUCCTOR ( int UECTOR [ ] ,


int dim ) t

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

IFIUECTOR [ j ] > vector [ i ] K HECTOR [ j ] =


POSICIONES

AUX =
UCCTOR [ i ];

vector [ i ] = vector [ j ]; LÓGICA

UECTOR [ j ] =
aux ; Empiezo en 0 , llego hasta dim -

6
j =
i +1 ; j < dim -1
- -

} posición para no salirme


del vector
le
17
Í "

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 '

no hay & porque tiene equivalencia a un puntero

→ GELSCFRGSE ) ; No es segura N
getsl frase ) :
hola 10 →
dim Útil = 4

NO tan COÑAZO → Elimina el '


In '
N FGCTS ( frase ) :
hola 1h10 → dim Útil =
5

→ FGETS ( frase , N , STCIIM ) ; segura

Pero un coñazo → NO elimina el


'
In ' i
Tenemos que intercambiar

'
el
'
10 por el
'
In '


Mostrar por pantalla

→ Printfl
"
Frase =
%s
"
, frase ) ; →
Frase =
hola sirven las 2

1 I → caracter
→ PUTSIFRCDC ) ;

hola

" " → cadena


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. Copiar una cadena en Otra Ü) STKDY ( copia ) Original ); →


hola I bala DUIDO y pone copia )
PUIDO hola

2 strlen :
sirve para obtener la dimensión útil de una cadena

dim =
Strlln ( frase ) ;

dim = strtn ( frase ) → dim =


Y si la hubiera guardado con
"
"
"
hola
lógica sirlen fgets → dim =
5

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

Y se queda aquí pq como no hemos eliminado las posiciones , sino

cadena [ j ] =
40 '
; que nos hemos cargado lo que había dentro de algunas →

hemos ocupado lo que había libres y ya no quedan

Matrices

IMT MQT [ N ] [M ] ;

Rellenar matriz ( int )

Mat [ 0J [ 0J

for Li =
0 ; i < nfilas ; i + + 4 may [ ] [a ]
las matrices se rellenan

MGT [ 0J [ 2 ] por filas


for I j =
0 ; j < NCOLUM ; j + + K

''
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

las matrices son cadenas o vectores por filas

Ejemplo : Inicializar una matriz de alumnos

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

vector de notas medias .


Mediante una función que recibe el n° de alumnos ,
el n° de asignaturas y la matriz , devuelve la posición del alumno con mayor nota

media ,
su nombre se ha de mostrar por pantalla desde el Main

✗ INT POSICION ( FLOAT Mat -


MOTCD [ ] [ M] ,
int num -
asignaturas ,
int n );

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

los punteros permiten :

1. Trabajar sobre las variables del Main desde las funciones & dirección

2. En línea con el punto anterior , permiten devolver más de un valor * valor

3. Permiten trabajar con vectores de tamaño variable l dinámicos) los * de las declaraciones no

es el mismo

la dificultad de los punteros se basa en entender correctamente la diferencia entre & y *

Ejemplo

int a ; este * no implica valor ,


es para mostrar que es un entero 1 .
Tipo de variable a la que apunta un puntero

int * pa ; Declaración de un puntero a entero 2 .


Sirve para indicar puntero
TTJ
3 .
Es una cuestión de estilo ,
facilita a la vista que la variable se trata de

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

a la que apunta el Puntero

.
No confundir el *
que se pone en la declaración con el * usado sobre el puntero para indicar valor

COSES :

t.int i ; Está mal pq estamos apuntando con

double * Di ; un puntero double a un entero

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

printfl " Entiendo DUMTCROS "


);

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 ✗

NO SE PUEDE CAMBIAR EL NOMBRE DE UNA DIRECCIÓN DE MEMORIA

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

1 int suma cinta ,


int b) ; * Nivel medio ×
a

2 IMT Suma ( int * pa ,


int * DD ) ; 1. tres =
Suma ( * DX , * DY ); 1
mmmm
y
mmmÍmm
llamada

a h
SUM
neg
indico que mando punteros 2 .
Pls =
Suma ( DX , DY ) ; 2

h h

y
int Main ( UOICI ) { mando punteros

int X , Y ; * Nivel alto

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

✗ leer ✗ e y posiciones de memoria

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

SUMAL Ax , dy , & suma ) ; ⚠


"
printfl "
suma = % d , suma ) ;

retorno ;

UOICI Suma ( int *


pa , int * pb , int *
psuma ) 4

( * psuma ) =
( *
pa s + ( * Db ) ; ( ) no son obligatorios pero ayuda a ver LO MÓD Claro

valor DSUMA = valor pa + valor ( Pb )

✗ * 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

include stdlib.tn → libreria para utilizar CAILOC

int Main cuoid ) &

float * vector ; Declaramos un puntero con el nombre del vector que nos interesa

int dim ;

leer dim →
dim =
5

( float ) CALLOC ( dim SIZEOF (


UCCTOT *
EH );
=
,
,

tipomuatiable tipo variable

ifluector = =
NULL 14 Poner siempre este if

printfl " Error asignación de memoria ) ;

bebe 4 El puntero ahora es un vector ( lo tratamos COMO un vector )

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

int vector EN ] ; Porque los vectores son punteros →


sería completamente equivalente si no estuviera [ N]

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

of 3 cities are stored in a


Write a program to analuse the temperatures of 3 cities. Weekly temperaturesThe maximum size of the
each column a city.
float matrix of size 7x3 where each row is a day and will calculate the average temperature and
matrix is 7X3. and if will be completely filled. The program number into vectors. The main
and the corresponding city
store the temperatures over this value
program will follow these steps:
to initialise the matrix- of temperatures reading the values from
the
Call the function Readmat Q
keyboard
Call a function AverageTemp (). This function will calculate the weekly average temperature of
the 3 cities, that is, the average of 21
temperatures. In addition, the function will calculate the
number of temperatures that are over the average temperature.
obtained. One
Allocate dynamic memory to 2 vectors, for hat number of temperatures previously
that are over the average, and another vector of
vector of float that will store all the temperatures
the average.
int that will store the corresponding city number of each temperature over
fill these vectors: the vector of float with all
the
Call a function Fil1_Temp_and_city( to
vector of int with the corresponding city number of
temperatures that are over the average, and the
each temperature over the average.
filled
Display the 2 vectors previously
number of temperatures over the
Calculate and display which is the city that has registered more
average.


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

of temperatures that are over 28.38 is 10


The vector of temperatures would be filled as follows (if the matrix is read by columns):
33 33

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

And the corresponding vector of cities:

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()

pts - Function Fill_Temp_and_city()

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

include stdlib.tn forlj =D ; j < M ; j + + la

define N 7 Drintfl "


Intro temp d de City t.cl : "
si -11 , j -11 ) ;

define 14 3
scanfl
"
/d
"
, & Matti ] [ j] );

UOI Reed Hat ( float Mat [ ] [ M ] ); }

UOID AverageTemp ( float MAI [ ] [ M ] ,


float *
average ,
int * COMT ) ; le

UOID Fill -
Temp and City
- -
I float Mat [] [M] ,
float * uec.SUD.int * UCC -
City ,
float One ) ; returns ;

¡ ni Main ( uol.dk y

float Mat [ N ] [ M ] ; UOID AUEROIGCTCMP ( float MAI [ ] [ M ] ,


float *
Paul ,
iut * COMT 19

float * Uec - SUD ; int I , j , cont =D ;

¡ni * uec - Cities ; float SUM =


0 ;

float alle ; for Ii =


0 ; i < N ; i + + K

int CONTI , CONTZ ,


i , j ; for I f- =
0; j < M ; jt -1K

float temp Max _


;
sum + =
Matti ] [ j ];

int City -
Max ; }

Reed Matlmat ) ;
}

Aueragetempcmat ,
dame , & cor ta ); ( * pone > =
SUMIIM + N ); lo mando directamente al Main

Mostrar resultados Forli =D ; i < N ; ¡ + +14

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 ) { }

printf ( " In EILOR en la asignación de memoria "


);
*
Darle =
cont ;

seises uec -
City es un vector reiurn ;

Fill Temps - -
and -
City ( Mat ,
nel SUD - , nel -
City Que ) ;
_
&

Mostrar UECTOTEJ ( for anidado ) UOID Fill -


Temp and City - -
( float Mat [] [M] ,
float * uec.SUD.int * UCC -
City ,
float alle 19

'

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 µ

iflmat [ j ] [ i ] > Que 14 Ulc - SUD [ K ] = Matti ] [ j];

cont + t
; Uec -
City [K ] =

j; UEC - CITY [ K ] =
COLUMNAS

} K + +
;

} Y

y a

free ( Uec City ) - ;


6

6 return ;

free ( Uec SUD ) le


-
;

retorno ;

21
ama
ALCAIDE (PGRA) 06/06/21

Ejercicio :
número invertido

int Main CUOICI ) 4

int num - Orig ; Descomponer un número :


1.10 y 110

int num - inueri =


0;

int resto ; 724%10=4

leer num 724110 =


72

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

TYPECIEF STRUCT { TUPECRF STTUCT 4

TIPO Uarl -
nombre 1 ; Char nombre [ N ] ;

TIDO UARZ -
nombre 2 ; BamzpB•ÑH int edad ;

} IVAR ; Y T PACIENTE ;
_

Una estructura puede tener estructuras dentro . para ello ,


las contenidas deben estar definidas previamente

TYPECRF STTUCT 4

int Oni [ M ] ; El operador '


.
'
se aplica a la derecha de una estructura para indicar

cnar letra ; que accedemos al valor de una de las variables que componen la estructura

4T DNI-
;

TYPCCKF STTUCT & T _


PACIENTE

¿ü÷:*
T .
DNI Oni -
paciente ;
paciente _
nombre [ 0 ]

Char nombre [ N ];

paciente .
nombre
¡ ni edad ;

. .
6T PACIENTE
_ ;

int Main ( UOICD &

int i ;

T PACIENTE
- paciente ;

IPACIENTE pacientes [N] ;

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 :

scanfl " 1. d" ,


& paciente .
Oni -
paciente .
dni [ i ] );

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-
;

TYPCCIEF STTUCT &

T.
DNI Oni -
paciente ;

Char nombre [ N ];

¡ ni edad ;

6T PACIENTE
_ ;

int Main CUOICD a

ini i , j;

5- PACIENTE pacientes [N ] ;

int dim ;

leer y validar 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 ) ;

scanfl " % C" , & pacientes [ i ] . dni paciente _ . letra );

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

Ejemplo : función que recibe 2 #s complejos por referencia luaricbles T


. COMPLEJO ) y devuelve la suma por valor

Typeckf STTUCI 4

igualar vectores →
NO
float real ;

igualar estructuras → si
float imag ;

igualar vectores de estructuras →


NO
le T COMPLEJO ;
-

igualar estructuras que contienen vectores →


si
UOID SUMGCOMDLÉFOI ICOMPIEJO *
pcl ,
T COMPLEJO
-
*
DC 2) a

T COMPLEJO
_
resultado ;

resultado = * pct + * DCZ ; mal ! ,


se ponen los c) .
También se puede poner :
pct → real + DCZ → real

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

COMILA Fundamentos de Informática


May 2015
1° IEM, ITL

Nombre:
Apellidos

Group: FL7 Fl 9

CONTESTAR AL EXAMEN EN EL LIBRILLO DF


ReSPuestAs

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

Introduzca un numero par mayor que 2: 13

Lo siento, pero tiene que ser un numero par

Introduzca un numero par mayor que 2:

Lo siento, pero tiene que ser un numero mayor que 2

Introduzca un numero par mayor que 2: 100000

Elnumero 100000 cumple la conjetura de Golbach ya que es suma de los numeros


primos ll y 99989

Terminated with return code 0


Press any key to continue

/* Problema Examen Teoría Mayo 15


Conjetura de Golbach

24
aaaa
ALCAIDE (PGRA) 12/06/21

÷
CLASE 5 #
#

Ejercicio :

Nombre :
• Cris Alcaide

Programa :
Función Golbach

Fecha :
12/06/21

induce STCIIO h .

int Golbach ( int num ,


int * ppriml ,
ini * pprim ) ;

¡ nt Primo lintn ) ;

int mainluoid ) 4

int print , primz ;

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

|

"
"" " "
"
"° " " "^^ " "" ° ° " "° "° -
°" "

} while ( num < =


2 11 NUM % 2
!
=
0 ) ;

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 Golbach ( int num ,


int * ppriml ,
ini * pprim ) 4

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

Programa 3 (3,5 puntos


smbir una función CompletarInfo() que complete la información recibida en un vector de
ectores. Esa función recibe un vector lectores de estucturas TLECTOR, asi como enoono
elementos en el vector num

La estructura TLECTOR tiene los siguientes campos


nombre: cadena de caracteres
idnumero:int

codigo vecorde enteros que contene el número de código de cada lbro comprado porese
lector en la libreria

l;int número de libros delvectorvcodigo


gasto: Hoat indica la cantdad de dinero gastada por ese lector comprando lbros en la
libreria.

vectorlectores serecibe en la funcón CompletarInfo() con todos los campos de cadalecto


elenos, salvo el campo gasto de cada lec
nción debe calcular el gasto v rellenar este
campo de cada lector en el vector lectores

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.

/* Problema 3 Mavo 201

completar vector de libr

#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 :

o_O Cris Alcaide

Programa :
completar vector de libros
nombre
id
Fecha :
12106121 LECTORA
✓ codigo ±
nl
* GASTO *

include STCIIO h
num lectores
.

define N 30
# CÓDIGO

TYDCCIEFSTRUCT h libros fi + &autor

Char nombre [N ] ;
☐- -

int id numero ;
libros
-

num
.

INT VCOCIIGO [N] ;

int nl ; número de libros del vector VCOCIIGO

float GCDTO ;

} T LECTOR ;
_

TYPCCRF STTUCT 4

¡ ni numero _
codigo ;

chal Autor [ N ] ;

Char titulo [N ] ;

float precio ;

YT LIBRO ;
_

UOICI COMDKTGRINFOL T LECTOR


_
lectores [] , int NUMLCC ,
T - LIBRO libros [ ] ,
int numlib ) ;

int Buscar libro line Cod ,


T LIBRO
-
libros [] ,
int numlib ,
T LIBRO
-
*
pencont ) ;

Main no hace falta

UOICI COMDKTGRINFOL T LECTOR


_
lectores [] , int NUMLCC ,
T - LIBRO libros [ ] ,
int numlib ) t

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 Buscar libro line Cod ,


T LIBRO
-
libros [] ,
int numlib ,
T LIBRO
-
*
pencont ) &

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 .

2) Escribe los elementos de la matriz por columnas ,


O 2 4

induce STCIIO h .

para crear el vector cifrado


6 8 1

define N 3
3 5 7

UOICI Cifrar l int V -


Orig [ ] ,
int V. cifr [ ] ,
int A) {

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) &

MAT [ fila ] [ columna ] =


V. Orig [ i] ;

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

MAT [ fila ] [ columna ] =


V. Orig [ i ] ;

columna + +
;

if ( columna = =
n ) d

fila + +
;

columna =
0 ;

te

¡ =
0 ;

for ( columna =
; columna < n ; columna + +14

for ( fila =D ; fila < N ; fila + + K

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 .

Hay que saber 3 cosas :

1) las letras del abecedario están escritas alfabéticamente


2) El valor de las letras mayúsculas es menor que el de las letras minúsculas ( A =
65 , a =
97 )

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 .

include CTYPC .tn

define N 50

Void Cesar ( Char cadena [] ,


¡ ni desp ) ;

int Main ( uol.dk

Char frase [N];

int CKSD ; lo pedimos al usuario

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

Cesar l frase , desp ) ;

DUTS ( frase ) ;

retorno ;

Void Cesar ( Char cadena [] ,


¡ ni desp ) t

int i ;

for l i =
0; cadena [ i ] ! =
'
10
'
; ¡ + + K

if ( cadena [ i ] > = '


A' 8D cadena [i] < =
'
Z
'
) &

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 Main cuoi d) 4 1 .


Nombre del fichero Mercadona

int n ; 2 .
Extensión txt (texto ) ,
. dat ( binario )

FILE * pf ; puntero fichero 3. MODO apertura

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á ,

Geisel no borra su contenido

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

I in wt : idem W , pero también permite leer


I

fdoselpf ) ; si el archivo es binario , hay que añadir una


'
b' al modo de apertura

Archivos de texto

EEEOELEIEEEEEEEYEEetexio.mn
fprintf escribe en el fichero

}
:
*

solo para cuchillos de texto :


Tt >
W , wt

* fscanf : leer del fichero

fprintf y fscanf NO SUSTITUYEN Al Dlintf y Scarf , solamente escriben en OTRO SITIO

DTIMTF →
fprintf

"
printfl
"
%d1.cl % f , producto .
Cod , PRODUCTO Uds .
, PRODUCTO . precio ) ;

fprintflpf PRODUCTO
"
%d1.cl PRODUCTO PRODUCTO Uds
"
, % f , .
COQ , .
,
. precio ) ;
=

nombre del puntero

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

leído la fila conecta mente ,


hacemos cosas con la estructura .
Es por eso que cuando leemos .
lo hacemos sobre una ucuiable denotada

auxiliar que será una variable de tipo estructura contenida en el fichero

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.

Une em lo de los datos iniciales del estudio uede ser lo siguiente

Matriz de ciudades

L
M RREe
arn 0

aaaaanrd0

Nnearnroee
0

Matriz de reci itaciones mensuales:

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

Escribir el programa de la siguiente manera


) Pedir al usuario el número de cudades registradas. El número de meses es siempre
12.

) Llamar a la función Registrar_Datos() para rellenar las dos matrices iniciales


Nota: No es necesario escribir el código de esta función solo escribir la llamada a l
función.

) Llamar a la función Contar_Ciudades() para contar el número nc de ciudades cu


ya precipitación media anual es mayor o igual que 30 mm
)Asignar memoria dinámica al vector pe de estructuras TLLUVIA para un númerc

Ti
nc de estructuras

5) Llamar a la función Rellena Vector() para rellenar el vector de estructuras ve


guardando los datos de las ciudades que superan 30 mm de precipitación media
anual

)Llamar a la función Buscar_Max(). Esta función recibirá el vector vec de estruch


ras y devolverá a mnin
rencia la estructura de la ciudad que ha tenido la má
xima precipitación media anual

)Mostrar en main los datos de la ciudad que tiene la máxima precipitación medis

scribir el programa completo, incuyendo typedeí, el programa principal y el códizo de la


funciones
contar_Ciudades(), Rellenar_Vector() y Buscar_Max(
o escribir el código dela función Registrar Datos(

Programa 3 (3.5 puntos


Un banco dispone de un fichero binario con el listado de hipotecas (datos.dat), de acuerdo
a siguiente estructura de datos

typedef struct

char nombre clientef1001,


int dni cliente

long deuda inicial

long deuda pagada,


T DAT

32

III
Clase |L

PONTISICL
Fun amentos de Informática 1° IEM, NTL
Conmias enero - 2012

Abeg
xamen práctico Enero 201

Nombre: Apellidos:

Aula: PCn" N° alumno:

InstruccionEs.

Se pondrá el nombre y el número de PCen esta hoja, así como en la ficha (cabecera) del pro

Crear el proyecto del programa en EL DIRECTORIO QUE INDIQUE EL PROFESOR


El fichero del código fuente debe ser el número de matrícula, por ejemplo: 200301234.cpp
Las funciones sólo pueden tener un return
Sólo puede realizar operaciones de entrada/salida (printf, scanf, gets, etc,) en la función
main() yen Mostrar_vec(
No puede utilizar exit, continue, ni break (salvo enla instrucción switch)
No puede utilizar variables globales
DURACION: 1 ho1 minutos

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(),

asina memoria al vecton

lama a la función Rellenar() para copiar dichas estrellas


A continuación se pregunta al usuario el identificador de la estrella que desea eliminar y
lama a la función Eliminar (

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

3- Una función Rellenar() querecba el puntero (FILE*) al archivo de textoyel vectoryrellene e


vector con las estrellas entre las distancias indicadas

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:

1 punto-Estruchura general: Ficha, includes, estructura, declaración de variables


1 puntos - Apertura/cierre de fichero
untos – Memoria dinámica

1.5 puntos – llamadas a las funciones


Leer el identificador de la estrella a eliminar. Mostrar la estrella eliminada (si ha sido encon
ada) o el mensaje de error. Mostrar el contenido del vector
ntos - Función Contar (

ntos - Función Rellenar()

ntos - Función Eliminar()

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,

newn ✗ nueva dimensión

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 ,

Void elleuor (FIle* f T-EST A vec archivo

reúna para

que vuelva a

arriba
c

TEStrFllA auX

FEAS
e
iztstcud (Dh
d, łax.ds Lavrmsa lan teup)
C

f (r

f(aux.clSt -IX2& ax.cls


vecliJ

fwlule (ctri )

Mt Eluminar (TesTeil vecL ,unt n,nt idsüg elvm )


sol buena

Pfff ,

-
amor Len
*. i. i.
ÉÍ¥ÜÉÉ¥¥ :*

condado
in L+

ueij ] =

ueíj + a ] ;

(vectil.id sidsopr)
du zvecLi.id)
* zlm)- vectiI
(pelliu) -

ect Cra1

Void MeSar (TeSTRELln estreula7 returllteuadimnuoadiuzh-I

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

int Main ( UOL.dk 18


196619 20
+
%

FILE *
pfb ;

¡ ni
⚠ cualquier función que utilice un fichero
n ; ,

recibe el fichero abierto ,


esto es ,

"
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

CONSOLA TEXTO Binario

escritura printf fprintf fcorite

lectura scanf fscanf fread

Escritura

"
FDRINTFCPFT ,
-

1. d id f
"
, PRODUCTO .
COCI , producto Uds .
, PRODUCTO precio ) ;
.
Lectura

tienen que ser =

FWRITCI & producto


-
,
sizeof-I-RDUCT-s-1.EE , 00h

escribe en la dirección
TIDO dnd lo escribo Ctrl =
Freadl doux ,
SIZCOFCT PROD ) 1 pfb ) ;
de memoria
,
del producto
.
,

por esto no podemos entender ni estructuras iflctrl = =


1) 4 pq estoy leyendo 1 estructura

los archivos binarios escribimos

direcciones de memoria . .
.

Cómo escribir un vector de estructuras en un fichero binario ? }

1 for ( ¡ =D ; i < dim ; ¡ + + 14 6 while ( CTM = =


1 ) ;

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

escribe directamente el lector entero

i&Ü%%%mÜr_
, considerar que puede estar compro

Acceso directo

El acceso directo nos permite acceder a distintas líneas de nuestro


fichero , y se basa en el uso de la función fseek C)

áü
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

1. Inicializar Max unidades _


=
-1 ;

2. Recorrer el fichero actualizando Max _


unidades Y nos quedamos con la posición de la fila

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 ¡

Ejemplo motivación Función : actualizar binario

" "
pfb =
fopln ( Mercadona dat .
,
"
nbt " ) ;

¡ f ( pfb = =
NULL ) 4

"
printfl Error
"
)
;

bebe a × aquí iría el rewind


→ rewind ( pfb ) ;

Actualizar Fichero L pfb ,


CKSC ) ;

:
fclosl ( Dfb ) ;

÷
Uoid Actualizar Fichero LFILE * pfb ,
float Clerk

int Ctrl ,
10C ;

¡ nt ¡ =
☒ ;

5- PROD aux ;

float Max = -1 ; Paso l

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) ;

fseek ( pfb , 10C * SIZCOF ( T PROD ) -


,
SEEK _
SET ) ;

f-read l daux , SIZCOFLT PRODI -


,
1 , Dfb ) ;

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

Programa 3 (3.5 puntos


Un banco dispone de un fichero binario con el listado de hipotecas (datos.dat), de acuerdo a
la siguiente estructura de datos

typedef struct
char nombre cliente100|,

int dni cliente,

long deuda inicial

long deuda pagada

|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

char nombre cliente100)

int dni cliente

long deuda inicial

long deuda pendiente

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:

int Copiar(FILE *fpdat, FIlE *fpnew)

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

IEOGTGMNMQ : Junio 2014

Nombre :

dos
Cris Alcaide SÓLO me piden

Programa :
Junio 14 .
"
datos .
dat
"
hacer la función

Fecha :
13106121

include STCIIO h .

include String .tn


datos .
dat recordar
Typldlf STTUCT 4

N m un # 1. El que más
→ Buscar un máximo → do while ( tot gente
-

que se llama "


copiado
"
);
Char nombre -
Cliente [ 100 ] ; dinero cepa

m m m

int dui cliente ; _

m m m

long deuda _
inicial ;

n
n n

long deuda _
pagada ;

°" d. Pagada
6T -
DAT ; nombre
d. pendiente

TYDCCRF STRUCT &

Char nombre -
Cliente [ 100 ] ;

int dui cliente ; _

long deuda _
inicial ;

long deuda pendiente ; _

6T _
NEW ;

¡ MT Copiar / FILE *
fpdat ,
FILE * fpnlw ) ;

NO me pide el Main

IMT Copiar LFILE *


fpdat ,
FILE * fpnlw )9

IDAT datos ; IFLACODIQR = =


1) {

T NEW
_ nuevo ; FSLCKLFPDAT , DOS * SIZCOFLIDAT ) ,
SEEK _
SET ) ;

int Ctrl ; fread ( &datos , SIZCOFCIDAT ) ,


1 , fpdat ) ;

float mayor ; STRCPYCMUEUO nombre Cliente . _


,
datos nombre diente ) ;
. _

float deuda - Pdte ; nuevo .


dni - cliente =
datos .
dui cliente ; _

int i ; nuevo .
deuda inicial _
-
datos deuda inicial . _
;

int acopiar ; nuevo .


deuda ini _
=
datos .
deuda _
inicial ;

¡ ni DOS ; nuevo .
deuda Pdte -
=
mayor ,

¡ ni cuentas _ copiadas =D ; fcuritelofnueuo ,


SIZCOFLINECU ) ,
1 , fpnew ) ;

dot STRCDUC datos nombre .


,
"
copiado " );

acopiar =
0, ASUMO que no queda nadie fseeklpfdat , POS * SIZCOFCT - DAT ) ,
SEEK SET ) ; -

rewind lfpdat ) ; fcoritclddatosisizeof ( T DAT )


-
,
1 , fpdat ) ;

mayor = -1 ; acopiar ++ ;

¡ =D ; G

doh leconilecacopiar =
-1 ;

Ctrl =
freadlddatos ,
SIZCOFLIDAT ) ,
1 , fpdclt ); retllrn ;

iflctrl = =
1) a }

IFLSTRCMDLDATOS nombre Cliente . _


,
"
copiado
"
) ! =
014

deuda - Pdte =
datos deuda. _
ini -

datos deuda . _
pagada ;

mayor
-
-

deuda - Pdte ;

DOS
=
i ;

acopiar -1 -

, todavía queda gente por copiar

:
¡ ++
;

Eunice ( Ctrl -
- =
1) ;

40
-909
e.
om Fundamentos de Informatica 1°IEM–1º ITL, 2014-2015

Ex-Practica 7/Mayo/2015 modeloa

Nombre: Apellidos:

Grupo: Aula: pCn alumno:

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.

DURACION: 1h30 minutos

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

Para realizar el roorama se deben se uir estos asos.

1) Llamar a la funciónvoid Contar(FILE *oft, int *pcont);para contar el número de los


clientes de la empresa utilizando el archivo de texto “conSumo5.tXt. La función
devolverá este dato por referencia

2)Asignar memoria dinámica al vector de consumo (Vec_consumo) de tipo T CLIENTE


para todos los clientes.

3) Para cada cliente rellenar el vector Vec_conSumo llamando a la funcion


void Leer vec(FILE *pft, T GLIENTE *vec consumo),
En esta función se debe usar el archivo de texto “consumo5 . tXt" para rellenar los datos de
los clientes calculando, adicionalmente, el precio total de consumo del cliente y asignando el
valor 0 al campo descuento (indicando el precio a pagar sin descuento)

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

COMILLAS Fundamentos de Informática 1%IEM–1º ITL, 2014-2015


Ex-Practica 7/Mayo/2015 modEloa

)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

6)Finalmente, el programa buscará al cliente con el máximo consumo. A este cliente se le


aplicará un descuento de 10
sobre el precio total de su factura y cambiará el
descuento de la estructura a 1 (para indicar que se ha dado un descuento). En la función
Buscar_Descuento() hay que buscar la posición del cliente con el máximo consumo
actualizar en el archivo binario "Clientes.dat" los datos de este cliente aplicando un
descuento del 10% a su precio a pagar y devolver por referencia al programa principal la
posición donde se encuentra dicho cliente en el archivo binario

La función para realizar este paso es


void Buscar_Descuento(FILE *pfb, int *pos);. Esta función devolverá por referencia la
posición de este cliente a main() y se mostrará por pantalla desde el main() la posición que
ha sido modificada.

Nota:noestápermitidousarunvectorniunarchivoauxiliarenlafunción
Buscar Descuento().

A continuación, lamar de nuevo a la función Mostrar Faciuras() para mostrar en la pantalla


los datos del archivo binario actualizados

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

punto: Función Contar() , prototipo, l amada y

.5 puntos: Función LeerVec(): prototipo, llamada y código


1,5 punto: Función CrearBinario(): prototipo, llamada y código.
1,5 puntos:Mostrar_Facturas() : prototipo. llamada y código

puntos: Buscar Descuento() : prototipo, llamaday código

42
-04
ese
COMIAS c

Fundamentos de Informática 1%IEM–1º ITL. 2014-2015

x-Practica 7/Mayol2015 MoDEloa

em lo de la eiecución del roerama:

Partiendo del archivo de texto inicial “ConsumoS.tXt" con los datos sisuientes
4

11111 1 500 0.15

222222 450 0.15

333333 700 0.15

4AA4 650 0.15

555555 4000.15

565666 3500.15

l
El resultado de la e ecución será

Numero de clientes-6

Los datos iniciales del archivo binario

Dnt ConsuMo PRECIO(kWh)TOTAL PAGAR DESCUENTO

11 600 0.15 90.00

22222 450 0.15 67.50

333333 700 0.15 105.00

4AA44 6S0 0.15 97.50

555555 400 0.15 60.00

666666 350 0.1S

Posicion del cliente de máximo consumo=

Factura de los clientes (Archivo Binario modificado)

¡
Dnt consuMo PRECIO (KWh)TOTAL_PAGAR DESCUENTO

111111 600 0.15 90.00

2 450 0.15 67,50

333333 700 0.15 94.50

4 650 0.15 97.50

555555 400 0.15 60.00

666666 350 0.15

Press any key to continue.

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)

( zenw abrieudo arcliva


elses
ntor Pet en) remind cpft
)

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-

mod de eichero binariotIn


PACiAe Desi.i
VE CON

cturcs (

achras (ptb


free (veczcousumo

44

Erecciones
Cador (FILE *pft,nt *peou

nt c
T.CLIENTEQUx

)0

lAWk-DNI, &auY, eCsIMn


f(chr

wind (pft)

B ra m r
[erur

Void Leervee(FILg *pkt,LCIeNTeveccosumoL3

T_ClientE cx:

ntctrl

cve

recio
AUÁ*D
ouk. Ceswe

c„(aSvmoli Jzauk

ulsilaf ctr
relind iat

void Creor -Dmawrio(FILe *ptb, T.CLieNIE


vec_ceusume tCll

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

chrl freod(8aux, Sireof (RcuenrE ),4 cleute reli o

f (ctr rerurn

MostrarUn_Clieutc (aux)) / 0?uonal

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:

eek b)( p0J)" ( EN ),J SE )


wnt(Aowxa( ae)4
oy wri

1
ceusemi0 pee C )
Ca10x

45
jubilelitr
aaaa
ALCAIDE (PGRA)
SIMULACRO I
19/06/21

Pmtngrcmclm :
( 2.5 Ptos )

Nombre :

era Cris Alcaide

Programa :
Calcular serie ( )

Fecha :
19106121

include STCIIO h .

include Math h .

float calcular _
Serie ( float × , int A) 4

uoid Factorial ( int num ,


ini *
pres K

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

uoid Factorial ( int num ,


ini *
pres K

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

uoid Rellenar Matriz ( Chal matriz [] [K ] , int dim ) ;

UOIQ Buscar Cad ( Char matriz


_ [ ][K] ,
int dim , Char palabra [ ] ,
int * pn veces > {
_

¡ ni Main CUOIDK

Chal MATRIZ [ N ] [K] ;

int n ;

Char car [K ];

int cont ;

print f l
''
In Intro n :
"
);

scanfl
"
id "
,
dn ) ;

Rellenar Matriz ( matriz ,


n ) ;

"

printfl "
In Intro palabra a buscar : );

Flush ( Stain );

GCTS ( car ) ;

Buscar Cadl matriz


_
,
n . car , dont ) ;

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 ;

UOIO Buscar Cad ( Char matriz


_ [ ][K] ,
int dim , Char palabra [ ] ,
int * pn veces > {
_

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

¡ f ( matriz [ ¡ ] [ j] palabra [ && ( =D 11 matriz [ i ] [ j -1 ]


' '
K
]
f
= = = =
=

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

Pmhogrclmctzsm : ( 4.5 ptos )

include STCIIO h .

include STCILI b. h

define N 20

typlcllf STTUCT h

Char nomble [ N ] ;

double distancia ;

intuido ;

GT ESTRELLA ;
-

UOIQ Rellenar Estrellas ( T ESTRELLA - UECTOR [ ] ,


int num -
CST ) ;

Uoid Rellenar Una Estrella CT ESTRELLA .


* est ) ;

UOIQ Contar LT ESTRELLA .


UECTOR [ ] ,
int num -
CST ; int * nsv ) ;

UOID Eliminar Estrellas Sin Uida LT ESTRELLA


.
UECTOR [ ] ,
int * num -
CST ; T
.
ESTRELLA VSV [ ] ) ;

UOIO Mostrar Estrellas ( T


-
ESTRELLA U [ ] ,
int n );
y
Uoid Mostrar Una Estrella ( I ESTRELLA est ) ; no hacer el código

int Main cuoid Y

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

Rellenar Estrellas LU - est , num est -


);

contarla . est ,
num est - ,
drum sinuida ) ; .

ifl num Sinuida -


! =
0 K

4. SIMUIDG =
( T ESTRELLA
-
* ICOLIOCL num SIMUIDA -
,
SIZCOFLT ESTRELLA ) ) ;
-

¡ FIU -
SIMUIDA = =
NULLK

piinifl
"
In EUOR asignación de memoria "
);

deben

Eliminar Estrellas sin Uida ( U est -


,
drum - est ,
U -
sinuida ) ;

"
print fl
"
In Las estrellas con posibilidad de vida son : );

Mostrar Estrellas IV. est , num -


est ) ;

posibilidad de vida );
"
Dlintfl In Las "
estrellas sin son :

Mostrar Estrellas IU Sinuida -

,
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

UOIQ Rellenar Estrellas IT ESTRELLA - UECTOR [ ] ,


int num -
CST ) ;

¡ ni i ;

for Ii =D ; i < num -


CST ; i + + K

Rellenar Una Estrella Collector [ i ] );

le

reiurn ;

Uoid Rellenar Una Estrella IT ESTRELLA .


* est ) }

"
printfl "
In Intro Nombre * :
Y

fflllshlstdin );

GCTS ( ( * est ) .
nombre );

"
printfl dise );
"
In Intro :

scanfl
"
% f
"
,
& ( * est ) .
distl ;

DLIMTFL "
Intro vida 10-1 ) : "
);

scanfl d & vida )


" "
% ( * est )
. .

reiurn ;

Uoid Contar LT ESTRELLA .


UECTOR [ ] ,
int num -
CST ; int * nsv ) {

¡ ni i ;

* nsu =
;

for Li =
; i < num - est ; ¡ + +14

If ( UECTOR [i ] .
vida = =
D) {

( * NSU ) + +
;

return ;

UOID Eliminar Estrellas Sin Uida LT ESTRELLA


.
UECTOR [ ] ,
int * num -
CST ; T
-
ESTRELLA VSV [ ] ) ;

int I , j , K ;

j =
0;

for l i =D ; i < ( * num - est ) ; i + + 1h

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

Mostrar Una Estrella LU [ i ] ) .

} ,

return ;

49

También podría gustarte