Autor |
Mensaje |
Polito!
Nivel 7
Edad: 35
Registrado: 09 Feb 2010
Mensajes: 332
Carrera: Mecánica
|
|
gente tengo que preparar el examen de vectores otra vez y la verdad no entiendo mucho u.u
como hago para desarrollar una funcion que devuelva en un vector los numeros primos entre 2 y 200?
saludos!
|
|
|
|
_________________ Riquelme esta felí
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
Más sencillo, hacé una función que reciba un vector y cargue en él dichos primos.
O sea:
void claculaprimos(int vector[], int tamagno) {
...
}
|
|
|
|
_________________
|
|
|
|
|
Polito!
Nivel 7
Edad: 35
Registrado: 09 Feb 2010
Mensajes: 332
Carrera: Mecánica
|
|
Gente, estoy necesitando saber como hacer un ciclo de ordenamiento de una matriz, cualquiera sea. (cuadrada M[N][N] o no M[N][O])
quiero saber si hay alguna forma directa de hacerlo, o sea sin pasarla a vectores, y sin funciones del dev++,o visual. quiero saber escribir el ciclo.
Saludos!
|
|
|
|
_________________ Riquelme esta felí
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
¿Ordenarla cómo?
Creo que la forma más sencilla de entender de ordenamiento es selección. Revisás toda la matriz, encontrás su elemento menor y su posición y lo intercambiás con el 0,0. Revisás toda la matriz, pero empezando desde el 1,0; buscás el elemento más chico y su posición, y lo intercambiás con el 1,0... y así.
No deberías complicarte mucho para implementar ese algoritmo.
(Al margen, no sé por qué tiene tanta pegada burbujeo, es mucho más antinatural de entender, y es más horrible en cuanto a eficiencia en cantidad de movimientos de memoria.)
|
|
|
|
_________________
|
|
|
|
|
koreano
Nivel 9
Registrado: 15 Jul 2010
Mensajes: 1796
Carrera: No especificada
|
|
La pregunta es demasiado genérica: como definís el orden en una matriz? Qué es un "ciclo de ordenamiento", el bucle principal de algun algoritmo de sorteo? Asumiendo que la matriz se ordena de menor a mayor de izq a derecha y de arriba a abajo, te recomiendaría empezar por algo como un bubble sort, tratando a la matriz como un vector lineal (haciendo cuentas con los tamaños de las filas y las columnas dentro del cíclo).
|
|
|
|
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
Lo del tratamiento en forma lineal es (asumiendo row major order); si la matriz mide NxM es equivalente a un vector de NxM elementos donde el elemento i,j de la matriz se encuentra en la posición i*M+j del vector; y la posición k del vector corresponde a la fila k/M, y columna k%M de la matriz.
Armando ese cambio de variables, podés aplicar el método que más te guste.
|
|
|
|
_________________
|
|
|
|
|
koreano
Nivel 9
Registrado: 15 Jul 2010
Mensajes: 1796
Carrera: No especificada
|
|
|
|
|
Polito!
Nivel 7
Edad: 35
Registrado: 09 Feb 2010
Mensajes: 332
Carrera: Mecánica
|
|
de menor a mayor por fila me refiero... este ciclo seria el correcto?
respuestas[10][10]
//organizo de menor a mayor las filas de la matriz
for(i=0; i<10; i++){
for(j=0; j<10; j++){
for(k=j; k<10>respuestas[i][k]){
h=respuestas[i][j];
respuestas[i][j]=respuestas[i][k];
respuestas[i][k]=h;
}
|
|
|
|
_________________ Riquelme esta felí
|
|
|
|
|
Polito!
Nivel 7
Edad: 35
Registrado: 09 Feb 2010
Mensajes: 332
Carrera: Mecánica
|
|
corrijo,
seria este?
for(i=0; i<10; i++){
for(j=0; j<10; j++){
for(k=j; k<10>respuestas[i][k]){
h=respuestas[i][j];
respuestas[i][j]=respuestas[i][k];
respuestas[i][k]=h;
|
|
|
|
_________________ Riquelme esta felí
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
Ah, o sea, cada fila la ordenarías de menor a mayor, independientemente de las otras.
Entonces ahí no te interesa mucho el tema matrices.
El algoritmo es:
Para cada fila:
Ordeno la fila.
Tu código tiene algo mal, no podés estar ordenando sin hacer ninguna comparación entre elementos... algún if() sí o sí tiene que aparecer en el código.
De todos modos, por como usaste los índices, entiendo que sí vas por el camino correcto. Te falta hacer que eso sea un algoritmo de ordenamiento, pero el recorrido está bien planteado.
|
|
|
|
_________________
|
|
|
|
|
Polito!
Nivel 7
Edad: 35
Registrado: 09 Feb 2010
Mensajes: 332
Carrera: Mecánica
|
|
uh puse dos veces lo mismo soy un pelotudo jajajaja
perdonen nose como editar el ciclo ya lo saque sisi va un if que no salio en el msj
|
|
|
|
_________________ Riquelme esta felí
|
|
|
|
|
Polito!
Nivel 7
Edad: 35
Registrado: 09 Feb 2010
Mensajes: 332
Carrera: Mecánica
|
|
Gente tengo una duda... quiero hacer funicones recursivas con vectores...
pero me tira error
La funcion es suma.
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
int suma(int,int);
int main(int argc, char *argv[]) {
int i;
int v[20];
cout<<"la suma es: "<<suma(v,i);
return 0;
}
int suman(int v[],int i)
{
if(i==0)
return 0;
else
if (i==1)
return i;
else
return v[i]+suman(v,i-1);
}
y de error me dice...
"error: invalid conversion from 'int*' to 'int'"
|
|
|
|
_________________ Riquelme esta felí
|
|
|
|
|
koreano
Nivel 9
Registrado: 15 Jul 2010
Mensajes: 1796
Carrera: No especificada
|
|
El tipo de int v[] es int* (en el prototipo/declaración de la función).
Y asumo que donde dice int i; tenés que inicalizarlo con el tamaño del vector. Y el nombre de la función tiene que ser o suma o suman pero la misma.
|
|
|
|
|
|
|
|
|
Polito!
Nivel 7
Edad: 35
Registrado: 09 Feb 2010
Mensajes: 332
Carrera: Mecánica
|
|
sabes que pongo como vos me decis y me sigue tirando el error, y me lo marca en el ultimo renglon
return v[i]+suman(v,i-1);
|
|
|
|
_________________ Riquelme esta felí
|
|
|
|
|
koreano
Nivel 9
Registrado: 15 Jul 2010
Mensajes: 1796
Carrera: No especificada
|
|
Ahí lo tenés funcionando: http://www.ideone.com/zdqT7
Expansión de la recursividad:
int v[3] = {1, 2, 3};
suma(v, 3)
= v[3-1] + suma(v, 2) = v[2] + suma(v, 2) = 3 + suma(v, 2)
= 3 + v[2-1] + suma(v, 1) = 3 + v[1] + suma(v, 1) = 3 + 2 + suma(v, 1)
= 3 + 2 + v[1-1] + suma(v, 0) = 3 + 2 + v[0] + suma(v, 0) = 3 + 2 + 1 + suma(v, 0) = 3 + 2 + 1 + 0 = 6
Cosas que tenías mal:
- Consistencia nombrando la función: tiene que ser exactamente el mismo nombre
- Usando índices que empiezan en 1 en vez de 0 para el vector
- Condición de corte errónea (la de i == 1)
|
|
|
|
|
|
|
|
|
|