Arreglos y apuntadores
Arreglo    Conjunto de variables del mismo    tipo, las cuales están indexadas.26/04/12    Programación avanzada y métodos...
Declaración:tipo_variable nombre[tamaño];Inicialización:tipo_variable nombre[tamaño] ={ elemento 1, elemento 2, ... , elem...
int numeros[40];float otros_numeros[] = {4.6, 5.6, 2.1, 4.5};int i;for(i = 0; i < 40; i++) {    printf(“Escribe un número:...
Apuntador   Son variables que almacenan    direcciones de memoria.26/04/12    Programación avanzada y métodos numéricos   5
Declaración: tipo_variable *nombre;Asignar dirección: nombre =&variable_del_mismo_tipo;Devuelve valor almacenado(desrefere...
Ejemplo:      int *px; // apuntador      int x = 1, y = 2; // Variables      px = &x; // apunta a x      y = *px; // el va...
Reserva de espacio en la memoria    Incluir biblioteca stdlib   Declarar apuntador    Asignar espacio a cada apuntador ...
int *numeros;// numeros apunta a un espacio dondecaben 40 variables intnumeros = (int *) malloc(40 *sizeof(int));// ... Có...
Aritmética de direccionesint *px; int x; px = &x;px++; // apunta 1 posición más adelantepx = px + 2; // apunta 5 posicione...
11 Agosto   Programación avanzada y métodos numéricos   11
int i;// captura númerosfor(i = 0; i < 40; i++)     scanf(“%i”,numeros + i);// imprime númerosfor(i = 0; i < 40; i++)     ...
Equivalencia entre arreglos y                   apuntadores   vect[i] y *(pv + i) son expresiones    equivalentes   El n...
int vect[10]; int *pv;pv = vect; // Expresión válidavect = pv; // Expresión inválida*(vect + 4) = 302; // asigna 302 a vec...
Arreglos de varios dimensiones26/04/12          Programación avanzada y métodos numéricos   15
Declaración e inicializaciónDeclaración:Tipo_de_variable nombre[Tamaño] ... [Tamaño];                       float arreglo[...
int numeros[40][20];int i, j;for(j = 0; j < 20; j++)    for(i = 0; i < 40; i++) {           printf(“Escribe un número: ”);...
Arreglos de apuntadoresDeclaraciónTipo_variable *nomb_arreglo[tamaño];                    float *pesos[500];Inicialización...
int *numeros[20];int i, j;for(i = 0; i < 20; i++)   numeros[i] = (int *) malloc(40 * sizeof(int));for (i = 0; i < 40; i++)...
Apuntadores y Arreglos              multidimensionalesint a[2][7];int *b[2];b[0] = a[0]; // dirección primera filab[1] = a...
26/04/12   Programación avanzada y métodos numéricos   21
int *numeros[20];int i, j;for(i = 0; j < 20; j++)   numeros[i] = (int *) malloc(40 * sizeof(int));for (i = 0; i < 40; i++)...
char *palabras[3] =            {“kilowatt”, “centímetro”, “gramo”};11 Agosto           Programación avanzada y métodos num...
char *palabras[10];char *aux;int i,j;/* Reservamos un espacio y capturamos unacadena en él */for(i = 0; i < 10; i++) {  no...
/* Algoritmo de burbuja */for(i = 0; i < 9; i++)   for(j = i + 1; j < 10; j++) {      if( strlen(palabras[j]) < strlen(pal...
Bibliografía    Luis Joyanes e Ignacio Zahonero.    Programación en C, C++, Java y UML. Ed.    McGraw Hill Latinoamerican...
Próxima SlideShare
Cargando en…5
×

Arreglos multidimensionales y de apuntadores

0 visualizaciones

Publicado el

Tema 1.1 del curso de "Programación avanzada y métodos numéricos".

Publicado en: Educación
2 comentarios
2 recomendaciones
Estadísticas
Notas
  • @JulioGonzalez3 Hola Julio, el programa de la materia marca que en la 1ra,, la 4ta. y la 6ta. unidad se enseñe C y Java, y esta diapositiva corresponde a la primera unidad, puedes checar el programa aquí: http://www.ingenieria.unam.mx/paginas/Carreras/planes2010/Computacion/03/programacion_avanzada_y_metodos_numericos.pdf

    Con respecto a lo de usar sizeof(), si lo comento en clase, aunque no sé si sea mejor hacerlo explícito en las diapositivas.

    Con respecto a lo del uso de la palabra librería para referirse a stdlib, pues fue la mala costumbre, ya vez que también es muy usada esa manera para refererirse a las bibliotecas y APIs. Supongo que como bien afirmas, 'library' en inglés es 'biblioteca', y por lo tanto, debería usarse esa palabra. Librería ha de ser una castellanización, así como 'resetear'.

    Gracias por los comentarios quisquillosos, jojojo XD Espero estés bien :)
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • Solo una vil y llana duda. Si son métodos numéricos ¿Porqué no mejor usar Fortran?

    Sería interesante indicar porque es conveniente usar sizeof (no sé si previamente ya lo habías comentado).

    Y solo un detalle 'quisquilloso', library es biblioteca.
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
Sin descargas
Visualizaciones
Visualizaciones totales
0
En SlideShare
0
De insertados
0
Número de insertados
0
Acciones
Compartido
0
Descargas
327
Comentarios
2
Recomendaciones
2
Insertados 0
No insertados

No hay notas en la diapositiva.

Arreglos multidimensionales y de apuntadores

  1. 1. Arreglos y apuntadores
  2. 2. Arreglo Conjunto de variables del mismo tipo, las cuales están indexadas.26/04/12 Programación avanzada y métodos numéricos 2
  3. 3. Declaración:tipo_variable nombre[tamaño];Inicialización:tipo_variable nombre[tamaño] ={ elemento 1, elemento 2, ... , elementon };26/04/12 Programación avanzada y métodos numéricos 3
  4. 4. int numeros[40];float otros_numeros[] = {4.6, 5.6, 2.1, 4.5};int i;for(i = 0; i < 40; i++) { printf(“Escribe un número: ”); scanf(“%d”, &numeros[i]);}for (i = 0; i < 4; i++) printf(“%fn”, otros_numeros[i]);26/04/12 Programación avanzada y métodos numéricos 4
  5. 5. Apuntador Son variables que almacenan direcciones de memoria.26/04/12 Programación avanzada y métodos numéricos 5
  6. 6. Declaración: tipo_variable *nombre;Asignar dirección: nombre =&variable_del_mismo_tipo;Devuelve valor almacenado(desreferenciamiento): *nombre26/04/12 Programación avanzada y métodos numéricos 6
  7. 7. Ejemplo: int *px; // apuntador int x = 1, y = 2; // Variables px = &x; // apunta a x y = *px; // el valor de x se asigna a // y, ahora y vale 1 *px = 0; // ahora x vale 026/04/12 Programación avanzada y métodos numéricos 7
  8. 8. Reserva de espacio en la memoria Incluir biblioteca stdlib Declarar apuntador Asignar espacio a cada apuntador declarado usando malloc() Después de usar, liberar espacio usando free()26/04/12 Programación avanzada y métodos numéricos 8
  9. 9. int *numeros;// numeros apunta a un espacio dondecaben 40 variables intnumeros = (int *) malloc(40 *sizeof(int));// ... Código ...free(numeros); // Liberamos espacio26/04/12 Programación avanzada y métodos numéricos 9
  10. 10. Aritmética de direccionesint *px; int x; px = &x;px++; // apunta 1 posición más adelantepx = px + 2; // apunta 5 posiciones más //adelantepx = px – 8; // apunta 8 posiciones más atrás11 Agosto Programación avanzada y métodos numéricos 10
  11. 11. 11 Agosto Programación avanzada y métodos numéricos 11
  12. 12. int i;// captura númerosfor(i = 0; i < 40; i++) scanf(“%i”,numeros + i);// imprime númerosfor(i = 0; i < 40; i++) printf(“%in”,*(numeros + i));26/04/12 Programación avanzada y métodos numéricos 12
  13. 13. Equivalencia entre arreglos y apuntadores vect[i] y *(pv + i) son expresiones equivalentes El nombre de un arreglo es el sinónimo de la dirección de su posición inicial26/04/12 Programación avanzada y métodos numéricos 13
  14. 14. int vect[10]; int *pv;pv = vect; // Expresión válidavect = pv; // Expresión inválida*(vect + 4) = 302; // asigna 302 a vect[4] pv[4] = 302; // asigna 302 a *(pv + 4)26/04/12 Programación avanzada y métodos numéricos 14
  15. 15. Arreglos de varios dimensiones26/04/12 Programación avanzada y métodos numéricos 15
  16. 16. Declaración e inicializaciónDeclaración:Tipo_de_variable nombre[Tamaño] ... [Tamaño]; float arreglo[2][4];Inicialización:Tipo_de_variable nombre[Tamaño] ... [Tamaño] ={ conjuntos anidados de elementos } ; float arreglo[2][2] = { {1, 2} , { 4 , 5 } };26/04/12 Programación avanzada y métodos numéricos 16
  17. 17. int numeros[40][20];int i, j;for(j = 0; j < 20; j++) for(i = 0; i < 40; i++) { printf(“Escribe un número: ”); scanf(“%d”, &numeros[i][j]); }for (i = 0; i < 40; i++) for(j = 0; j < 20; j++) printf(“%dn”, numeros[i][j]);26/04/12 Programación avanzada y métodos numéricos 17
  18. 18. Arreglos de apuntadoresDeclaraciónTipo_variable *nomb_arreglo[tamaño]; float *pesos[500];InicializaciónTipo_variable *nomb_arreglo[tamaño] ={ &variable1, &variable2, ..., &variablen}; int *datos_biblio[3] = {&libros, &empleados, &mesas};26/04/12 Programación avanzada y métodos numéricos 18
  19. 19. int *numeros[20];int i, j;for(i = 0; i < 20; i++) numeros[i] = (int *) malloc(40 * sizeof(int));for (i = 0; i < 40; i++) for(j = 0; j < 20; j++) scanf(“%d”, numeros[j] + i);for (i = 0; i < 40; i++) for(j = 0; j < 20; j++) printf(“%d”, *(numeros[j] + i));26/04/12 Programación avanzada y métodos numéricos 19
  20. 20. Apuntadores y Arreglos multidimensionalesint a[2][7];int *b[2];b[0] = a[0]; // dirección primera filab[1] = a[1] + 1; // dirección segunda fila conoffset de 1 espaciob[0][1] = 6; // a[0][1] también es igual a 6b[1][4] = 7; // a[1][5] también es igual a 726/04/12 Programación avanzada y métodos numéricos 20
  21. 21. 26/04/12 Programación avanzada y métodos numéricos 21
  22. 22. int *numeros[20];int i, j;for(i = 0; j < 20; j++) numeros[i] = (int *) malloc(40 * sizeof(int));for (i = 0; i < 40; i++) for(j = 0; j < 20; j++) scanf(“%d”, &numeros[j][i]);for (i = 0; i < 40; i++) for(j = 0; j < 20; j++) printf(“%d”, numeros[j][i]);26/04/12 Programación avanzada y métodos numéricos 22
  23. 23. char *palabras[3] = {“kilowatt”, “centímetro”, “gramo”};11 Agosto Programación avanzada y métodos numéricos 23
  24. 24. char *palabras[10];char *aux;int i,j;/* Reservamos un espacio y capturamos unacadena en él */for(i = 0; i < 10; i++) { nombres[i] = (char *) malloc(30 *sizeof(char)); printf("Dame una palabra cualquiera: "); scanf("%s",palabras[i]);}26/04/12 Programación avanzada y métodos numéricos 24
  25. 25. /* Algoritmo de burbuja */for(i = 0; i < 9; i++) for(j = i + 1; j < 10; j++) { if( strlen(palabras[j]) < strlen(palabras[i]) ) { /* Solo intercambiamos direcciones */ aux = palabras[j]; palabras[j] = palabras[i]; palabras[i] = aux; } }26/04/12 Programación avanzada y métodos numéricos 25
  26. 26. Bibliografía Luis Joyanes e Ignacio Zahonero. Programación en C, C++, Java y UML. Ed. McGraw Hill Latinoamericana. Harvey y Paul Deitel, Como programar en C, Ed. Prentice Hall.26/04/12 Programación avanzada y métodos numéricos 26

×