viernes, 28 de febrero de 2014

Primer contacto con punteros.

Buenas. Ésta no es una práctica en sí, sino que son ejercicios que nos puso el profesor para "tantear" los punteros desde el inicio. Éste es el enunciado:


1) Definir dos variables enteras e implementar un procedimiento que incremente en una cantidad cada una de las variables. Mostrar el contenido de las variables en el programa principal.  
2) Definir dos variables y dos punteros que hagan referencia a cada una de ellas. Definir un procedimiento para que muestre el contenido de esas variables pero a traves de los punteros. 
3) Definir un array de enteros de 10 posiciones.Definir una variable puntero que haga referencia a la primera posición del array.Hacer dos procedimientos, uno para rellenar el array y otro para mostrar su contenido. (De las dos formas, pasando como parametro puntero y pasando como parámetro el array)  
4) Completar el anterior definiendo un procedimiento que pida un indice y un valor y modifique el array con ese valor en ese índice.

Y aquí teneis los resultados:

Ejercicio 1:
#include <stdio.h>
#include <stdlib.h>

void incrementar(int *a, int*b){
 *a = *a +100;
 *b = *b + 100;
}

int main1(void) {

 int x;
 int y;


 // Pide las dos variables enteras
 printf("Introduce dos variable enteras x e y: ");
 fflush(stdout);
 scanf("%d %d", &x, &y);

 //Incremento
 incrementar(&x, &y);

 //Imprimo las variables ya incrementadas
 printf("x = %d \ny = %d\n", x, y);

 fflush(stdout);


 system("PAUSE");
 return EXIT_SUCCESS;
}

Ejercicio 2:
#include<stdio.h>
#include<stdlib.h>

void mostrar(int *m, int *n) {
 printf("Los datos son %d y %d \n \n", *m, *n);
 fflush(stdout);
}

int main2(void) {
 int a;
 int b;

 //Escaneo los datos
 printf("Introduzca los datos: \n");
 fflush(stdout);
 scanf("%d %d", &a, &b);
 printf("\n");

 //Creo los punteros
 int *x = &a;
 int *y = &b;

 //Llamo al procedimiento.
 mostrar(x, y);

 system("PAUSE");
 return EXIT_SUCCESS;
}

Ejercicio 3:
#include <stdio.h>
#include <stdlib.h>

void rellenarConArray(int *a[]) {
 int i;
 for(i = 0; i < 10; i++) {
  scanf("%d ", a[i]);
 }
}
void rellenarConPunte(int *ptr) {
 int i;
 int *aux = ptr;
 for(i = 0; i < 9; i++) {
  scanf("%d ", aux);
  aux++;
 }
}

void imprimirConArray(int *a[]) {
 int i;
 for(i = 0; i < 10; i++) {
   printf("%d ", a[i]);
 }
}
void imprimirConPunte(int *ptr) {
 int i;
 int *aux = ptr;
 for(i = 0; i < 10; i++) {
  printf("%d ", *aux);
  aux++;
 }
}



int main(void) {
 //main del tercero
 int z[10];
 int *a = &z[0];
 rellenaConArray(z);
 mostrarConArray(z);
 rellenaConPuntero(a);
 mostrarConPuntero(a);
        system("PAUSE");
        return EXIT_SUCCESS;
}

Ejercicio 4:
void setArray(int a[], int i, int v) {
 a[i] = v;
}
void setPuntero(int *a, int i, int v) {
 int *aux = a + i;
 *aux= v;
}

int main(void) {
 //main del cuarto
 int z[10];
 int *a = &z[0];
 rellenaConArray(z);
 //Aquí los cambios
 setArray(z, 4, 150);
 //
 mostrarConArray(z);


 rellenaConPuntero(a);
 //Aquí los cambios
 setPuntero(a, 6, 400);
 //
 mostrarConPuntero(a);
}

Disfrutadlos y si tenéis alguna duda/pega/sugerencia/amenaza no dudeis en comentarla aquí abajo. Todos podemos mejorar ;)

Salud

No hay comentarios:

Publicar un comentario