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

Cojer posiciones matrices en c -->

Estas en el tema de Cojer posiciones matrices en c --> en el foro de C/C++ en Foros del Web. Buenas tardes, Tengo algo parecido a esto en python : a[x]=a[x-2]+a[x-1] // aquí le digo que me sume las 2 ultimas posiciones succesivamente Resultado : ...
  #1 (permalink)  
Antiguo 19/01/2012, 12:52
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 13 años, 2 meses
Puntos: 3
Cojer posiciones matrices en c -->

Buenas tardes,

Tengo algo parecido a esto en python :

a[x]=a[x-2]+a[x-1] // aquí le digo que me sume las 2 ultimas posiciones succesivamente

Resultado : 2 3 5 8 13 21 34 55 89 144 233 .........


Alguien sabe alguna cosa en c ?

Gracias

Última edición por drakgoku1; 19/01/2012 a las 13:34
  #2 (permalink)  
Antiguo 19/01/2012, 15:51
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 10 meses
Puntos: 25
Respuesta: Cojer posiciones matrices en c -->

ese mismo codigo en c coloca en la posicion x del arreglo a la suma de las 2 posiciones anteriores:

nota: las posiciones de los vectores se empiezan a contar desde 0, es decir, si tenes un vector de dimension 10, sus posiciones seran 0,1,2,3,4,5,6,7,8,9.

ejemplo:

si el arreglo es de enteros y se definio con una dimension de 10:

Código C:
Ver original
  1. int a[10];

solamente se llenan con valores las primeras 5 posiciones:

Código C:
Ver original
  1. a[0]= 2;
  2. a[1]= 3;
  3. a[2]= 5;
  4. a[3]= 8;
  5. a[4]= 13;

ahora, si x vale 5, que sera la 6ta posicion a llenar, entonces el codigo a[x]= a[x-2]+a[x-1]; colocara en la posicion 6 del vector el valor 21 que corresponde a la suma de los valores que se encuentran en la posicion 5 y 4 del vector.
  #3 (permalink)  
Antiguo 19/01/2012, 15:52
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 10 meses
Puntos: 25
Respuesta: Cojer posiciones matrices en c -->

pero que feo que lo explique ajajaj....

en todo caso aqui tienes una mejor explicacion

http://www.fismat.umich.mx/mn1/manual/node6.html
  #4 (permalink)  
Antiguo 19/01/2012, 17:52
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Cojer posiciones matrices en c -->

cuando x valga 0 o 1 te va a petar porque estas accediendo a una seccion no valida de memoria ( a[-2] o a[-1])
  #5 (permalink)  
Antiguo 20/01/2012, 00:20
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por starfix Ver Mensaje
ese mismo codigo en c coloca en la posicion x del arreglo a la suma de las 2 posiciones anteriores:

nota: las posiciones de los vectores se empiezan a contar desde 0, es decir, si tenes un vector de dimension 10, sus posiciones seran 0,1,2,3,4,5,6,7,8,9.

ejemplo:

si el arreglo es de enteros y se definio con una dimension de 10:

Código C:
Ver original
  1. int a[10];

solamente se llenan con valores las primeras 5 posiciones:

Código C:
Ver original
  1. a[0]= 2;
  2. a[1]= 3;
  3. a[2]= 5;
  4. a[3]= 8;
  5. a[4]= 13;

ahora, si x vale 5, que sera la 6ta posicion a llenar, entonces el codigo a[x]= a[x-2]+a[x-1]; colocara en la posicion 6 del vector el valor 21 que corresponde a la suma de los valores que se encuentran en la posicion 5 y 4 del vector.
Entonces como cojo las 2 ultimas posiciones cada vez?

Creo entender hacer un contador para los a[x-contador] si?

Gracias
  #6 (permalink)  
Antiguo 20/01/2012, 06:12
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 10 meses
Puntos: 25
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por drakgoku1 Ver Mensaje
Entonces como cojo las 2 ultimas posiciones cada vez?
en c y c++ los indices de los arreglos comienzan desde cero, por lo tanto, si tu arreglo a lo declaras con una dimension de 10, entonces para acceder al ultimo elemento lo haces como a[9] y al penultimo como a[8]:

Código C++:
Ver original
  1. //se declara un arreglo con dimension 10
  2. int a[10];
  3.  
  4. //se llena el arreglo con los numeros del 1 al 10
  5. for (int i=0; i<10; i++)
  6.     a[i]= i + 1;
  7.  
  8. //se muestra en pantalla el ultimo y penultimo elemento respectivamente
  9. cout<< a[9]<<endl;
  10. cout<< a[8]<<endl;

SALIDA
Código salida:
Ver original
  1. 10
  2. 9


para tu ejercicio tenes que tenes en cuenta lo que dijo tig0:

Cita:
Iniciado por tig0 Ver Mensaje
cuando x valga 0 o 1 te va a petar porque estas accediendo a una seccion no valida de memoria ( a[-2] o a[-1])

Cita:
Iniciado por drakgoku1 Ver Mensaje
Creo entender hacer un contador para los a[x-contador] si?
podes colocar datos en las 2 primeras posiciones del vector y luego con un for completar la cantidad de posiciones que faltan:

Código C++:
Ver original
  1. int a[10];
  2.  
  3. a[0]= 3;
  4. a[1]= 5;
  5.  
  6. /*el for recorre desde la tercera posicion hasta la ultima, en la
  7. posicion actual coloca la suma de las 2 posiciones anteriores. ej:
  8. si se encuentra en la posicion 7 (a[6]), esta tendra el valor
  9. de la suma entre la posicion 6 (a[5]) y la posicion 5 (a[4])*/
  10. for (int i=2; i<10; i++)
  11.    a[i]= a[i-1] + a[i-2];

saludos
  #7 (permalink)  
Antiguo 20/01/2012, 15:23
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por starfix Ver Mensaje
en c y c++ los indices de los arreglos comienzan desde cero, por lo tanto, si tu arreglo a lo declaras con una dimension de 10, entonces para acceder al ultimo elemento lo haces como a[9] y al penultimo como a[8]:

Código C++:
Ver original
  1. //se declara un arreglo con dimension 10
  2. int a[10];
  3.  
  4. //se llena el arreglo con los numeros del 1 al 10
  5. for (int i=0; i<10; i++)
  6.     a[i]= i + 1;
  7.  
  8. //se muestra en pantalla el ultimo y penultimo elemento respectivamente
  9. cout<< a[9]<<endl;
  10. cout<< a[8]<<endl;

SALIDA
Código salida:
Ver original
  1. 10
  2. 9


para tu ejercicio tenes que tenes en cuenta lo que dijo tig0:






podes colocar datos en las 2 primeras posiciones del vector y luego con un for completar la cantidad de posiciones que faltan:

Código C++:
Ver original
  1. int a[10];
  2.  
  3. a[0]= 3;
  4. a[1]= 5;
  5.  
  6. /*el for recorre desde la tercera posicion hasta la ultima, en la
  7. posicion actual coloca la suma de las 2 posiciones anteriores. ej:
  8. si se encuentra en la posicion 7 (a[6]), esta tendra el valor
  9. de la suma entre la posicion 6 (a[5]) y la posicion 5 (a[4])*/
  10. for (int i=2; i<10; i++)
  11.    a[i]= a[i-1] + a[i-2];

saludos
Buenas noches starfix ,

Si quiero hacer una función fibonacci , pero sin utilizar variables , es decir :

MAX= 50
a[1]=1;
for (i=2,i<.....)

a[MAX]=a[MAX] -2(posiciones) + a[MAX] -1 (posición).

empieza a partir de la 2 en mi for

Un amigo que se le da de perlas la programación me lo hizo , pero pregunto si se puede hacer esto de las posiciones como en python ?

En python es tan simple como :

for x in range (len(a))
a[x]=a[x-2]+a[x-1]


Resultado a mostrar 1 2 3 5 8 13 21......

Pero como hago lo de las posicioens en C ?
  #8 (permalink)  
Antiguo 20/01/2012, 16:01
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Cojer posiciones matrices en c -->

ya te lo ha dicho starfix
  #9 (permalink)  
Antiguo 20/01/2012, 16:14
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 10 meses
Puntos: 25
Respuesta: Cojer posiciones matrices en c -->

el codigo que te puse anteriormente se puede utilizar para la serie de fibonacci en hasta 10 numero, solamente hay que cambiar los 2 primero valores del arreglo por 1:

Código C:
Ver original
  1. int a[10];
  2.  
  3. a[0]= 1;
  4. a[1]= 1;
  5.  
  6. cout<<a[0]<<endl;
  7. cout<<a[1]<<endl;
  8.  
  9. /*el for recorre desde la tercera posicion hasta la ultima, en la
  10. posicion actual coloca la suma de las 2 posiciones anteriores. ej:
  11. si se encuentra en la posicion 7 (a[6]), esta tendra el valor
  12. de la suma entre la posicion 6 (a[5]) y la posicion 5 (a[4])*/
  13.  
  14. for (int i=2; i<10; i++)
  15.    a[i]= a[i-1] + a[i-2];
  16.    cout<<a[i]<<endl;

Código salida:
Ver original
  1. 1
  2. 1
  3. 3
  4. 5
  5. 8
  6. 13
  7. 21
  8. 34
  9. 55
  10. 89

si queres obtener un seria mas larga solamente tenes que cambiar en la linea 1 y la 11 el numero 10 por el valor que vos quieras

//-------------------------------------------------------------------------------------//

Código Python:
Ver original
  1. a[x]=a[x-2]+a[x-1]

en c para cambiar todos los valores del arreglo tenes que utilizar un for, en el siguiente codigo cambia desde la posicion 2 hasta la ultima:

Código C:
Ver original
  1. for (int i=2; i< (dimension del arreglo); i++)
  2.     a[i]= a[i-1] + a[i-2];
  #10 (permalink)  
Antiguo 20/01/2012, 17:15
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por starfix Ver Mensaje
el codigo que te puse anteriormente se puede utilizar para la serie de fibonacci en hasta 10 numero, solamente hay que cambiar los 2 primero valores del arreglo por 1:

Código C:
Ver original
  1. int a[10];
  2.  
  3. a[0]= 1;
  4. a[1]= 1;
  5.  
  6. cout<<a[0]<<endl;
  7. cout<<a[1]<<endl;
  8.  
  9. /*el for recorre desde la tercera posicion hasta la ultima, en la
  10. posicion actual coloca la suma de las 2 posiciones anteriores. ej:
  11. si se encuentra en la posicion 7 (a[6]), esta tendra el valor
  12. de la suma entre la posicion 6 (a[5]) y la posicion 5 (a[4])*/
  13.  
  14. for (int i=2; i<10; i++)
  15.    a[i]= a[i-1] + a[i-2];
  16.    cout<<a[i]<<endl;

Código salida:
Ver original
  1. 1
  2. 1
  3. 3
  4. 5
  5. 8
  6. 13
  7. 21
  8. 34
  9. 55
  10. 89

si queres obtener un seria mas larga solamente tenes que cambiar en la linea 1 y la 11 el numero 10 por el valor que vos quieras

//-------------------------------------------------------------------------------------//

Código Python:
Ver original
  1. a[x]=a[x-2]+a[x-1]

en c para cambiar todos los valores del arreglo tenes que utilizar un for, en el siguiente codigo cambia desde la posicion 2 hasta la ultima:

Código C:
Ver original
  1. for (int i=2; i< (dimension del arreglo); i++)
  2.     a[i]= a[i-1] + a[i-2];
Vaya solo me faltaba declarar a[0]=1 ; a[1]=1 ...

Por eso el bucle peta , no encuentra la posición :)

Como puedo hacer que no salga -145..... el resultado final ,

Probé :

long
int
double
long long
float

Ninguna funciona ... como es? :D
  #11 (permalink)  
Antiguo 20/01/2012, 17:46
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por drakgoku1 Ver Mensaje
Vaya solo me faltaba declarar a[0]=1 ; a[1]=1 ...

Por eso el bucle peta , no encuentra la posición :)

Como puedo hacer que no salga -145..... el resultado final ,

Probé :

long
int
double
long long
float

Ninguna funciona ... como es? :D
te petaba porque lo que hacia el programa era intentar acceder a la posicion a[-2] y a[-1], las cuales evidentemente, no son accesibles.

en python puedes representar numeros mayores que enteros de 64 bits pero en c++ no. para representar numeros mayores que el maximo de un entero de 64 bits (2 ^ 64) deberias usar una libreria externa.
  #12 (permalink)  
Antiguo 20/01/2012, 17:48
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por tig0 Ver Mensaje
te petaba porque lo que hacia el programa era intentar acceder a la posicion a[-2] y a[-1], las cuales evidentemente, no son accesibles.

en python puedes representar numeros mayores que enteros de 64 bits pero en c++ no. para representar numeros mayores que el maximo de un entero de 64 bits (2 ^ 64) deberias usar una libreria externa.
2 ^64 vaya ...

Es decir el que hizo o hizieron C / C++ su nota de la uni o del master era muy por debajo que los que hicieron python :) , eso parece :D

Bueno todos sabemos que python es más nuevo eso esta claro , pero casi todo va en C/c++ :)

Entonces que librería tengo que utilizar para que no me salga negativo ?
  #13 (permalink)  
Antiguo 20/01/2012, 19:02
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 16 años, 2 meses
Puntos: 6
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por tig0 Ver Mensaje
te petaba porque lo que hacia el programa era intentar acceder a la posicion a[-2] y a[-1], las cuales evidentemente, no son accesibles.

en python puedes representar numeros mayores que enteros de 64 bits pero en c++ no. para representar numeros mayores que el maximo de un entero de 64 bits (2 ^ 64) deberias usar una libreria externa.
El código no accede a las posiciones a[-1] y a[-2], puesto que al calcular los valores, el índice i tiene un valor inicial de dos (i = 2) y en cada iteración se incrementa en uno su valor, no se decrementa (i++).

Cita:
Iniciado por drakgoku1 Ver Mensaje
2 ^64 vaya ...

Es decir el que hizo o hizieron C / C++ su nota de la uni o del master era muy por debajo que los que hicieron python :) , eso parece :D

Bueno todos sabemos que python es más nuevo eso esta claro , pero casi todo va en C/c++ :)

Entonces que librería tengo que utilizar para que no me salga negativo ?
El nombre correcto del error se conoce como desbordamiento (u overflow en inglés), y se produce porque intentas activar más bits de los que tienes disponibles. Es decir, si dispones de 16 bits para un tipo entero, activas todos los bits a 1 (obteniendo el valor decimal límite) e intentas sumar 1 de nuevo, la variable se desborda y, por decirlo de alguna manera, "los bits se reinician". Generalmente, el desbordamiento es complicado de depurar, aunque aquí salta a la vista.

Para evitar los números negativos al desbordar (aunque en este caso te facilitan el darte cuenta porque se trata de matemáticas y la suma de dos números positivos no puede generar un número negativo), podrías usar el tipo de dato unsigned int, que sólo trabaja con valores positivos, aunque esto no te evitaría el problema, simplemente lo retrasaría.

Dependiendo de qué Sistema Operativo estés usando y qué versión del mismo, los límites de cada tipo de dato pueden variar. Por ejemplo, en Sistemas Operativos Unix, puedes consultar el rango en la libreria /usr/include/limits.h

Un saludo,
gonzo.
  #14 (permalink)  
Antiguo 21/01/2012, 01:55
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por gonzo13 Ver Mensaje
El código no accede a las posiciones a[-1] y a[-2], puesto que al calcular los valores, el índice i tiene un valor inicial de dos (i = 2) y en cada iteración se incrementa en uno su valor, no se decrementa (i++).



El nombre correcto del error se conoce como desbordamiento (u overflow en inglés), y se produce porque intentas activar más bits de los que tienes disponibles. Es decir, si dispones de 16 bits para un tipo entero, activas todos los bits a 1 (obteniendo el valor decimal límite) e intentas sumar 1 de nuevo, la variable se desborda y, por decirlo de alguna manera, "los bits se reinician". Generalmente, el desbordamiento es complicado de depurar, aunque aquí salta a la vista.

Para evitar los números negativos al desbordar (aunque en este caso te facilitan el darte cuenta porque se trata de matemáticas y la suma de dos números positivos no puede generar un número negativo), podrías usar el tipo de dato unsigned int, que sólo trabaja con valores positivos, aunque esto no te evitaría el problema, simplemente lo retrasaría.

Dependiendo de qué Sistema Operativo estés usando y qué versión del mismo, los límites de cada tipo de dato pueden variar. Por ejemplo, en Sistemas Operativos Unix, puedes consultar el rango en la libreria /usr/include/limits.h

Un saludo,
gonzo.
Windows 7 (pero no es exactamente 7 , es un tipo game que me da más problemas que otro windows 7 , lo tengo para jugar alguna vez :) utilizé unsigned int ayer , pero tampoco :)

Si tienes alguna pista ya comentarás

saludos.
  #15 (permalink)  
Antiguo 21/01/2012, 02:45
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 16 años, 2 meses
Puntos: 6
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por drakgoku1 Ver Mensaje
utilizé unsigned int ayer , pero tampoco :)
Ya te comenté que usar el tipo unsigned int sólo retrasaría el momento de desbordado. De todas formas, ¿en ningún momento te aparece el desbordamiento en python? Consulta los tipos de datos para el lenguaje C/C++ y para el lenguaje python


Respecto a Python, también he encontrado este párrafo en un libro de texto
Cita:
El tipo int de Python se implementa a bajo nivel mediante un tipo
long de C. Y dado que Python utiliza C por debajo, como C, y a dife-
rencia de Java, el rango de los valores que puede representar depende
de la plataforma.
En la mayor parte de las máquinas el long de C se almacena utilizando
32 bits, es decir, mediante el uso de una variable de tipo int de Python
podemos almacenar números de -231 a 231 - 1, o lo que es lo mismo, de
-2.147.483.648 a 2.147.483.647. En plataformas de 64 bits, el el rango es
de -9.223.372.036.854.775.808 hasta 9.223.372.036.854.775.807.

El tipo long de Python permite almacenar números de cualquier preci-
sión, estando limitados solo por la memoria disponible en la máquina.
Creo que la cita explica bastante bien por qué C/C++ desborda mucho antes que Python.

Un saludo,
gonzo
  #16 (permalink)  
Antiguo 21/01/2012, 04:58
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por gonzo13 Ver Mensaje
Ya te comenté que usar el tipo unsigned int sólo retrasaría el momento de desbordado. De todas formas, ¿en ningún momento te aparece el desbordamiento en python? Consulta los tipos de datos para el [URL="http://www.cplusplus.com/doc/tutorial/variables/"]lenguaje C/C++[/URL] y para el [URL="http://pathfinder.scar.utoronto.ca/~dyer/csca57/book_P/node16.html"]lenguaje python[/URL]


Respecto a Python, también he encontrado este párrafo en un libro de texto


Creo que la cita explica bastante bien por qué C/C++ desborda mucho antes que Python.

Un saludo,
gonzo
Si , si lo explica bien lo sé también prové unsigned long :) ,

Tengo otra duda

a[10]=[1,4,1,2,5,7,1,8,1,3]

Como puedo adivinar si estan repetidos con un if con el bucle anteriormente ?

for ...
{
statements..
if(a[i]== ? ) // aqui le digo la posición pero como lo comparo ?
con+=1;
}
  #17 (permalink)  
Antiguo 21/01/2012, 06:57
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 15 años, 2 meses
Puntos: 2
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por drakgoku1 Ver Mensaje
Si , si lo explica bien lo sé también prové unsigned long :) ,

Tengo otra duda

a[10]=[1,4,1,2,5,7,1,8,1,3]

Como puedo adivinar si estan repetidos con un if con el bucle anteriormente ?

for ...
{
statements..
if(a[i]== ? ) // aqui le digo la posición pero como lo comparo ?
con+=1;
}
puedes echar un vistazo a la libreria <algorithm> que te ayudara en lo que necesitas y ya de paso mirate la libreria <vector> y <list>

http://www.cplusplus.com/reference/algorithm/

si no quieres usar esas librerias tendras que usar 2 bucles e ir comparando 1 por 1
  #18 (permalink)  
Antiguo 21/01/2012, 08:40
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por tig0 Ver Mensaje
puedes echar un vistazo a la libreria <algorithm> que te ayudara en lo que necesitas y ya de paso mirate la libreria <vector> y <list>

http://www.cplusplus.com/reference/algorithm/

si no quieres usar esas librerias tendras que usar 2 bucles e ir comparando 1 por 1
Gracias por todo , pero aún estoy en formación de usar bucles + matrices en C , tengo que practicar sin usar estas librerias porque no nos lo han enseñado , si no nunca aprenderé :) , Por mucho que sepa como funciona una libreria sin usar yo mismo los bucles , es como tener el piloto automático :)

Gracias , espero hacerlo bien todo :)
  #19 (permalink)  
Antiguo 21/01/2012, 09:53
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 10 meses
Puntos: 25
Respuesta: Cojer posiciones matrices en c -->

lo podes hacer como te dijeron, con 2 bucles.... te comento la logica de como lo haria yo y lo pasas a codigo:

- creo 2 vectores del mismo tamaño, en 1 se guardan los numeros a comparar y en el otro se iran guardando los repetidos.

- tomo el primer elemento del vector que contiene los datos y lo comparo con todos los otros, en caso de que se repita, coloco el valor en el vector que almacena los repetidos

- luego comparo el segundo elemento con todos los otros y asi sucesivamente hasta llegar al ultimo.

- informo el vector que guarda los repetidos

no es la mejor explicacion, pero con eso podras comenzar a realizar el codigo, cuando te surja alguna duda nos preguntas.
  #20 (permalink)  
Antiguo 21/01/2012, 11:15
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por starfix Ver Mensaje
lo podes hacer como te dijeron, con 2 bucles.... te comento la logica de como lo haria yo y lo pasas a codigo:

- creo 2 vectores del mismo tamaño, en 1 se guardan los numeros a comparar y en el otro se iran guardando los repetidos.

- tomo el primer elemento del vector que contiene los datos y lo comparo con todos los otros, en caso de que se repita, coloco el valor en el vector que almacena los repetidos

- luego comparo el segundo elemento con todos los otros y asi sucesivamente hasta llegar al ultimo.

- informo el vector que guarda los repetidos

no es la mejor explicacion, pero con eso podras comenzar a realizar el codigo, cuando te surja alguna duda nos preguntas.
Te pego el codigo entero no hay mucho :

Código C:
Ver original
  1. #include <stdio.h>
  2. #define MAXLON 10
  3. int main(void)
  4. {
  5.     int a[MAXLON]={10,2,5,6,1,32,4,1,2,6},i=0,con=0,x=0;
  6.  
  7.     printf("La taula a mostrar es \n ");
  8.     printf("---------------------\n");
  9.     for (i=0;i<MAXLON;i++)
  10.     {
  11.         printf("%d ",a[i]);
  12.  
  13.         if(a[i]== ) /* Le pongo el 2 vector ¿?¿??  */
  14.         {
  15.             con=con+1;
  16.         }
  17.     }
  18.     printf("\n");
  19.  
  20.     printf("\n---------------------");
  21.     if(con>=1)
  22.     {
  23.         printf("\ntenim %d coincidencies\n",con);
  24.     }
  25.     else
  26.     {
  27.         printf("\nNo tenim coincidencies\n");
  28.     }
  29.     return 0;
  30. }

Pero no me sale.

Última edición por drakgoku1; 21/01/2012 a las 12:22
  #21 (permalink)  
Antiguo 21/01/2012, 14:50
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Cojer posiciones matrices en c -->

Sabes como se hace? starfix

Soy demasiado novato :)

Saludos
  #22 (permalink)  
Antiguo 21/01/2012, 14:54
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 16 años, 2 meses
Puntos: 6
Respuesta: Cojer posiciones matrices en c -->

No te sale porque la condición de la línea 13 no es correcta (más bien es que no hay condición).

tig0 y starfix te han dado la solución para comparar todos los números de la tabla, usar dos bucles anidados. Si lo que quieres es comparar un único valor concreto, usa sólo un bucle. De todas formas, ya que te lo han propuesto, te vendría estupendamente pensar en la solución que ellos te aconsejan, pero tendrás que darte cuenta de un pequeño detalle (aunque simple).

Un saludo,
gonzo.
  #23 (permalink)  
Antiguo 21/01/2012, 14:55
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por drakgoku1 Ver Mensaje
Te pego el codigo entero no hay mucho :

Código C:
Ver original
  1. #include <stdio.h>
  2. #define MAXLON 10
  3. int main(void)
  4. {
  5.     int a[MAXLON]={10,2,5,6,1,32,4,1,2,6},i=0,con=0,x=0;
  6.  
  7.     printf("La taula a mostrar es \n ");
  8.     printf("---------------------\n");
  9.     for (i=0;i<MAXLON;i++)
  10.     {
  11.         printf("%d ",a[i]);
  12.  
  13.         if(a[i]== ) /* Le pongo el 2 vector ¿?¿??  */
  14.         {
  15.             con=con+1;
  16.         }
  17.     }
  18.     printf("\n");
  19.  
  20.     printf("\n---------------------");
  21.     if(con>=1)
  22.     {
  23.         printf("\ntenim %d coincidencies\n",con);
  24.     }
  25.     else
  26.     {
  27.         printf("\nNo tenim coincidencies\n");
  28.     }
  29.     return 0;
  30. }

Pero no me sale.

Sabes como se hace? starfix

Soy demasiado novato :)

Bueno por que en c? , todo lo demás me va bien :)

Porque el profesor explica mal , me dirás que la culpa es mía...

Un profesor que en la UNI sacó un '5'
Un profesor que viene a l'aula de mala leche y nos dice no busquen en internet al hacer un programa ("el dia de mañana como no este el a quien acudimos xd ")
Un profesor que no explica del todo bien y dice aquí teneis un manual (300 páginas), ir a tal página "x" y empezar
Claro que si campeon , tengo unas ganas de echarselo en cara pero mira :) hasta dentro de unos años ^^


Saludos
  #24 (permalink)  
Antiguo 21/01/2012, 14:59
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por gonzo13 Ver Mensaje
No te sale porque la condición de la línea 13 no es correcta (más bien es que no hay condición).

tig0 y starfix te han dado la solución para comparar todos los números de la tabla, usar dos bucles anidados. Si lo que quieres es comparar un único valor concreto, usa sólo un bucle. De todas formas, ya que te lo han propuesto, te vendría estupendamente pensar en la solución que ellos te aconsejan, pero tendrás que darte cuenta de un pequeño detalle (aunque simple).

Un saludo,
gonzo.
Gracias meditaré la pregunta en el examen :)

Saludos :)
  #25 (permalink)  
Antiguo 21/01/2012, 15:53
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 10 meses
Puntos: 25
Respuesta: Cojer posiciones matrices en c -->

la idea es que anides 2 for, es decir que tengas los siguiente:

Código C:
Ver original
  1. for (int i=0; i<MAXLON-1; i++){
  2.    for (int j= i+1; j<MAXLON; j++){
  3.        if (a[i] == a[j]) //codigo a realizar en caso de que sean iguales
  4. }
  5. }

el for de afuera manejara el numero a analizar y el segundo ira iterando, cambiando de posicion dentro del vector, es decir:

si tenes un vector de 10 elementos, la variable i que se crea en el for de afuera la usaras para acceder al 1er elemento del vector. Con la variable j iras viendo si el numero contenido en la posicion i es igual al contenido en la posicion j, en caso de que de verdadero realiza el codigo.

estos son los valores que toman i y j en los for(si MAXLON vale 10):

i=0

j=1 compara
j=2 compara
j=3 compara
j=4 compara
j=5 compara
j=6 compara
j=7 compara
j=8 compara
j=9 compara
//aqui ya se termina el for de adentro, por lo que vuelve al de afuera, aumentando i en 1 y volviendo a analizar la condicion del for de afuera

i=1 se cumple la condicion

j=2 compara
j=3 compara
j=4 compara
j=5 compara
j=6 compara
j=7 compara
j=8 compara
j=9 compara
//nuevamente se termina el for de adentro y vuelve a aumentar i en 1 y analizar la condicion del for de afuera

i=2 se cumple la condicion

j=3 compara
j=4 compara
j=5 compara
j=6 compara
j=7 compara
j=8 compara
j=9 compara
//esto sigue hasta que la condicion del for de afuera no se cumpla, es decir, hasta que i valga 9
  #26 (permalink)  
Antiguo 21/01/2012, 16:17
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Cojer posiciones matrices en c -->

Gracias por todo lo entiendo todo

Un saludo cordial :)

Última edición por drakgoku1; 22/01/2012 a las 02:37

Etiquetas: cojer, funcion, matrices, posiciones
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 00:57.