Sunteți pe pagina 1din 4

Facultad de Ciencias Exactas, Ingeniera y Agrimensura

Departamento de Sistemas e Informtica


Escuela de Electrnica
Informtica II
Prctica 1: Arrays y punteros
Contenido:
Esta prctica est diseada para que el estudiante comience a utilizar el concepto de
puntero, ntimamente relacionado con el de array.
1) Descubriendo punteros: analizar los resultados del ejemplo.
#include <stdio.h>
int main(void)
{
int i = 8, *pi=&i;
long long l = 8, *pl=&l;
float f = !".8f, *pf=&f;
dou#le d=$%8.&&, *pd=&d;
p'intf((va'ia#le int, tam.#)tes* +d ,tdi'.&i* +p ,tvalo'* +d,n(, si-eof(i), &i, i);
p'intf((punte'o int, tam.#)tes= +d ,tdi'.&pi* +p ,tvalo'* +p,n(, si-eof(pi), &pi, pi);
p'intf((va'ia#le long, tam.#)tes* +d ,tdi'.&l* +p ,tvalo'* +ld,n(, si-eof(l), &l, l);
p'intf((punte'o long, tam.#)tes* +d ,tdi'.&pl* +p ,tvalo'* +p,n(, si-eof(pl), &pl, pl);
p'intf((va'ia#le float, tam.#)tes* +d ,tdi'.&f* +p ,tvalo'* +.f,n(, si-eof(f), &f, f);
p'intf((punte'o float, tam.#)tes* +d ,tdi'.&pf* +p ,tvalo'* +p,n(, si-eof(pf), &pf, pf);
p'intf((va'ia#le dou#le, tam.#)tes* +d ,tdi'.&d* +p ,tvalo'* +."lf,n(, si-eof(d), &d, d);
p'intf((punte'o dou#le, tam.#)tes* +d ,tdi'.&pd* +p ,tvalo'* +p,n(, si-eof(pd), &pd, pd);
int vec.!!/; 00 linea de cam#ios
vec.!/ = &&;
p'intf((va'ia#le a''a), tam.#)tes* +d ,tdi'.&vec.!/* +p ,tvalo'* +d,n(, si-eof(vec.!/), &vec.!/, vec.!/);
p'intf((punte'o a''a), tam.#)tes* +d ,tdi'.&vec* +p ,tvalo'* +p,n(, si-eof(vec), &vec, vec);
'etu'n !;
1
Verifique el tamao de cada tipo de variable y del puntero asociado.
En 200 linea de cam#ios3 acer el si!uiente reemplazo:
int *vec;
vec= (int*)malloc(si-eof(int)*!!);
"nalizar los resultados.
2) Escriba un pro!rama que defina las si!uientes variables:
int i=4, 5./={,",6,&,4,$,%,8,7,!1;
cha' 8 = 9a9, pal ./ =(te8to en c(;
int *pi;
cha' *pc;
Informtica II Prctica 0 v. 2011 Pg 1 de 4
1 #ostrar la direcci$n de i y su valor.
! #ostrar los mismos valores a trav%s del puntero pi.
" &ecorrer el vector j mostrando para cada elemento, su direcci$n y su valor.
# &ecorra el vector accediendo a trav%s del puntero pi y usando l!ebra de
punteros.
$ &epita lo mismo con las variables char, el arre!lo y el puntero.
'. (inalmente muestre la direcci$n donde se almacenan ambos punteros.
)enere una salida del tipo:
:o' ;a'ia#le* 9i9 ;alo'* 4 <i'ecci=n* 6>>4?
:o' :unte'o* 9pi9 ;alo'* 4 <i'ecci=n* 6>>4?
:o' ;a'ia#le* 95.!/9 ;alo'* <i'ecci=n* 6>>"?
:o' :unte'o* 9 pi(=&5)@!9 ;alo'* <i'ecci=n* 6>>"?
:o' ;a'ia#le* 95./9 ;alo'* " <i'ecci=n* 6>>6!
:o' :unte'o* 9pi(=&5)@9 ;alo'* " <i'ecci=n* 6>>6!
A
:o' ;a'ia#le* 989 ;alo'* a <i'ecci=n* 6>>"6
:o' :unte'o* 9pc9 ;alo'* a <i'ecci=n* 6>>"6
:o' ;a'ia#le* 9pal.!/9 ;alo'* t <i'ecci=n* 6>>!?
:o' :unte'o* 9pc(=&pal)@!9 ;alo'* t <i'ecci=n* 6>>!?
:o' ;a'ia#le* 9pal./9 ;alo'* e <i'ecci=n* 6>>!<
:o' :unte'o* 9 pc(=&pal)@9 ;alo'* e <i'ecci=n* 6>>!<
A
<i'ecci=n de *pi* 6>>!! <e *pc* 6>B>&
3) *rear un pro!rama que lea un n+mero determinado ,-.//0 de reales introducidos por
teclado, los almacene en un vector para lue!o mostrarlos en orden inverso. 1ara
recorrer el array deber usar aritm%tica de punteros en lu!ar de ndices del array.
4) Escribir una funci$n que tome como ar!umento un entero positivo entre . y 2 y retorne
un puntero a cadena con el nombre del da de la semana correspondiente al
ar!umento. 1robar dic3a funci$n.
5) Escribir una funci$n void que tome como ar!umentos: la cantidad de 4ilos de
determinado producto adquirido por un cliente y el precio por 4ilo del mismo ,ambos
n+meros flotantes05 la misma debe calcular el importe de la compra. El descuento
efectuado a compras superiores a .//6 es del ./7, con lo cual la funci$n deber
tambi%n calcular el nuevo monto, si es que corresponde el descuento. 8sar
ar!umentos pasados como punteros, donde corresponda.
6) Escribir las funciones que operan sobre cadenas de caracteres.
#include <stdio.h>
#include <stdli#.h>
t)pedef enum { CDEFG?FHDG, CIJFG?FHDG 1 ma)Kmin;
int st'Ha'go(const cha' *o'igen); 00?antidad de ca'acte'es
int st';acio(const cha' *o'igen); 00'eto'na si tiene al menos un ca'acte', ! en ot'o caso
Informtica II Prctica 0 v. 2011 Pg 2 de 4
void st'?opia(cha' *destino, const cha' *o'igen); 00 ?opiado'
void 'eve'se(cha' *st'ing);00inve'ti' una cadena
void st'I-L(cha' *destino, const cha' *o'igen); 00 Gaca #lancos I-L.
void st'<e'(cha' *destino, const cha' *o'igen); 00 Gaca #lancos <e'.
void st'Dm#os(cha' *destino, const cha' *o'igen); 00 Gaca #lancos I-L. ) <e'.
void st'Ca)Cin(cha' *destino, const cha' *o'igen, ma)Kmin m); 00 ?onvie'te Ca). Cin.
int main(){
cha' *te8t =( Ge'a ?ie'to MM (;
int la'go=st'Ha'go(te8t)@;
cha' *'esult = (cha' *)malloc (la'go);
if('esult == JFHH) 'etu'n N;00sino pudo 'ese'va' memo'ia pa'a 'esult
p'intf((Ha cadena* ();
puts(te8t);
p'intf((Ge encuent'a* +s,n(,(st';acio(te8t) M (Jo vacia( * (;acia());
p'intf((Ha'go * +d,n(, st'Ha'go(te8t));
st'?opia('esult,te8t);
p'intf((?opia * .+s/,n(, 'esult);
st'I-L('esult,te8t);
p'intf((Gin #lancos a la I-L*();
puts('esult);
st'<e'('esult,te8t);
p'intf((<e' * .+s/,n(, 'esult);
st'Dm#os('esult,te8t);
p'intf((Dm#os* .+s/, sin #lancos al p'incipio ni al final.,n(, 'esult);
st'Ca)Cin('esult,te8t, CDEFG?FHDG);
p'intf((Ca)usculas * .+s/,n(, 'esult);
st'Ca)Cin('esult,te8t, CIJFG?FHDG);
p'intf((Cinusculas * .+s/,n(, 'esult);
'etu'n !;
1
Salida:
Ha cadena* Ge'a ?ie'to MM
Ge encuent'a* Jo vacia
Ha'go * "!
?opia * . Ge'a ?ie'to MM /
Gin #lancos a la I-L*Ge'a ?ie'to MM
<e' * . Ge'a ?ie'to MM/
Dm#os* .Ge'a ?ie'to MM/, sin #lancos al p'incipio ni al final.
Ca)usculas * . GBOD ?IBOPQ MM /
Cinusculas * . se'a cie'to MM /
:'esione una tecla pa'a continua' . . .
) Escribir una funci$n que reciba como ar!umento un entero y lo convierta ,valor de
retorno0 en una cadena de caracteres en su representaci$n decimal. 9dem para:
representaci$n octal, 3e:adecimal y binaria ,!enere una funci$n por cada una de estas
opciones0

Informtica II Prctica 0 v. 2011 Pg 3 de 4
!) ;e necesita contar las letras de un te:to in!resado. El te:to puede tener varias
oraciones. *rear una rutina que almacene las letras y la cantidad de veces que
aparecen. )enerar un informe con el detalle, en caso de no sean alfab%ticos o
n+meros, mostrar su valor 3e:adecimal. Debe crear un vector de punteros que
almacenen las frases y lue!o recorrerlo con un puntero de doble in<direcci$n.
") Escriba una funci$n que reciba como ar!umento un entero positivo ,n0 y que !enere
en forma dinmica una matriz identidad de dimensi$n n.
1#)Escribir un pro!rama para calcular el determinante de una matriz:
;olicite la dimensi$n por teclado.
;olicite memoria para el almacenamiento.
=n!rese por teclado los coeficientes con valores.
Desarrolle una funci$n que realice el clculo.
int dete'minanteKCat'i-(int tam, int **mat'i-);
#ostrar por pantalla los ran!os de la memoria asi!nada para la matriz.
Verificar los resultados.
>ota: &ecordar que el determinante de una matriz es
!1 1! !! 11
!! !1
1! 11
a a a a A
a a
a a
=
1! !1 "" 11 !" "! 1" !! "1 "! !1 1" "1 !" 1! "" !! 11
"" "! "1
!" !! !1
1" 1! 11
a a a a a a a a a a a a a a a a a a
a a a
a a a
a a a
+ + =
*ompare las tres formas de resolver: #atriz con subndice, solo punteros y punteros con
subndices. ,Esto es: en tiempo de escritura del pro!rama, cantidad de memoria ocupada
y cantidad de operaciones para resolver el problema0.
11)1roducto escalar de #atriz: )enera una nueva matriz al que se le multiplica cada
elemento por un valor ,escalar0:
;olicite el valor escalar y la dimensi$n de la matriz por teclado.
;olicite memoria para el almacenamiento.
?lene la matriz con valores aleatorios.
Desarrolle una funci$n que realice el clculo clculo y devuelva un puntero a la
nueva matriz.
int ** p'oductoKBscala'KCat'i-(int fil, int col, int esc, int **mat'i-);
Informtica II Prctica 0 v. 2011 Pg 4 de 4

S-ar putea să vă placă și