Noticias

CAR STEREO UNLOCK CODES --> Ahora solo Accesible para Miembros Premium

Premium Membership

Si abona su suscripción

con PAYPAL

solo costará

U$D 18 POR AÑO

Pague con Paypal o con Tarjeta de Crédito de forma SEGURA!

Nota: Si Ud. anula, elimina o desactiva la suscripción, perderá su calidad de Miembro Premium.

¿Qué es PayPal?

SUSCRÍBASE YA !

Otras formas de pago:

Donar + PREMIUM

Conviertase en MIEMBRO PREMIUM y acceda a más de 10 TeraBytes de información, de forma ilimitada.


No cobramos los archivos ni el material que los usuarios suben, solo les pedimos que cada uno pague por el ancho de banda que consume, ya que cada vez es más costoso el bandwidth y no podemos pagar lo que los usuarios descargan sin ningún tipo de control.

Bienvenido(a), Visitante. Por favor, ingresa o regístrate. ¿Perdiste tu email de activación?
mayo 25, 2019, 09:13:56 am

Ingresar con nombre de usuario, contraseña y duración de la sesión

AllDataSheets

Buscar Datasheet

CuentaDigital

Web Amiga

DT-PhoneS

SITEMAP

-----------


Clase Nro3 Curso de PICs

Visitante · 20924

0 Usuarios y 1 Visitante están viendo este tema.

hector27

  • Visitante
on: abril 22, 2009, 07:45:45 am
Comenzamos con los datos para construir la primer plaqueta para hacer prácticas.


hector27

  • Visitante
Respuesta #1 on: abril 22, 2009, 08:10:05 am
Va el TP13, donde tenemos la primer funcion.
La funcion usada es el loop hecho con for, del TP12; modificado para usar incremento en vez de decremento de la variable contador.
Compilen y vean el resultado

La funcion en resumidas cuentas no es otra cosa que sacar de la funcion main un trozo de codigo y ponerlo en otro lado. Veremos en otros TP mas propiedades de las funciones.
Las ventajas son evidentes, la funcion main queda mas legible, puedo hacer la programacion en forma "modular", que simplifica la tarea cuando el programa es muy extenso y tambien puedo repetir el uso de la misma funcion en distintas partes del programa.

La funcion debe ser declarada, que es lo que aparece en el codigo antes de la funcion main.

Como "tarea para el hogar" (pedida por uno de los colegas) deberan hacer un programa similar, pero usando el loop con while.

/* ----------------------------------------
-            Trabajo Practico Nro 13      -
-              Funciones                  -
-----------------------------------------*/
//incluyo las librerias
#include <stdio.h>
#include <stdlib.h>
void LoopConFor(void);


//comienza la funcion principal
void main(void)
{
LoopConFor();
return;
}

//**********************
//funcion con loop usando for
//**********************
void LoopConFor(void)
{
//defino la variable, a la que llamo contador como entero, y local
int contador;
printf("\nLoop usando for:");
//hago el loop
for(contador=1;contador<7;contador++)
{
//imprimo la variable contador
printf("\n%d", contador);
}
printf("\nContador Termina con:%d", contador);
}


Desconectado Jorge José

  • ADMINISTRADOR - Administrator
  • **
    • Mensajes: 8409
    • ACTIVIDAD:
      0%
    • DT$ 5203
  • PARA TODO EL MUNDO
Respuesta #2 on: abril 23, 2009, 00:17:58 am
Modifique un TP para realizar la tarea para el hogar cosa de recordar los nombres de las instrucciones , (no tengo buena memoria)

parte del programa ,el resto no lo coloco,.... para que practiquen

/* ----------------------------------------
-            Trabajo Practico TH1         -
-           tarea para el hogar           -             
-----------------------------------------*/
//incluyo las librerias
#include <stdio.h>
#include <stdlib.h>


//comienza la funcion principal
void main(void)
{
//defino la variable, a la que llamo contador como entero, y local
int contador;


Para todas tus dudas te recomiendo leer Atentamente
-><-><-><->Como ->

 
____________________________________________


hector27

  • Visitante
Respuesta #3 on: abril 23, 2009, 08:31:16 am
Va el TP14, donde le agrego a la funcion la posibilidad de ingresarle una variable. En este caso esa variable es el tope de conteo del loop.
A la tarde tendran la explicacion, vayan compilando y viendo el código.


/* ----------------------------------------
-            Trabajo Practico Nro 14      -
-              Funciones                  -
-----------------------------------------*/
//incluyo las librerias
#include <stdio.h>
#include <stdlib.h>
void LoopConWhile(int contador);


//comienza la funcion principal
void main(void)
{
//defino la variable1 como entero, y local
int variable1;

//doy indicacion al usuario
printf("\nIngrese un numero del 0 al 9, y luego <enter>");

//leo el numero desde el teclado
variable1=getchar();
//convierto caracter ascii a entero de un digito
variable1=variable1-48;
//corrijo si ingrese‚ un numero mayor que 9
if(variable1>9) variable1=9;
//corrijo si ingrese‚ un numero menor que 0
if(variable1<0) variable1=0;
//llamo a la funcion con un loop
LoopConWhile(variable1);
return;
}

//funcion con loop usando while
void LoopConWhile(int variable1)
{
int contador;
contador=0;
printf("\nLoop usando while:");
//hago el loop
while(contador<variable1)
{
//imprimo la variable contador
printf("\n%d", contador);
contador++;
}
printf("\nContador Termina con:%d", contador);
}


Desconectado guss

  • GOLD MEMBER
  • *
    • Mensajes: 1233
    • ACTIVIDAD:
      0%
    • DT$ 615
  • rokero viejo
Respuesta #4 on: abril 23, 2009, 08:51:48 am
Un par de preguntas de la placa de entrenamiento.
tiene un conector bnc para que?
describí el representador para ver donde lo podemos conseguir.
Si podes tira la lista de materiales porque vi un pote tipo rot.
es para no hacer macanas o modificar la placa según disponibilidades.
Gracias .

 abrazoo abrazoo abrazoo abrazoo abrazoo abrazoo abrazoo


0x0F

  • Visitante
Respuesta #5 on: abril 23, 2009, 09:50:46 am


permite el ingreso de un caracter ^^
entre 0 y 9..
y nos hace el incremento desde cero hasta el numero ingresado(argumento)
se esta poniendo interesante..aunque tendre que seguir esperando ..por las dudas igual voy siguiendo el curso al pie del cañon..
un saludo boticario ygracias por dedicar tu tiempo para que aprendamos la programacion de pics


hector27

  • Visitante
Respuesta #6 on: abril 23, 2009, 20:35:57 pm
Lista de materiales de la placa para pruebas:

Item   Quantity   Reference   Part
______________________________________________

1   5   C1,C4,C9,C17,C18   .1uF
2   5   C5,C6,C7,C8,C16   10uF
3   3   C10,C13,C14   1uF multicapa
4   2   C12,C11   15pF
5   1   C15   .47uF multicapa
6   1   C19   470uF/16V
7   1   C20   470uF/25V
8   9   D1,D2,D3,D4,D5,D6,D7,D8,   LED
      D9
9   1   D10   1N4148
10   2   D12,D11   1N4007
11   1   JP1   tira hembra de 8X2 pines, separados .1 de pulgada
12   3   JP2,JP8,JP10   3 Molex 3 pines, separacion .1 de pulgada
13   2   JP3,JP7    1 molex de 2 pines, separacion .1 de pulgada y 1 tira de 2 pines para jumper
14   1   JP4   conector USBB (como el de las impresoras)
15   1   JP5   BNC para plaqueta (como el de las viejas placas de red)
16   1   JP6   tira de 3 pines para jumper
17   1   JP9   Molex 5 pines
18   1   L1   100uH
19   1   Q1   BC548
20   2   RV1,RV2   5K 1 preset de 10 vueltas de 5K y un pote de 5K o 10K con pines separados .1 de pulgada
21   4   R1,R11,R12,R19   10K
22   1   R2   100
23   9   R3,R4,R5,R6,R7,R8,R9,R10,   1K
      R14
24   1   R13   47K
25   4   R15,R16,R17,R18   4K7
26   4   SW1,SW2,SW3,SW4    pulsadores para plaquetas
27   1   U1   PIC18F2550
28   1   U2   MAX232
29   1   U3   LM7805
30   1   X1   cristal 4MHz


El conector BNC es para cuando usemos los timmers para hacer un frecuencimetro o un contador de pulsos




hector27

  • Visitante
Respuesta #7 on: abril 23, 2009, 20:38:53 pm
hoja de datos del display

Si tienen algun otro, antes de comprar avisen.



hector27

  • Visitante
Respuesta #8 on: abril 23, 2009, 20:48:33 pm
Respecto al TP14, en la funcion en el parentesis de la derecha, antes de las llaves, coloco la o las variable que va a recibir la funcion. En la funcion va como declaracion:

//funcion con loop usando while
void LoopConWhile(int variable1)
{

 y cuando llamo a la funcion le pongo la variable a ingresar:
//llamo a la funcion con un loop
LoopConWhile(variable1);


Y esto otro no lo habiamos visto:

//convierto caracter ascii a entero de un digito
variable1=variable1-48;
//corrijo si ingrese‚ un numero mayor que 9
if(variable1>9) variable1=9;
//corrijo si ingrese‚ un numero menor que 0
if(variable1<0) variable1=0;


Lo que hago alli es debido a que cuando ingreso por teclado un numero, no ingreso en realidad ese numero, sino su codigo ASCII; para pasar de ASCII a numero (para los numeros), basta con restarle 48 al codigo ascii. Los if posteriores los puse por si ingresan otra cosa que no sea los numeros, asi si el codigo de la letra es mayor que el codigo del 9 pongo 9, y si el codigo es menor que el que le corresponde al cero va cero.
(ojo el programa tenia un error en esta parte, esta bien ahora)
Saludos!
Héctor


hector27

  • Visitante
Respuesta #9 on: abril 24, 2009, 08:06:39 am
Continuando con las funciones, ahora veremos el mismo ejemplo anterior, pero modificado para que la funcion retorne un valor a la funcion main. Para ello defino la variable2 en la funcion main, la cual recibe el valor de retorno de la funcion con el loop.
Cuando declaro la funcion, ya no es mas void sino int o lo que correspondiera.
En la funcion del loop al final esta return con lo que quiero enviar.
Las funciones pueden recibir una o mas variables (lo que recibe la funcion se llama argumento), pero devuelven una sola. Mas adelante veremos que podemos retornar mas que una usando punteros y tambien con las estructuras. Por ahora terminamos con las funciones.


/* ----------------------------------------
-            Trabajo Practico Nro 15      -
-              Funciones                  -
-----------------------------------------*/
//incluyo las librerias
#include <stdio.h>
#include <stdlib.h>
int LoopConWhile(int contador);


//comienza la funcion principal
void main(void)
{
//defino la variable1 como entero, y local
int variable1;
//defino la variable2 como entero, y local
int variable2;

//doy indicacion al usuario
printf("\nIngrese un numero del 0 al 9, y luego <enter>");

//leo el numero desde el teclado
variable1=getchar();

//convierto caracter ascii a entero de un digito
variable1=variable1-48;
//corrijo si ingreso‚ un numero mayor que 9
if(variable1>9) variable1=9;
//corrijo si ingreso‚ un numero menor que 0
if(variable1<0) variable1=0;

//llamo a la funcion con un loop
variable2=LoopConWhile(variable1);
printf("\nContador Termina con:%d", variable2);
return;
}

//funcion con loop usando while
int LoopConWhile(int variable1)
{
int contador;
contador=0;
printf("\nLoop usando while:");
//hago el loop
while(contador<variable1)
{
//imprimo la variable contador
printf("\n%d", contador);
contador++;
}

return (contador);
}


Desconectado guss

  • GOLD MEMBER
  • *
    • Mensajes: 1233
    • ACTIVIDAD:
      0%
    • DT$ 615
  • rokero viejo
Respuesta #10 on: abril 24, 2009, 15:57:24 pm
Recién veo tu mensaje , por suerte mandaste la lista de materiales me ensarte con algunos capa que creía que marcaba .1 y son de 1 mf.
Consegui todo en el taller desarme algunas mother y oras cosillas .
Lo gracioso fue que no tenia leds (lo mas tonto) Jejeje Jejeje Jejeje Jejeje


hector27

  • Visitante
Respuesta #11 on: abril 24, 2009, 16:25:56 pm
oops!
JP1, que va al display, deberia ser hembra en la placa, pues tiene tensión, y poner el macho en el display.
Te falta un agujero en RV1 y la bobina puede ser cualquiera, si desguasastes un mather, los ferrites que suelen ir al conector de teclado van bien.
Saludos!
Héctor


hector27

  • Visitante
Respuesta #12 on: abril 25, 2009, 11:06:48 am
Nos queda poco y lo que viene ahora, sobre todo los punteros, suele dar muchos dolores de cabeza, así que lean con cuidado, practiquen y yo tratare de abundar en ejemplos. Luego ya empezamos a trabajar con el PIC, así que no aflojen.

En el TP16 comenzamos a tratar los conjuntos de variables, veremos primero los arreglos simples (array) o vectores; que simplemente se trata de que cada variable del conjunto tiene el mismo nombre, pero con su propio subindice indicado entre corchetes, tambien todas las variables son del mismo tipo, por ej. todas son enteros.
No se declara cada variable individual, sino el conjunto, poniendo en el subindice el tamaño o dimension, que no es otra cosa que el numero de variables que contiene el conjunto.
Para trabajar con cada variable individual se usa el subindice.
El subindice va desde 1 hasta el numero maximo con que la declaré (tambien se pueden declarar sin poner el tamaño, pero lo veremos mas adelante); el subindice cero [0] no debe ser usado, pues está reservado para ser el puntero, que es dónde se guarda la direccion del conjunto, tema que veremos luego.

/* ----------------------------------------
-            Trabajo Practico Nro 16      -
-          Conjuntos de variables         -
-                Arrays                   -
-----------------------------------------*/
//incluyo las librerias
#include <stdio.h>
#include <stdlib.h>

//comienza la funcion principal
void main(void)
{
//defino un arreglo de variables enteras, y local; dimensionado a 10 variables
int arreglo1[10];

//hago un loop para cargar numeros en el arreglo
//en este caso guardare los cuadrados de los numeros del 1 al 10, en un verctor
// usando la variable contador como indice
int contador;
contador=1;
//hago el loop
while(contador<11)
{
arreglo1[contador]=contador*contador;
contador++;
}
//imprimo un titulo
printf("\nCuadrados de los 10 primeros numeros");

//ahora imprimo el arreglo usando otro loop
contador=1;
//hago el loop
while(contador<11)
{
printf("\nEl cuadrado de %d", contador);
printf(" es: %d", arreglo1[contador]);
contador++;
}
return;
}



Va el ejemplo, a compilar!



hector27

  • Visitante
Respuesta #13 on: abril 27, 2009, 07:42:36 am
Fe de Errata:
Donde dice:

El subindice va desde 1 hasta el numero maximo con que la declaré (tambien se pueden declarar sin poner el tamaño, pero lo veremos mas adelante); el subindice cero [0] no debe ser usado, pues está reservado para ser el puntero, que es dónde se guarda la direccion del conjunto, tema que veremos luego.

Debe decir:

El subindice va desde 0 al numero con que se dimensionó menos 1, ej: vector[10] va desde vector[0] a vector[9], que suman 10 variables tal como se dimensionó. El nombre del array a secas, sin los corchetes, (vector en el ejemplo) representa el puntero, tema que veremos pronto.
Se pueden declarar sin poner el tamaño (dimensionar poniendo los corchetes vacios), pero lo veremos mas adelante.


Perdón por la pifiada.


hector27

  • Visitante
Respuesta #14 on: abril 27, 2009, 07:55:46 am
En el TP17 veremos otro ejemplo de vector, pero en este caso usando variables tipo caracter, en vez de enteros.
Como en C no existen las variables de texto, como si las hay en otros lenguajes, pero se logra usando un vector con caracteres de texto; un conjunto de caracteres es una cadena (string), es decir como si fuera una variable tipo texto. De esta manera puedo almacenar textos.
En el ejemplo pueden ver que se declara el array sin dimensionar (corchetes vacios), y tomará automaticamente la dimensión de la cadena de texto que le fue asignada.
Ademas de usar un loop para imprimir todos los caracteres de la cadena, tambien podemos usar la funcion printf, tomando el puntero de la cadena (el nombre del array sis los corchetes).
A compilar!

/* ----------------------------------------
-            Trabajo Practico Nro 17      -
-          Conjuntos de variables         -
-              Arrays de caracteres       -
-----------------------------------------*/
//incluyo las librerias
#include <stdio.h>
#include <stdlib.h>

//comienza la funcion principal
void main(void)
{
//defino un arreglo de variables tipo caracter, y local; dimensionado en forma automatica
//(esto es una cadena (string), y como el dimensionado es automatico, no pongo nada entre
//corchetes, lo hace el compilador.
char arreglo1[]="Curso de PIC";

// variable contador como indice
int contador;

//imprimo un titulo
printf("\nEl vector arreglo1[] contiene los siguientes caracteres: ");

//ahora imprimo el arreglo usando un loop
contador=0;
//hago el loop
while(contador<13)
{
printf("%c", arreglo1[contador]);
contador++;
}
//ahora imprimo lo mismo pero usando el puntero, y no hace falta el loop
printf("\nUsando el Puntero: %s", arreglo1);
return;
}


Desconectado Jorge José

  • ADMINISTRADOR - Administrator
  • **
    • Mensajes: 8409
    • ACTIVIDAD:
      0%
    • DT$ 5203
  • PARA TODO EL MUNDO
Respuesta #15 on: abril 28, 2009, 00:17:06 am
Coloco el resultado del TP17 modificado como practica .

Pregunta: porque 13 loop si son 12 caracteres ..o mejor que sosobre y no que fafalte  Jejeje.



Para todas tus dudas te recomiendo leer Atentamente
-><-><-><->Como ->

 
____________________________________________


hector27

  • Visitante
Respuesta #16 on: abril 28, 2009, 08:15:53 am
dice menor que trece, y eso es hasta 12, ya que trece no es menor que trece.
Quizas hubiese sido mejor poner while(contador<=12), que deberia funcionar en forma identica, pero es mas entendible.
Saludos!
Héctor


Desconectado Jorge José

  • ADMINISTRADOR - Administrator
  • **
    • Mensajes: 8409
    • ACTIVIDAD:
      0%
    • DT$ 5203
  • PARA TODO EL MUNDO
Respuesta #17 on: abril 28, 2009, 09:10:37 am
dice menor que trece, y eso es hasta 12, ya que trece no es menor que trece.


Correcto  !! ,solo que ,me llamo la atención (por eso la pregunta) que lo hice con <12 e igual salieron todos los caracteres..
también probé con  <=11 con el mismo resultado ,correcto

o en este caso  se da :

Cita
El subindice va desde 0 al numero con que se dimensionó menos 1, ej: vector[10] va desde vector[0] a vector[9], que suman 10 variables tal como se dimensionó. El nombre del array a secas, sin los corchetes, (vector en el ejemplo) representa el puntero, tema que veremos pronto.
Se pueden declarar sin poner el tamaño (dimensionar poniendo los corchetes vacios), pero lo veremos mas adelante.

en el TP16 se cumple el <11 = a 10 loop  niidea niidea niidea
 graciassss  abrazoo



Para todas tus dudas te recomiendo leer Atentamente
-><-><-><->Como ->

 
____________________________________________


hector27

  • Visitante
Respuesta #18 on: abril 28, 2009, 22:45:29 pm
Clasico error el mio.
Hice un loop que va de cero a doce, eso son 13 numeros y no doce; la frase "Curso de PIC" tiene 12 caracteres, por lo cual el loop que hice tiene un ciclo de mas.
Lo correcto era while(contador<12) o while(contador<=11) o while(contador !=12)

Es este caso ese ciclo de mas no generó ningun inconveniente, pero hay casos en que si se pueden generar, así que no hagan como yo, y sean mas cuidadosos.  Jejeje Jejeje Jejeje Jejeje Jejeje

Saludos!
Héctor


hector27

  • Visitante
Respuesta #19 on: abril 30, 2009, 08:43:58 am
Vamos al siguiente ejemplo, tenemos el TP18
En este caso uso el array para ingresar un numero de mas de un digito por teclado.
El programa va a recibir numeros en codigo ascci, con lo cual formo una cadena de caracteres, en este caso de cuatro caracteres.
En el array tendré el numero que ingresé en codigo ascii.
Ahora bien, si quiero hacer cuentas con ese numero, lo debo pasar a una variable numerica, para ello cuento con la funcion atoi (Ascii to Integer), a la cual le pongo como parametro el puntero de la cadena ascii y me devuelve  un entero con el valor numerico.
Ese enero lo cargo en la variable NumeroIngresado.

Esta funcion suele ser util cuando, por ejemplo, en un PIC recibo numeros en ASCII por el puerto serie, y si necesito hacer cuentas con esos numeros, lo convierto a numero con esa funcion.
Mas adelante veremos la funcion inversa (itoa) que nos va a servir para convertir a ASCII el resultado de una operacion matematica y poder ponerlo en el display alfanumerico que recibe ASCII.

Estas funciones estan en el ANSI C, por lo tanto estarán el cualquier compilador que cumpla con la norma ANSI.

/* ----------------------------------------
-            Trabajo Practico Nro 18     -
-          Conjuntos de variables         -
-              Arrays de caracteres       -
-----------------------------------------*/
//incluyo las librerias
#include <stdio.h>
#include <stdlib.h>

//comienza la funcion principal
void main(void)
{
//defino un arreglo de variables tipo caracter, y local;
char ArregloTexto[4];
// variable contador como indice
int IndiceLoop;
// variable para ingresar caracteres
char CaracterIngresado;
//variable entera para cargar con el valor ingresado convertido de texto a entero
int NumeroIngresado;
//imprimo un titulo
printf("\nIngrese un numero menor que 10000 y presione <enter> ");

//ahora ingreso los codigos ASCII del numero en un array, usando un loop
IndiceLoop=0;
//hago el loop
while(IndiceLoop<4)
{
//leo el numero desde el teclado
CaracterIngresado=getchar();
ArregloTexto[IndiceLoop]=CaracterIngresado;
if(CaracterIngresado==0x0A) break;
if(CaracterIngresado==0x0D) break;
IndiceLoop++;
}
//ahora imprimo usando el puntero
printf("\nIngreso: %s", ArregloTexto);
//convierto de texto (ASCII) a entero
NumeroIngresado = atoi(ArregloTexto);
NumeroIngresado=NumeroIngresado*2;
printf("\nEl doble es: %d", NumeroIngresado);

return;
}


hector27

  • Visitante
Respuesta #20 on: mayo 02, 2009, 17:36:49 pm
Para finalizar con los arrays, veremos en el TP19 los arrays multidimensionales o matrices.
En este cado la matriz será de 10x2 variables (total 20 variables), en la cual guardaremos e imprimiremos los cuadrados y cubos de los 10 primeros numeros.
En este caso el array contiene dos indices en vez de uno (tambien lo prodriamos hacer con mas indices, si fuera necesario)



/* ----------------------------------------
-            Trabajo Practico Nro 19      -
-          Conjuntos de variables         -
-                Matrices                 -
-----------------------------------------*/
//incluyo las librerias
#include <stdio.h>
#include <stdlib.h>

//comienza la funcion principal
void main(void)
{
//defino una matriz de variables enteras, y local; dimensionado a 10x2 variables
int matriz[10][2];

//hago un loop para cargar numeros en la matriz
//Guardare los cuadrados de los numeros del 1 al 10, usando el segundo
// indice =0 y los cubos con el segundo indice=1
// usando la variable contador como indice
int contador;
contador=0;
//hago el loop
while(contador<10)
{
//guardo los cuadrados
matriz[contador][0]=contador*contador;
//guardo los cubos
matriz[contador][1]=contador*contador*contador;
contador++;
}
//imprimo un titulo
printf("\nCuadrados y Cubos de los 10 primeros numeros");

//ahora imprimo la matriz usando otro loop
contador=0;
//hago el loop
while(contador<10)
{
printf("\nEl cuadrado de %d", contador);
printf(" es: %d", matriz[contador][0]);
printf("  y el cubo es: %d", matriz[contador][1]);
contador++;
}
return;
}



Desconectado Jorge José

  • ADMINISTRADOR - Administrator
  • **
    • Mensajes: 8409
    • ACTIVIDAD:
      0%
    • DT$ 5203
  • PARA TODO EL MUNDO
Respuesta #21 on: mayo 02, 2009, 21:34:22 pm
hola
haciendo caso al texto del  programa

//Guardare los cuadrados de los numeros del 1 al 10

lo modifique para que lo haga así ,porque iba del 0 al 9

 abrazoo



Para todas tus dudas te recomiendo leer Atentamente
-><-><-><->Como ->

 
____________________________________________


hector27

  • Visitante
Respuesta #22 on: mayo 04, 2009, 08:37:34 am
Gracias por la correccion!

Hoy empezamos con punteros.
Algo ya hemos visto, pues en el caso particular de los arrays el puntero es el mismo nombre del array sin el indice.
El puntero no es otra cosa que una variable que apunta a otra variable, es decir contiene la direccion de la variable que apunta.
Para declararla se coloca el tipo de variable a la que apunta y luego el nombre del puntero, con un asterisco como prefijo; ejemplos:

int *puntero;
char *PunteroChar;
float *punterof;


Pero hasta allí sólo tenemos un puntero que no apunta a ninguna variable, para asignarle una variable usaremos el operador & que hace que obtengamos la direccion de la variable. Ej, si tenemos la variable entera variable1, para asignar al puntero la direccion de esa variable tendremos:

puntero=&variable1;

Ahora la variable puntero apunta a la variable1.

Si yo tengo ahora otra variable entera, variable2, y quiero asignarle el valor de la variable1, puedo hacer como hemos hecho hasta ahora:
variable2=variable1;

Pero tambien podriamos usar el puntero:
variable2=*puntero;

obteniendo el mismo resultado, ya que tomé el valor de la variable apuntada por la variable puntero, que en nuestro caso es la variable1.

A la tarde compilaremos un ejemplo.




hector27

  • Visitante
Respuesta #23 on: mayo 04, 2009, 20:33:43 pm
Aqui esta el ejercicio de la explicacion anterior
TP20

/* ----------------------------------------
-            Trabajo Practico Nro 20      -
-                Punteros                 -
-----------------------------------------*/
//incluyo las librerias
#include <stdio.h>
#include <stdlib.h>

//comienza la funcion principal
void main(void)
{
//defino un par de variables enteras
int variable1;
int variable2;
//defino un puntero para variables enteras
int *puntero;
//cargo un numero en la variable1
variable1=12345;
//asigno a la variable1 el puntero
puntero=&variable1;
//Copio la variable1 en la variable2 y la imprimo
variable2=variable1;
printf("\nLa variable2 es: %d", variable2);
//Copio la variable1 en la variable2, pero usando el puntero y la imprimo
variable2=*puntero;
printf("\nLa variable2 es: %d", variable2);
return;
}


hector27

  • Visitante
Respuesta #24 on: mayo 07, 2009, 08:47:40 am
Como recordaran, cuando vimos funciones les habia comentado que solo podian devolver una variable, pero que se podian devolver conjuntos de variables usando punteros.
Aqui va un ejemplo.


/* ----------------------------------------
-            Trabajo Practico Nro 21      -
-                Punteros                 -
-----------------------------------------*/
//incluyo las librerias
#include <stdio.h>
#include <stdlib.h>

char *DevuelveTexto(void);

main(void) {

char *PunteroTexto;
PunteroTexto = DevuelveTexto();
printf("Texto devuelto por la funcion:  %s", PunteroTexto);

return;
}

char *DevuelveTexto(void) {

static char CadenaTexto[] = "Hola DTforum";
return CadenaTexto;
}


Tags:
 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74