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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17
51  Programación / Programación C/C++ / Re: Como planteariais este problema?( en C) en: 5 Noviembre 2012, 19:35 pm
Código:
Lo único que haces es intercambiar los valores cuando a[i-1] es mayor que a[i]

Ordenación por inserción:
Código
  1. void ord_ins(int v[], int n) {
  2.    int i,j,x;
  3.    for (i=1;i<n;i++) {
  4.        x = v[i];
  5.        j = i-1;
  6.        while ( (j>-1) && (v[j]>x) )
  7.            v[j+1] = v[j--];
  8.        v[j+1] = x;
  9.    }
  10. }

Ordenación por quicksort (mediana de 3). Teniendo en cuenta la macro UMBRAL:
Código
  1. void ord_ins(int v[], int n) {
  2.    int i,j,x;
  3.    for (i=1;i<n;i++) {
  4.        x = v[i];
  5.        j = i-1;
  6.        while ( (j>-1) && (v[j]>x) )
  7.            v[j+1] = v[j--];
  8.        v[j+1] = x;
  9.    }
  10. }
  11.  
  12. void intercambiar(int v[], int izq, int der) {
  13.    int t;
  14.    t = v[izq];
  15.    v[izq] = v[der];
  16.    v[der] = t;
  17. }
  18.  
  19. void mediana3 (int v[], int izq, int der) {
  20.    int k = (int)((izq+der)/2);
  21.    if ( v[k] > v[der] ) intercambiar(v, k, der);
  22.    if ( v[k] < v[izq] ) intercambiar(v, k, izq);
  23.    if ( v[k] > v[der] ) intercambiar(v, k, der);
  24. }
  25.  
  26. void quicksort(int v[], int n) {
  27.    void ordenarAux(int v[], int izq, int der) {
  28.        if ( izq+UMBRAL <= der ) {
  29.            mediana3(v,izq,der);
  30.            int pivote = v[izq];
  31.            int i = izq;
  32.            int j = der;
  33.            do {
  34.                do i++;
  35.                while ( v[i] < pivote );
  36.                do j--;
  37.                while ( v[j] > pivote );
  38.                intercambiar(v, i, j);
  39.            } while (j > i);
  40.            intercambiar(v,i,j);
  41.            intercambiar(v,izq,j);
  42.            ordenarAux(v,izq,j-1);
  43.            ordenarAux(v,j+1,der);
  44.        }
  45.    }
  46.    ordenarAux(v,0,n-1);
  47.    if ( UMBRAL == 1 ) ord_ins(v,n);
  48.  
  49. }

Ahí tienes dos algoritmos de ordenación en C. Los tengo a mano porque tengo que implementarlos y analizar su complejidad para una práctica en estos momentos.

Saludos.
52  Programación / Programación C/C++ / Re: Problemas con el vuelto en monedas en: 5 Noviembre 2012, 19:08 pm
No funciona por la precisión. :[

Siempre testea el valor de las variables así sabrás que pasa. O a couts o con gdb (por ejemplo)...

La solución está en que si tienes una cantidad inferior a .01 salgas del bucle.. O sea lo puedes hacer así:

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7.  
  8. float cantidad;
  9. float canta = 0;
  10. float cante = 0;
  11. float canti = 0;
  12. int e = 0;
  13. int f = 0;
  14. int g = 0;
  15. int h = 0;
  16. cout << "escribe la cantidad" << endl;
  17. cin >> cantidad;
  18. while(cantidad > 0)
  19. {
  20.    if(cantidad >= 0.25){
  21.        cantidad -= 0.25;
  22.        e++;
  23.    }
  24. else if(cantidad >= 0.10){
  25.     cantidad -= 0.10;
  26.     f++;
  27.    }
  28. else if(cantidad >= 0.05){
  29.     cantidad -= 0.05;
  30.     g++;
  31.    }
  32. else if(cantidad >= 0.01){
  33.     cantidad -= 0.01;
  34.     h++;
  35.    }
  36. else {
  37.    cantidad = -1;
  38.    h++;
  39.    }
  40. }
  41.  
  42. cout << "de 0.25 = " << e << endl;
  43. cout << "de 0.10 = " << f << endl;
  44. cout << "de 0.05 = " << g << endl;
  45. cout << "de 0.01 = " << h << endl;
  46. }
  47.  

¿

float canta = 0;
float cante = 0;
float canti = 0;

?
53  Programación / Programación C/C++ / Re: Problemas con el vuelto en monedas en: 5 Noviembre 2012, 17:36 pm
No he leído mucho pero el error creo que está aquí:

Código
  1. while(cantidad != 0)

Cantidad debe ser mayor o igual a 0. Nunca vas a tener cantidades negativas.

Como tú dices, si tienes 1.4 y vas restando .25, llegará un momento que saltes de un valor > 0 a otro valor < 0 entonces nunca será igual a 0 y el bucle se hará infinito.

Por tanto:

Código
  1. while(cantidad > 0)

Edito: debe ser mayor que 0 para que no se haga ciclo infinito.
54  Programación / Programación C/C++ / Re: Como planteariais este problema?( en C) en: 5 Noviembre 2012, 17:30 pm
La manera más sencilla de pensar es lo siguiente:

Creas una función de máximo y declaras una variable struct con dos campos, x e y de tipo int o simplemente dos variables x e y de tipo int.

x = maximo(vector[0..n-1]); // máximo de todos
y = maximo(vector[0..n-2]); // segundo máximo

En el segundo vector, no puede estar x.

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

Si utilizas MergeSort, HeapSort o QuickSort (por ejemplo) sí sería buena idea ordenarlos.

Si no, puedes usar mi método que también vale.
55  Programación / Programación C/C++ / Re: Problema con variables puntero en: 5 Noviembre 2012, 17:26 pm
Esa operacion:
Código
  1. *sum += a[i];
Si se encuentra en el primer mensaje pero oxi12pek no utilizo las etiquetas de código (debería) y por eso en su lugar aparece el texto en cursiva.

Un saludo

Toda la razón. xD
56  Programación / Programación C/C++ / Re: Problema con variables puntero en: 5 Noviembre 2012, 16:59 pm
Y porque tengo que inicializar y??? No lo veo claro.

O inicializas y o inicializas *sum dentro de la función.

Por que si no el la primera suma harías

sum = basura + a[0]

Porque y/*sum inicialmente tiene un valor basura, no tiene por qué ser 0.
57  Programación / Programación C/C++ / Re: Problema con variables puntero en: 5 Noviembre 2012, 16:48 pm
Código
  1. #include <stdio.h>
  2. void avg_sum(double a[],int n,double *avg, double *sum)
  3.  {
  4.  int i;
  5.  
  6.  *sum = 0;
  7.  
  8.  for(i=0;i<n;i++) *sum+=a[i];
  9.  *avg=(*sum/n);
  10.  }
  11.  
  12. int main(void)
  13. {
  14.  double A[]={1,2,3,4,5,6.6,7.7,88.8,1,4},x,y;
  15.  int j=10;
  16.  
  17.  avg_sum(A,j,&x,&y);
  18.  printf("Suma total del array: %.2f\n",y);
  19.  printf("Promedio del array: %.2f\n",x);
  20. }

También faltaba indexar el array de doubles.
58  Programación / Programación C/C++ / Re: que pasa con conio.h?? en: 5 Noviembre 2012, 16:28 pm
Si C::B es livianito (respecto a las opciones que trae) y es un buen IDE. El problema es que si tienes que compilar un proyecto en un equipo que no hay un IDE que lo haga fácil pues siempre es bueno crear makefiles para compilar rápido en cualquier lugar.
59  Programación / Programación C/C++ / Re: Ayuda Con progrmacion en SCILAB (muy parecido a C) en: 5 Noviembre 2012, 16:09 pm
Aquí un manual de SCILAB en español. Por el medio-final tienes las estructuras de control de flujo (if-then-else y ciclos...), funciones, etc, etc.

http://www.google.es/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CDMQFjAC&url=http%3A%2F%2Fdocencia-eupt.unizar.es%2Fctmedra%2Fmanual_scilab.pdf&ei=AdaXUMqkJpHltQbX0oCoBA&usg=AFQjCNFUfhX_C3sJa-wT31AoHUROQ8DbcQ&sig2=_36WuPWqZlBB-MCX0WJmcg&cad=rja
60  Programación / Programación C/C++ / Re: [C][?]Como determinar que imprima ciertos caracteres en: 5 Noviembre 2012, 16:02 pm
El problema del ciclo de HRSLASH es la comprobación del if en cada ciclo. El código es correcto y si tu pregunta era como saltar esos números pues con el if perfecto.

En este caso el testeo del if no importa demasiado porque son 43 iteraciones del for, pero si tuvieras 5 millones de iteraciones sí tendría más importancia.
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines