Foros del Web » Programación para mayores de 30 ;) » C/C++ »

duda simple de funciones

Estas en el tema de duda simple de funciones en el foro de C/C++ en Foros del Web. hola estoy retomando temas de lenguaje c. y hay cosas que no me acuerdo.... que error hay en esta inicializacion por funciones de un vector.. ...
  #1 (permalink)  
Antiguo 15/04/2012, 11:03
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 9 meses
Puntos: 5
duda simple de funciones

hola estoy retomando temas de lenguaje c.

y hay cosas que no me acuerdo.... que error hay en esta inicializacion por funciones de un vector..

se supone q estan declaradas la variable i, el vector. etc.. anteriormente.



Código PHP:
v=inici(v);


-----------------------------------

int inici(int v)

{
for(
i=0;i<10;i++)    
{
v[i]=0;
    
return 
v;
}

  #2 (permalink)  
Antiguo 15/04/2012, 12:44
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: duda simple de funciones

Hola! el error es que no le podes asignar un arreglo a otro arreglo. Al retornar v lo que estas haciendo es(fuera de la funcion) v=v lo cual no es valido.
Si vas a pasar v como parametro solo basta con poner:
Código C:
Ver original
  1. inici(v);
  2.  
  3.  
  4. -----------------------------------
  5.  
  6. int inici(int v)
  7.  
  8. {
  9. for(i=0;i<10;i++)    
  10. {
  11. v[i]=0;
  12.    
  13. }
  14. }
Ya que un arreglo se pasa por referencia

Saludos
  #3 (permalink)  
Antiguo 15/04/2012, 13:16
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 13 años, 11 meses
Puntos: 228
Respuesta: duda simple de funciones

Ademas tenes que pasar un arreglo y no un entero:

Código C++:
Ver original
  1. inici(v);
  2.  
  3.  
  4. -----------------------------------
  5.  
  6. void inici(int * v)
  7.  
  8. {
  9.     for(i=0;i<10;i++)    
  10.     {
  11.           v[i]=0;
  12.    
  13.      }
  14. }
  #4 (permalink)  
Antiguo 15/04/2012, 13:22
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 9 meses
Puntos: 5
Respuesta: duda simple de funciones

Cita:
Iniciado por sam90 Ver Mensaje
Ademas tenes que pasar un arreglo y no un entero:

Código C++:
Ver original
  1. inici(v);
  2.  
  3.  
  4. -----------------------------------
  5.  
  6. void inici(int * v)
  7.  
  8. {
  9.     for(i=0;i<10;i++)    
  10.     {
  11.           v[i]=0;
  12.    
  13.      }
  14. }


void inici(int * v) en esta parte... ese asterisco , es un puntero??? recien estoy leyendo algo de eso...
  #5 (permalink)  
Antiguo 15/04/2012, 14:52
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: duda simple de funciones

Si, indica que es un puntero. No me habia dado cuenta de lo que marco sam90

Tambien podes hacer:
void inici(int v[])
  #6 (permalink)  
Antiguo 19/04/2012, 23:37
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 9 meses
Puntos: 5
Respuesta: duda simple de funciones

Cita:
Iniciado por cesar_casla Ver Mensaje
Si, indica que es un puntero. No me habia dado cuenta de lo que marco sam90

Tambien podes hacer:
void inici(int v[])
todavia nose lo que son punteros,y hacerlo de esa forma, como para que lo pongan como una opcion en este ejercicio...no sabria... voy a hacerlo de la otra forma "sin punteros" no se si existe o estoy haciendo cualquier cosa...


** como habia explicado.tengo un codigo que asi todo junto funciona bien, tengo que hacerlo que use funciones... en la parte donde el codigo . busca el mayor, cuantas veces se repite , yque posiciones es esta... la pondria aparte , en lo que seria la funcion....no se si antes se define , se declara la funcion ....

Código PHP:
#include <stdio.h>
#include <conio.h>


int buscamayor (int v)
{

int mayor,v[10],repetido,i,repet[10];

       
mayor v[1]; /* asumimos primero es mayor */
       
       
repetido=1/* va una vez */

for (2<11i++) /* buscamos */
if (mayor v[i]) /* si hay otro mayor lo cambiamos */
{
mayor v[i];
//repet[1]
repetido 1;
}
else if(
mayor == v[i]) /* si esta repetido contamos */
repetido ++;


for(
i=1;i<11;i++)
    {
        if(
mayor==v[i])
        {
            
repet[i]=i;
        }
    }


printf("\nEl mayor es %d y se repite %d veces, en las posiciones  ",mayor,repetido);


    for(
i=1;i<11;i++)
       {
           if (
repet[i]!=0)
        
printf("-%d-",repet[i]);


       }

//  retorno , algo , un vectors quizas...  de 12 posiciones. ya que la primer posicion seria. el mayor , la segunda, cuantas veces se repite.. y los otras 10 posiciones son las posiciones como maximo en las que se repite el maximo


y aca en la parte donde hago la llamada como , es , si quiero recibir un vector,.. como respuesta de la funcion..y asignarlo en otro vector...

como puse en el codigo ,, la posicion 1 , la saco y digo que es el maximo ,
la posicion 2 la saco y digo las repeticiones.. y el resto del vector son las posiciones...



asi =???

Código PHP:
switch(opcion)
   {
   case 
1:
       {
           
  
// aca recibiria en una variable un vector... de esta llamada...     buscamayor(v);    
           
           


printf("\n\n");


      }
     break; 
  #7 (permalink)  
Antiguo 20/04/2012, 05:16
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 13 años, 11 meses
Puntos: 228
Respuesta: duda simple de funciones

SI no usas punteros no vas a poder hacer lo que quieres... si o si el prototipo de la funcion tiene que ser:


int buscamayor (int * v)

o

int buscamayor (int v[])

si pones int v solo estas pasando un entero y no todo el vector completo.
  #8 (permalink)  
Antiguo 20/04/2012, 13:27
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 9 meses
Puntos: 5
Bueno . M podria decir la funcionalidad del puntero en este caso . Por q es necesario hacerlo con el puntero.
  #9 (permalink)  
Antiguo 20/04/2012, 15:56
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: duda simple de funciones

Si no te llevas bien con los punteros usa la otra definicion que te marco sam90

int buscamayor (int v[])
  #10 (permalink)  
Antiguo 20/04/2012, 16:16
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 13 años, 11 meses
Puntos: 228
Respuesta: duda simple de funciones

Porque es necesario hacerlo con punteros?? Porque si no lo haces por puntero, o de la otra forma que es lo mismo, no tenes referencia sobre tu array.
No puedes pasar todo un array como argumento. Solamente se pasa la referencia.
A lo mejor si lo envuelves en una structura pero nunca probe bien esa opcion.

A diferencia de otros lenguajes, manejar array es manejar punteros.

No seas tan duro, el unico cambio que tienes que hacer es agregar el asterisco a la definicion de la funcion. Mas adelante cuando veas punteros sabras bien que es...

Saludos
  #11 (permalink)  
Antiguo 21/04/2012, 10:44
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 13 años, 9 meses
Puntos: 5
Hola . La manera facil de que pueda entender . Esto de punteros. Es si fuera un poco mas didactica . La explicacion. Leyendo . Un poco a ver si supe para q sirven

como en lenguaje c . No se puwden pasar vectores . Como argumento . Lo q se hace es pasar la direccion del primer elemento . No se si es lo mismo q el.vector empiece en cero o uno. De todas manera paso la direccion d la posicion v[1]. Bueno de ahi. La funcion recibe la direccion de memoria.. Y depende el tipo de variable y ira recorriendo vector... No se si asi funciona. O me equivoco.... Palabras asi de libros.. Cientificas... Con este tema nuevo .no iba a entender
  #12 (permalink)  
Antiguo 21/04/2012, 15:00
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: duda simple de funciones

Nunca utilice un array pasandole la direccion que no sea la posicion cero, pero de todas formas deberia funcionar y la deduccion esta bien (a mi entender)

Etiquetas: funcion, funciones, int, simple, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:04.