Autor |
Mensaje |
ignaciogb
Nivel 3
Registrado: 15 Oct 2009
Mensajes: 32
Ubicación: Capital Federal
Carrera: Industrial
|
|
ahi me tira un warning pero anda.
mañana lo seguire viendo por hoy ya fue mucha programacion
muchas gracias Amadeo
|
|
|
|
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
Hace muuuuchos años que no programo C++... me llamaría la atención que el ISO de C++ fuera más restrictivo que el ANSI-C99 con el tema de los vectores con índice dinámico; pero tampoco me parecería muy descabellado.
Por el tema de new, ¿estás seguro de que chequea algo?; probablemente espere recibir un unsigned y castee a lo pavote con un overflow precioso si le ponés un negativo (como le pasa a malloc() en C)...
Al respecto de la resolución del ejercicio: Sí, declaren un array con una X cantidad fija; chequeen que la cantidad de elementos deseados no sea mayor a X; y trabajen sobre los elementos que el usuario quería y no sobre los que pidieron.
BTW, ¿C++, recursividad y ordenamiento en Computación?... Cabrera se volvió loco .
|
|
|
|
_________________
|
|
|
|
|
Fabricio
Nivel 8
Edad: 36
Registrado: 20 Nov 2008
Mensajes: 851
Ubicación: Villa del Parque, barrio turro
Carrera: Civil
|
|
Recursividad igual dijieron que si lo toman va a ser algo muy basico, la ultima clase dieron archivos y clases, nadie entendio una goma y creo que decidieron no tomarlo en el parcial, lo bueno: aparentemente se olvidaron de los tps porque ya es el 2do parcial el jueves y jamas mencionaron la palabra "TP"
|
|
|
|
_________________
|
|
|
|
|
koreano
Nivel 9
Registrado: 15 Jul 2010
Mensajes: 1796
Carrera: No especificada
|
|
C++ no tiene VLAs, C99 sí. Si querés un vector de dimensión variable y no querés ocuparte de la memoria usá std::vector.
Código:
|
#include <iostream>
#include <vector>
int main() {
int n;
std::vector<int> nums;
std::cout << "Ingrese la cantidad de elementos: " <<std>> n;
nums.resize(n);
// manipular nums[0]...nums[n-1], etc
// o podés usar push_back para ir agrandando a medida que insertás
..
}
|
Para mas información googlea "std vector c++". Si no, usá new y delete pero es un desperdicio ponerse a manejar la memoria para estas nimiedades
ps: VLA = http://en.wikipedia.org/wiki/Variable_Length_Array
|
|
|
|
|
|
|
|
|
ignaciogb
Nivel 3
Registrado: 15 Oct 2009
Mensajes: 32
Ubicación: Capital Federal
Carrera: Industrial
|
|
intente hacer este ejercicio pero hay algo que me esta faltando saber, no puedo lograr que funcione la funcion me da errores o me hace cualquiera.
Dice asi: diseñar una funcion que ordene el vector V de N elementos eliminando, de paso, todos aquellos que se repitan.
La idea de como ordenarlos la se, para ir eliminando se me ocurre que vaya comparando y si el numero es distinto al siguiente (eso una vez ordenado el vector) lo mande a un nuevo vector que es el que va a quedar ordenado y sin repeticiones. Ahora, la funcion... como carajo la expreso... como hago para poner que ingrese un vector y salga otro..
Las funciones que hicimos con vectores en clase fueron que devolviera un numero no un vector:S
Agradecere mucho si alguien me sabe responder
|
|
|
|
|
|
|
|
|
koreano
Nivel 9
Registrado: 15 Jul 2010
Mensajes: 1796
Carrera: No especificada
|
|
Si es C++, simplemente ponés std::vector como input y output y listo. Por ejemplo:
Código:
|
std::vector ordena(std::vector v) {
// hacer algo con v;
return v;
}
|
Si estás hablando de "vectores" aka arrays manejados como punteros entonces tenés que devolver el puntero al primer elemento y el tamaño. Tenés 2 opciones... o te creás un tipo nuevo que tenga un puntero y el tamaño, por ejemplo struct VectInt { int* head; size_t size; }; o usás funciones que trabajen con los argumentos por referencia y no devuelvan nada, algo como:
Código:
|
void ordenar(int* vector, size_t size) {
// hacer algo con *vector y size
// por ejemplo
// for(int i = 0;i < size; ++i) std::cout << vector[i];
}
|
Es decir, en vez de entra cuchillo salen tripas como dijiste, es entra cuchillo, sale cuchillo con tripas.
Te sugiero que le hagas la gran TKB y si es C++ que uses la std lib lo mas posible para evitar "ensuciarse las manos" con punteros y memoria dinámica al pedo
|
|
|
|
|
|
|
|
|
ignaciogb
Nivel 3
Registrado: 15 Oct 2009
Mensajes: 32
Ubicación: Capital Federal
Carrera: Industrial
|
|
uhhh no entendi casi nada.. . es C++ pero no vimos vectores: lo que seria asignar un valor a un vector y no mucho mas.. no tengo ni idea de lo que es " std::vector como input y output " y esto " struct VectInt { int* head; size_t size; } "menos que menos..
|
|
|
|
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
Pobrecitos, pobrecitos.
En el segundo ejemplo de koreano yo pondría algo así:
void pisarelementos(int vector[], int tamanio) {
int i;
for(i = 0; i < tamanio; i++) vector[i] = 0;
}
O sea, no hace falta la notación de punteros y es importante que lo que hagan adentro de la función con el vector va a modificar al vector con el que la llamaron.
También funciona esto:
void funcion(int vector[N]) { ... }
Si N es fijo, pueden usar eso.
Si no quieren ordenar sobre el mismo vector; la función puede recibir dos vectores, uno de origen y otro de destino... y como valor de retorno puede entregar la longitud del vector de retorno, que si se eliminaron duplicados puede ser menor a la original.
De todos modos: Qué ganas de complicarlos mal, eh.
|
|
|
|
_________________
|
|
|
|
|
ignaciogb
Nivel 3
Registrado: 15 Oct 2009
Mensajes: 32
Ubicación: Capital Federal
Carrera: Industrial
|
|
en algun lado de internet lei algo de usar funciones con vectores y matrices que no devuelvan nada.. en este caso, se podria usar una funcion que agarre dos vectores del programa, ordene el primero y mande al segundo los valores sin repetir y no duvuelva nada, sino que cuando el programa siga, lo haga con los valores ya modificados por la funcion.. nose si se entiende..
Tal vez con una funcion void, puede ser?
|
|
|
|
|
|
|
|
|
ignaciogb
Nivel 3
Registrado: 15 Oct 2009
Mensajes: 32
Ubicación: Capital Federal
Carrera: Industrial
|
|
ahhh mientras escribia yo respondiste vos sebastian, ahora entiendo mejor..
muchas gracias muchachos!! soy de madera con estas cosas
|
|
|
|
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
Es lo que dije arriba .
int funcionqueordena(int vectorordenado[], int vectordesordenado[]) {
// Magia.
return tamaniodelvectorordenado;
}
|
|
|
|
_________________
|
|
|
|
|
koreano
Nivel 9
Registrado: 15 Jul 2010
Mensajes: 1796
Carrera: No especificada
|
|
Están enseñando el ABC de las malas prácticas
|
|
|
|
|
|
|
|
|
Fabricio
Nivel 8
Edad: 36
Registrado: 20 Nov 2008
Mensajes: 851
Ubicación: Villa del Parque, barrio turro
Carrera: Civil
|
|
muchachos/as estoy re perdido con vectores , aver si me pueden dar una mano, es muy basico este ejercicio y no me sale
Me pide hacer un programa para que dados 2 vectores de N elementos cada uno haga el vector suma, para no hacerla tan densa el N lo tome como 3, pero cuando lo compilo, el vector suma me da cualquier cosa, hice esto:
Cita:
|
#include <iostream>
using namespace std;
int main(){
int vectorA[2],vectorB[2],vectorsuma[2],i;
cout<<"ingrese un vector de 3 componentes "<<endl;
for(i=0;i<=2;i++){
cin>>vectorA[i];
}
cout<<"ingrese un vector de 3 componentes "<<endl;
for(i=0;i<=2;i++){
cin>>vectorB[i];
}
for(i=0;i<=2;i++){
vectorsuma[i]=vectorA[i]+vectorB[i];
}
cout<<vectorsuma;
}
|
cuando compilo, hago por ejemplo (1,2,3)+(1,2,3) y me da que es igual a 0x23ff34
|
|
|
|
_________________
|
|
|
|
|
RJC
Nivel 2
Registrado: 27 Mar 2008
Mensajes: 19
Carrera: Informática, Sistemas y
|
|
Ojo que creo que estas cometiendo dos errores.
En primer lugar si queres que tus arrays tengan 3 elementos, al declararlos lo tenes que hacer con esa misma cantidad, por ejemplo, int vectorA[3], en el cual como luego bien tuviste en cuenta vas a tener como indices validos desde 0 hasta 2.
Otra cosa que tenes que chequear es en el momento de hacer la impresion del resultado. Al hacer un cout de la variable que declaraste como vector esto no hace que imprima el contenido sino la posicion de memoria en la cual se encuentra el primer elemento del mismo. Para ver bien el contenido te recomiendo hacer un bucle como los que hiciste para la entrada de datos, solo que esta vez haciendo un cout del vectorsuma[i].
Espero que te sirva.
|
|
|
|
|
|
|
|
|
Fabricio
Nivel 8
Edad: 36
Registrado: 20 Nov 2008
Mensajes: 851
Ubicación: Villa del Parque, barrio turro
Carrera: Civil
|
|
No se si lo habre entendido bien pero lo corregi asi
Cita:
|
#include <iostream>
using namespace std;
int main(){
int vectorA[2],vectorB[2],vectorsuma[2],i;
cout<<"ingrese un vector de 3 componentes "<<endl;
for(i=0;i<=2;i++){
cin>>vectorA[i];
}
cout<<"ingrese un vector de 3 componentes "<<endl;
for(i=0;i<=2;i++){
cin>>vectorB[i];
}
for(i=0;i<=2;i++){
vectorsuma[i]=vectorA[i]+vectorB[i];
cout<<vectorsuma[i];
}
}
|
ahora me da un vector de resultado, pero da mal igual, por ejemplo, para (2,3,4)+(2,3,4) me da (4,4,4)
lo que entiendo por el ultimo for que hice seria asi:
el contenido de vectorsuma en la posicion i seria igual a la suma de los contenidos de las posiciones i de los vectores A y B, y me devolveria ese valor
|
|
|
|
_________________
|
|
|
|
|
|
Ir a página Anterior 1, 2, 3, 4, 5, 6, 7, 8, 9 Siguiente
|
Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro No podés responder a temas en este foro No podés editar tus mensajes en este foro No podés borrar tus mensajes en este foro No podés votar en encuestas en este foro No Podéspostear archivos en este foro No Podés bajar archivos de este foro
|
Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker365 Attacks blocked.
|