Ayuda..Problema Con Funcion Que Retorne Pares Positivos En Dev C++...

Iniciado por grego027, 15 Agosto 2014, 02:05 AM

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

grego027

Desearia que me ayuden en esta funcion de antemano gracias....se trata de un programa que me tiene que mostrar en dos funciones tipo retorna y recibe una serie de n elementos pares positivos eh intentado de varias maneras y pues se me ah complicado....ehh....si me ejecuta pero no me sale los valores pares me salen otros valores que no vienen al caso aqui les dejo la codificacion gracias....

#include<stdio.h>
#include<conio.h>
int fibo (int n ,char a[100]);
main()
{
char a[100];
     int n=0,i=0,l=0;
      printf("\n\t\tNUMEROS PARES POSITIVOS\n\t\t");
      printf("\n\t\tIngrese el Numero de terminos de la serie:\n\t\t");
      scanf("%d",&n);
      printf("\n");
     
      for(i=0;i<n;i++)  
      {
 
printf("\n\t[%d]",a[i]);
}
a[i]=fibo(n,a);
 
      getch();
      return 0;
     /*la funcion recibe los parametros*/
}
int fibo(int n,char a[100])
{

   int i=0;
   printf("\n\tpresione una tecla para continuar");
   a[0]=2;
   for(i=0;i<n;i++)
{
if((a[i]%2)==0)
a[i];
}
return a[i];
   /* la subfuncion retorna parametros*/
}

rir3760

Lo primero que se debe cambiar en el programa es la definición de la función main y evitar el uso de la biblioteca conio de Borland. Mas información en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Y si apenas empiezas tu aprendizaje del lenguaje C debes conseguir un buen curso o libro, para recomendaciones solo tienes que utilizar el motor de búsqueda de los foros.

En cuanto al programa hay demasiados errores, los mas importantes son 1) primero imprimes la serie y solo después la calculas cuando debería ser al revés y 2) la función que genera la serie de números pares positivos se debe rescribir desde cero. Para generar esa serie debes utiliza un bucle de esta forma:
int i;
   
for (i = 0; i < n; i++)
   a[i] = (i + 1) * 2;


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

grego027

#2
gracias por tu ayuda....modifique el codigo pero igual no pasa nada...disculpa como puedo subir imagenes de la captura de pantalla del programa para que puedas visualizar la ejecucion....




mira asi quedaria

int fibo (int n ,char a[100]);
main()
{
char a[100];
      int n=0,i=0,l=0;
       printf("\n\t\tNUMEROS PARES POSITIVOS\n\t\t");
       printf("\n\t\tIngrese el Numero de terminos de la serie:\n\t\t");
       scanf("%d",&n);
       printf("\n");
       
       for(i=0;i<n;i++) 
       {
   
printf("\n\t[%d]",a[i]);
}
a[i]=fibo(n,a);
   
       getch();
       return 0;
}
int fibo(int n,char a[100])
{

    int i=0;
    printf("\n\tpresione una tecla para continuar");
    a[0]=2;
    for(i=0;i<n;i++)
{
a[i]= (i + 1) * 2
}
return a[i];
}

kutcher

Creo que tu código debería quedar de esta manera:

Código (cpp) [Seleccionar]
int *fibo(int n, int *a);

int main(void)
{
    int a[100] = {0};
    int n = 0, i = 0;

    printf("\n\t\tNUMEROS PARES POSITIVOS\n\t\t");
    printf("\n\t\tIngrese el Numero de terminos de la serie:\n\t\t");
    scanf("%d",&n);
    printf("\n");

    fibo(n, a);

    for(i = 0; i < n; i++)
        printf("\n\t[%d]", a[i]);

    return 0;
}

int *fibo(int n, int *a)
{
    int i;
    printf("\n\tpresione una tecla para continuar");
    for (i = 0; i < n; i++)
        a[i] = (i + 1) * 2;

    return a;
}



Un Saludo

grego027

#4
lo corregi.....pero ahora al comienzo de la serie me sale 96
de ahi en adelante si me salen numeros pares al ejecutar me sale algo asi al ingresar el numero de elementos en este caso le pongo 10 elementos....me ejecuta asi....96-2--6-8-10.....y todo normal desde el segundo numero en adelante que podria hacer para que el primer numero no me bote 96 esta es la codifficacion.....de antemano gracias por su ayuda....

int prome1(int n ,char a[]);
main()
{
char a[100];
     int n=0,i=0,l=0;
      printf("\n\t\tNUMEROS PARES POSITIVOS\n\t\t");
      printf("\n\t\tIngrese el Numero de terminos de la serie:\n\t\t");
      scanf("%d",&n);
      printf("\n");
    a[i]=prome1(n,a);
      for(i=0;i<n;i++)  
      {
printf("\n\t[%d]",a[i]);
}
      getch();
      return 0;
     /*la funcion recibe los parametros*/
}
int prome1(int n,char a[])
{

   int i=0;
   printf("\n\tpresione una tecla para continuar");
   a[i]=2;
   for(i=0;i<n;i++)
{
a[i]=(i)*2;
}
return a[i];
   /* la subfuncion retorna parametros*/
}


solo deseo que no me salga 96 el primer numero ...cuando ingreso 20 elementos me sale 8 el primer numero y asi mismo del segundo numero en adelante el programa me bota los pares...

erest0r

Hola grego027, la funcion prome1 esta asignandole el valor 2 a la primera posicion de "a", despues en el for lo sobrescribe, tambien dentro de ese ciclo solo esta asignandole valores a la primera posicion de "a" porque haces a = i * 2, cuando deberia ser a[ i ] = i * 2 (recuerda que estas trabajando con arreglos) luego en el main dentro del ciclo for, estas mostrando el valor de la primera posicion de "a" tambien, deberia ser:

Código (cpp) [Seleccionar]

for(i=0;i<n;i++) 
{
    printf("\n\t[%d]",a[i]);
}


Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.

kutcher

Este intento de asignación:

Código (cpp) [Seleccionar]
a[i] = prome1(n, a);

Me parece redundante e inapropiado,  porque al retornar de la función prome1() ya tienes todos lo números pares almacenados en la cadena a no entiendo el propósito de la reasignación; y ademas usas como indice una variable local para retornar un valor de la cadena a lo cual es incorrecto la variable i puede tomar cualquier valor al salir de la función.

Un Saludo

leosansan

Cita de: grego027 en 15 Agosto 2014, 02:05 AM
Desearia que me ayuden en esta funcion de antemano gracias....
................................................................

Como te comentó rir3760, lo primero es declarar main de tipo int, como manda el estándar de C y evitar el uso de la librería conio y sus funciones por lo mismo, no forman parte del estándar de C.

¿ char a[] ?. Si el array "a" va a almacenar números lo lógico es que sea de tipo int, ¿no?. Y declararlo previamente a tamaño de 100 cuando al introducir los pares pedidos pudiera ser que se pidan 200 pues se quedaría cortito. Mejor declarar el array después de introducir el valor de  "n".

¿La función "prome1" de tipo char?. Ni tan siquiera de tipo int ya que le pasas el array y esto hace que se pase por referencia. No es necesario pues que retorne nada.

Con estas ideas te quedaría algo como:

Código (cpp) [Seleccionar]
********************************************
int main ( ) {
---------------------------------------------------------------------------
  scanf ( "%d" , &n ) ;
  int a[ n ] ;
  printf( "\n" ) ;
  prome1 ( n , a ) ;
  for ( i = 0 ; i < n ; i++ )
    printf ( "\n\t[%d]" , a[ i ]) ;
  return 0;
****************************************************
void prome1( int n , int a[ ] ) {
  int i = 0 ;
  for( i = 0 ; i < n ; i++ )
    a[ i ] = ( i ) * 2 ;
}


¡¡¡¡ Saluditos! ..... !!!!



grego027

#8
Gracias a todos por su ayuda con cada granito de arena aportado eh podido realizar  
el programa con éxito......
este es el código final a donde quería llegar mil gracias....

#include<stdio.h>
int prome1(int n ,int a[]);
int main()
{

     int n=0,i=0;
      printf("\n\t\tNUMEROS PARES POSITIVOS\n\t\t");
      printf("\n\t\tIngrese el Numero de terminos de la serie:\n\t\t");
      scanf("%d",&n);
      int a[n];
      printf("\n");
    a[i]=prome1(n,a);
      for(i=1;i<=n;i++)  
      {
printf("\n\t[%d]",a[i]);
}
      return 0;
     /*la funcion recibe los parametros*/
}
int prome1(int n,int a[])
{

   int i=0;
   printf("\n\tpresione una tecla para continuar");
   for(i=1;i<=n;i++)
{
a[i]=i*2;
}
return a[i];
   /* la subfuncion retorna parametros*/
}





Bueno gracias a los que me ayudaron eh logrado completar este pequeñisimo programa con la funcion recibe y retorna en fin este era el ejercicio y pues eh aqui el programa terminado..... ;)..... :)
1) Desarrollar un programa que realice la siguiente operacion
L=Promedio 1+Promedio2/n
Promedio 1----->> Es un valor devuelto por una funcion que contiene un arreglo A de n elementos pares positivos
Promedio 2------>> Es un valor devuelto por una funcion que contiene un arreglo B de n elementos impares negativos
donde N es un valor ingresado por teclado en la funcion principal
Valga la redundancia....no esta de mas decir nuevamente ...gracias a los que aportaron con sus conocimientos pude realizar este pequeño trabajo graciasss nuevamente....!!!

Código
#include<stdio.h>
int prome1(int n ,int a[]);
int prome12(int n ,int b[]);
int prot(int n,int a[], int b[],float t);
int main()
{

      int n=0,i=0;
       printf("\n\t\tNUMEROS PARES POSITIVOS E IMPARES NEGATIVOS\n\t\t");
       printf("\n\t\tIngrese el Numero de terminos de las series:\n\t\t");
       scanf("%d",&n);
       int a[n];
    a[i]=prome1(n,a);
    for(i=1;i<=n;i++) 
       {
printf("\t\n[%d]",a[i]);
}
printf("\n\n\n");
int b[n];
b[i]=prome12(n,b);
for(i=1;i<=n;i++) 
       {
printf("\t\n[%d]",b[i]);
}
float t=0;
t=prot(n,a,b,t);
printf("\n\n\n");
printf("\n\n\nel promedio es[%.2f]",t);
       return 0;
      /*la funcion recibe los parametros*/
}
int prome1(int n,int a[])
{

    int i=0;
    printf("\n\tTerminos Pares");
    for(i=1;i<=n;i++)
{
a[i]=i*2;
}
return a[i];
    /* la subfuncion retorna parametros*/
}
int prome12(int n,int b[])
{

    int i=0;
    printf("\n\tTerminos Impares");
    for(i=1;i<=n;i++)
{
b[i]=(i*-2)+1;
}
return b[i];
    /* la subfuncion retorna parametros*/
}
int prot(int n,int a[],int b[],float t)
{

    int i=0,acum=0,acum2=0;
    printf("\n\tTerminos Pares");
    for(i=1;i<=n;i++)
{
a[i]=i*2;
acum=acum+a[i];
}
for(i=1;i<=n;i++)
{
b[i]=(i*-2)+1;
acum2=acum2+b[i];
}
t=(acum+acum2)/n;
return t;

    /* la subfuncion retorna parametros*/
}


Una consulta mas como podría publicar imágenes de los ejecutables para mejor comprensión y entendimiento de la lógica de como funcionan los programas.....

cascaradebanana

Sería mejor que utilizaras Cygwin.
Analizando tu código, en la línea #10 haces una declaración de array con un valor variable, ¿no te marca error? Los arrays sólo pueden tener tamaños constantes (como números en sí o constantes #define). Aquí lo que podrías hacer es declararla con un tamaño fijo (100 por ejemplo, #define MAX_VAL 100), y al momento de hacer el scanf para el número de términos en la serie, evaluar el valor ingresado if (i <= 0 || i > 100).
En la línea #12 el retorno de la función prome1 sólo se asigna en a[0]. Me imagino que si he introducido, por ejemplo 6, en términos de la serie, lo que se esperaría sería tener asignados valores desde a[0], a[1], ... a[n] o a[6] en este caso. En el bucle "for" que está en seguida, que se repite n veces, no muestra nada más que los valores que ya estaban en memoría y no los que se supone que tendrían asignados por la función prom1.
Sería mejor no utilizar arrays e imprimir los valores de la seríe 1...n conforme se vayan generando en el bucle for que está en prome1.
Saludos.