Autor Tema: Ayuda por favor  (Leído 3163 veces)

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

Desconectado thecrow_94

  • PIC10
  • *
  • Mensajes: 9
Ayuda por favor
« en: 07 de Febrero de 2005, 05:36:00 »
HOla, tengo un examen este viernes de programacion y he estado mirando examenes y hay un ejercicio q suelen poner del mismo tipo y no soy capaz de entenderlo viene con la respuesta pero no entiendo como sale, vamos q no entiendo lo q hace haber si alguien me lo puede explicar paso a paso. Bueno pos aqui dejo el ejercicio, muchas gracias:

Pregunta 5 (1.5 puntos)
Sea el código siguiente:

#include<stdio.h>
#include<stdlib.h>

#define N 11

main(){
int fa[N], *fp1, *fp2;
int i;

fp1 = fp2 = fa;
*fa = 1;
for ( i = 1; i < N; i++ )
*(fa+i) = *(fa+i-1) + fa[i-1];
while ( fp2 != &fa[N] ){
printf ( "<%d, %d>
", fp2-fp1, *fp2);
fp2++;
}
}

Indicar cuál es la salida por pantalla al terminar la ejecución.


Respuesta:
Secuencia de ejecución:

<0, 1>
<1, 2>
<2, 4>
<3, 8>
<4, 16>
<5, 32>
<6, 64>
<7, 128>
<8, 256>
<9, 512>
<10, 1024>

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Ayuda por favor
« Respuesta #1 en: 07 de Febrero de 2005, 06:48:00 »
Lo que hace ese programilla es una cosa así

Codigo:

main ()
  {  
  int fa[N], *fp1, *fp2; // Array de 11 enteros y dos punteros a entero.
  int i;
  fp1 = fp2 = fa;  // fp1 y fp2 apuntan al array (a la dirección de memoria de su primer elemento).
  *fa = 1;  // Asignamos el valor 1 al primer elemento del array.
  for ( i = 1; i < N; i++ )  // Desde i=1 hasta i=11...
    *(fa+i) = *(fa+i-1) + fa[i-1]; // ...asignamos al elemento cuya posición en memoria es la de *fa + i
                                   // lo que vale el elemento anterior + lo que vale el elemento anterior (multiplica por 2).
  while ( fp2 != &fa[N] ){  // Mientras fp2 no apunte a la posición de memoria siguiente al último elemento del aray...
    printf ( "<%d, %d>
", fp2-fp1, *fp2); // ...mostramos dirección a la que apunta fp2 - dirección a la que apunta fp1(ésta no cambia).
                                           // ...mostramos el contenido de la posición apuntada por fp2.
                                           // ...es decir,mostramos el índice del array y su contenido
    fp2++; // Incrementamos fp2 para recorrer todas las direcciones de memoria del array.
    }  
  }



Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: Ayuda por favor
« Respuesta #2 en: 07 de Febrero de 2005, 07:35:00 »
La operacion  fp2-fp1 es una resta de punteros y muestra la distancia entre ambos, maestro creo que en la explicacion te falto este matiz porque no corresponde propiamente tal al indice del array. El puntero fp1 permanece fijo apuntando al primer elemento y el fp2 se desplaza.

De la misma forma la linea *(fa+i) = *(fa+i-1) + fa[i-1]; igual considero tiene sus enredos que vale la pena tener claro. *(fa+1) es equivalente a fa[i+1]. de la misma manera que *(fa+i-1) es fa[i-1] para mirarlo en forma mas sencilla y en notacion de array queda  fa[i+1]=fa[i-1]+fa[i-1] el array se llena sumando dos veces el valor anterior. En esta linea se ve claramente la equivalencia total entre array y punteros que en tantos lados se dice.

Eso, Salud2

Desconectado thecrow_94

  • PIC10
  • *
  • Mensajes: 9
RE: Ayuda por favor
« Respuesta #3 en: 07 de Febrero de 2005, 08:30:00 »
pos muchas gracias gente, me habesi sido de gran ayuda

Desconectado thecrow_94

  • PIC10
  • *
  • Mensajes: 9
RE: Ayuda por favor
« Respuesta #4 en: 07 de Febrero de 2005, 08:31:00 »
pos muchas gracias gente, me habesi sido de gran ayuda

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Ayuda por favor
« Respuesta #5 en: 07 de Febrero de 2005, 08:37:00 »
Bien matizado Kruskal
Suerte con tu examen mmmmm....usuario sin nombre Giño
Saludos

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: Ayuda por favor
« Respuesta #6 en: 07 de Febrero de 2005, 10:45:00 »
Disculpen panas, pero :
for ( i = 1; i < N; i++ )  // Desde i=1 hasta i=11... solo cuenta hasta 10  no?

Salu2 panas! Sonrisa

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Ayuda por favor
« Respuesta #7 en: 07 de Febrero de 2005, 11:06:00 »
Sip.
El primer elemento del array se modifica antes del for :

*fa = 1;

Los 10 restantes se modifican dentro del for

Saludos

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Ayuda por favor
« Respuesta #8 en: 07 de Febrero de 2005, 11:10:00 »
Pues sí pana, tienes razón, sólo cuenta hasta 10.

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: Ayuda por favor
« Respuesta #9 en: 07 de Febrero de 2005, 11:18:00 »
Gracias pana Modulay y Nocturno66 Sonrisa

Un abrazo panas