elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6
41  Programación / Programación C/C++ / Consulta - Punteros en: 12 Diciembre 2018, 16:59 pm
Buenas, otra vez yo! Necesito me aclaren esto, porque la verdad es que no entiendo para qué debería hacer la función que me están pidiendo, a ver si me pueden esclarecer un poco.
Consigna:
Código
  1. Escriba una funcion busca_mayor() que permita buscar el mayor elemento de un arreglo de structs segun diferentes criterios.
  2. La funcion debe recibir como argumentos el arreglo de structs de tipo alumno, el tamanio del mismo, y un puntero a otra funcion que utilizara para comparar dos elementos de tipo alumno y saber cual es el mayor de ellos.
  3. struct alumno {
  4. char nombre[50];
  5. int dni, edad, calificacion;
  6. };
  7. Implemente funciones que comparen dos alumnos segun su dni, segun su edad,
  8. segun su calificacion, y segun su nombre alfabeticamente, y genere un programa cliente que permita ingresar los datos de N alumnos y buscar el mayor segun el
  9. criterio que el usuario seleccione mediante un menu.

Esto fue lo que hice yo:  //No quiero que me hagan los ejercicios, solo que me ayuden en las dudas que tengo, así puedo terminar de comprenderlos, sino nunca voy a poder razonarlos si me los hacen
Código
  1. #include <iostream>
  2. using namespace std;
  3. struct alumno {
  4. char nombre[50];
  5. int dni, edad, calificacion;
  6. };
  7. alumno Busca_mayor(alumno a[], int size);
  8. alumno Compara_nombre(alumno a[], int size);
  9. alumno Compara_dni(alumno a[], int size);
  10. alumno Compara_edad(alumno a[], int size);
  11. alumno Compara_calificacion(alumno a[], int size);
  12. int main(int argc, char *argv[]) {
  13. alumno *A=nullptr; int size;
  14. /*Carga del arreglo*/
  15. ....
  16. ....
  17. /*Ejemplo de seleccion de funcion*/
  18. switch(op){
  19. case 1:
  20. alumno aux=Compara_nombre(A,size);
  21. cout<<"El mayor es: "<<aux.nombre; //Solo es un ejemplo...
  22. case 2:
  23. case 3:
  24. case 4:
  25. default:
  26. }
  27.  
  28. return 0;
  29. }
  30. /*Como deberia usar esta funcion, no entiendo, si ya con las otras
  31. funciones ya puedo obtener el mayor de los alumnos, cual es la funcion que cumple?*/
  32. alumno Busca_mayor(alumno a[], int size, int *p){ //Como usaria el tercer argumento? no entiendo
  33.  
  34. }
  35. alumno Compara_nombre(alumno a[], int size){
  36. alumno aux;
  37. for(int i=0;i<size;i++) {
  38. if(a[i].nombre<a[i+1].nombre){
  39. aux=a[i+1];
  40. }
  41. }
  42. return aux;
  43. }
  44. alumno Compara_dni(alumno a[], int size){
  45. alumno aux;
  46. for(int i=0;i<size;i++) {
  47. if(a[i].dni<a[i+1].dni){
  48. aux=a[i+1];
  49. }
  50. }
  51. return aux;
  52. }
  53. alumno Compara_edad(alumno a[], int size){
  54. alumno aux;
  55. for(int i=0;i<size;i++) {
  56. if(a[i].edad<a[i+1].edad){
  57. aux=a[i+1];
  58. }
  59. }
  60. return aux;
  61. }
  62. alumno Compara_calificacion(alumno a[], int size){
  63. alumno aux;
  64. for(int i=0;i<size;i++) {
  65. if(a[i].calificacion<a[i+1].calificacion){
  66. aux=a[i+1];
  67. }
  68. }
  69. return aux;
  70. }
42  Programación / Programación C/C++ / Re: Cómo eliminar un elemento de un array dinámico - CONSULTA en: 12 Diciembre 2018, 15:51 pm
Gracias, pero quiero aprender a hacerlo yo mismo antes de usar funciones pre-hechas.
Hice este código, no funciona para eliminar, pero que tan errado estoy? Sigo sin entender.

Código
  1. int *Eliminar_repetidos(int *a, int size){
  2. int *aux2=nullptr;
  3. int contador=0;
  4. for(int i=0;i<size;i++) {
  5. if(a[i]==a[i+1]){
  6. contador++;
  7. }
  8. }
  9. for(int i=0;i<size-contador;i++) {
  10. aux2[i]=0;
  11. }
  12. aux2=new int [size-contador];
  13. int i=0;
  14. while(a[i]!=a[i+1] || i<size-contador){
  15. aux2[i]=a[i];
  16. i++;
  17. }
  18. delete [] a;
  19. return aux2;
  20. }
43  Programación / Programación C/C++ / Re: Cómo eliminar un elemento de un array dinámico - CONSULTA en: 11 Diciembre 2018, 22:47 pm
Si quieres resolver el no tener duplicados sin programarlo explícitamente, crea un set. Los sets solo almacenan valores únicos.


No sé qué es un set  :-(
44  Programación / Programación C/C++ / Re: Cómo eliminar un elemento de un array dinámico - CONSULTA en: 11 Diciembre 2018, 22:46 pm
Ver el código que tienes puede ayudar...

Aquí te dejo mi código, en éste tenía que crear un struc con dos punteros que apuntaran a cualquier par repetido y si no había, retornaba los dos punteros del struc con el valor nulo, sino, retornaba los valores. PD: Tenía que hacerlo dentro de una función.
Ahora bien, el siguiente ejercicio, me pedía que a esos valores repetidos lo elimine, teniendo así, un nuevo arreglo sin los datos repetidos. El tema es que no sé el cómo hacer eso, los ordené, pero hasta ahí llego  :-( No entiendo muy bien lo del array final y eso, me puedes dar un ejemplo simple?

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <iomanip>
  5. using namespace std;
  6. struct Apuntadores{
  7. int *a1=nullptr,*a2=nullptr;
  8. };
  9. void Acomodar_arreglo(int *a, int size);
  10. Apuntadores Buscar_repetidos(int *a, int size);
  11. int main(int argc, char *argv[]) {
  12. srand(time(0));
  13. int *p=nullptr, n;
  14. cout<<"Ingrese el tamanio del vector: "; cin>>n;
  15. p=new int [n];
  16. for(int i=0;i<n;i++) {
  17. p[i]=1+rand()%10;
  18. }
  19. for(int i=0;i<n;i++) {
  20. cout<<p[i]<<setw(2)<<" ";
  21. } cout<<endl;
  22. Acomodar_arreglo(p,n);
  23. for(int i=0;i<n;i++) {
  24. cout<<p[i]<<setw(2)<<" ";
  25. }
  26. cout<<endl;
  27. Apuntadores A=Buscar_repetidos(p,n);
  28. if(A.a1==nullptr && A.a2==nullptr){
  29. cout<<"No hay valores repetidos";
  30. }else{
  31. cout<<"Los valores repetidos son: "<<*(A.a1)<<" y "<<*(A.a2)<<endl;
  32.  
  33. delete [] p;
  34. return 0;
  35. }
  36.  
  37.  
  38. void Acomodar_arreglo(int *a, int size){
  39. int guardar;
  40. for(int i=0;i<size;i++) {
  41. for(int j=0;j<size;j++) {
  42. if(a[j]>=a[j+1]){
  43. guardar=a[j];
  44. a[j]=a[j+1];
  45. a[j+1]=guardar;
  46. }
  47. }
  48. }
  49.  
  50. }
  51. Apuntadores Buscar_repetidos(int *a, int size){
  52. Apuntadores A;
  53. for(int i=0;i<size;i++) {
  54. if(a[i]==a[i+1]){
  55. A.a1=a+i;
  56. A.a2=a+i+1;
  57. }
  58. }
  59. return A;
  60. }
45  Programación / Programación C/C++ / Cómo eliminar un elemento de un array dinámico - CONSULTA en: 11 Diciembre 2018, 21:26 pm
Buenas a todos, quería saber cómo podría eliminar un dato repetido en un arreglo dinámico, lo primero que hice fue ordenarlo de menor a mayor, para que los valores repetidos quedaran juntos, el tema es, cómo debería utilizar un nuevo puntero para que éste sólo copie los valores no repetidos.
Ya le busqué la vuelta,pero siempre me muestra los mismos valores, no quita los repetidos, tampoco se reduce mi nuevo vector.

46  Programación / Programación C/C++ / Re: Error lógico cuando compilo ejercicio - CONSULTA en: 11 Diciembre 2018, 20:51 pm

Sin embargo aunque el programa ya funciona no estás liberando la memoria. Tienes que liberar la memoria en dos ocasiones....
PD: Un array unidimensional se libera sin bucle <for>
Código
  1. delete [] array;


Colega, me ayudó un montón su explicación y ya con leer lo que puso Calgarys pude darme cuenta de dónde colocar los dos deletes incluso antes de que respondieras a mi consulta!!  ;D
Gracias!
47  Programación / Programación C/C++ / Re: Error lógico cuando compilo ejercicio - CONSULTA en: 11 Diciembre 2018, 20:42 pm
Para mí resulta interesante saber por qué pusiste esas líneas ahí en primer lugar.

Bueno, desde mi lógica fue así: puse el delete del puntero antes de la llamada de la función, porque pensaba que antes de hacer que apunte a un nuevo arreglo, que además, esta re-dimensionado, iba a dejar al puntero como si estuviese nulo y que así apuntara a la nueva dirección, ya que pensaba que mi puntero viejo, al tener un tamaño más pequeño no funcionaria, que solo tomaría la misma cantidad de valores y que por ende, al eliminarlo y hacer que apuntara a la nueva dirección re-dimensionada no habría inconvenientes. Por eso puse el delete antes de la invocación de la función.
Como veras, recién estoy aprendiendo esto, así que bueno, trato de razonar lo que estudio pero no siempre me resulta, pero con la ayuda de ustedes, que me dan la explicación de por qué cada cosa me termina de cerrar lo que estudié!  ;D
48  Programación / Programación C/C++ / Re: Error lógico cuando compilo ejercicio - CONSULTA en: 11 Diciembre 2018, 00:18 am
Buenas colega, me podrías explicar por qué funciona al hacer eso?
Gracias por responder!!!
49  Programación / Programación C/C++ / Error lógico cuando compilo ejercicio - CONSULTA en: 10 Diciembre 2018, 15:06 pm
Buenas a todos, les adjunto aquí el código que hice, tenía que re-dimensionar un puntero, tal que, al usar esa función mi puntero se modifique con su nuevo tamaño y siga manteniendo los valores antiguos más los nuevos.
Si me pueden explicar lo que estoy haciendo mal, sería de gran ayuda, así puedo entenderlo  ;D
Aquí el código:

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. using namespace std;
  5. int *Redimensionar(int *p,int c_adicionales, int _tam_de_p);
  6. int main(int argc, char *argv[]) {
  7. srand(time(0));
  8. int *x=nullptr,n;
  9. cout<<"ingrese el tamanio del arreglo"<<endl;
  10. cin>>n;
  11. x=new int [n];
  12. for(int i=0;i<n;i++) {
  13. x[i]=rand()%200;
  14. }
  15. for(int i=0;i<n;i++) {
  16. cout<<x[i]<<" ";
  17. }
  18. cout<<endl;
  19. for(int i=0;i<n+2;i++) {
  20. delete []x;
  21. }
  22. int ceros;
  23. cout<<"Ingrese la nueva cantidad: "; cin>>ceros;
  24. x=Redimensionar(x,ceros,n); //Por que me da basura en los dos primeros valores?
  25. for(int i=0;i<n+ceros;i++) {
  26. cout<<x[i]<<" ";
  27. }
  28. return 0;
  29. }
  30.  
  31.  
  32. int *Redimensionar(int *p, int c_adicionales, int _tam_de_p){
  33. int *aux=nullptr; int _tam=_tam_de_p+c_adicionales;
  34. aux=new int [_tam];
  35. for(int i=0;i<_tam_de_p;i++) {
  36. aux[i]=p[i];
  37. }
  38. for(int i=_tam_de_p+1;i<_tam;i++) {
  39. aux[i]=0;
  40. }
  41. return aux;
  42. }
50  Programación / Programación C/C++ / Re: Problemas para mostrar un vector lineal dinámico en: 10 Diciembre 2018, 01:13 am
Cuando escribes un mensaje encima del cuadro de texto hay un desplegable que pone "Código GeSHí". Ahí puedes elegir el lenguaje que quieras y te saldrán dos etiquetas en el cuadro de texto, cada una de ellas entre corchetes []. Tienes que poner tu código entre las dos etiquetas tal que: [ ] <tu código> [ ]. Puedes previsualizar el mensaje antes de publicarlo para ver si se ve dentro de un cuadro con diferente formato como este:
Código
  1. // asi se ve el codigo entre etiquetas GeSHi

Ya, gracias por la ayuda  ;D
Páginas: 1 2 3 4 [5] 6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines