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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 ... 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 [155] 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 ... 401
1541  Programación / Programación C/C++ / Re: Duda sobre vectores! en: 29 Diciembre 2015, 14:40 pm
Dividí el código en 2 partes, ahí las marqué con comentarios (los 2 for).

En la primera, solo sumamos todos los números. Pasaría de:
0 1 1 2
A:
0 0 2 2

En la segunda, movemos todos los números distintos de 0 (no vacíos), a la izquierda (en este caso; derecha si se apilan hacia la derecha).
Quedaría:
2 2 0 0

La segunda parte, acabo de ver, que tiene un error. Aquí al final te pongo el código final.

La segunda parte primero, la más rápida:
"temp" guarda la posición vacía en la que meteremos los números. Empieza por la primera casilla igual a 0. A partir de esa casilla, cuando encontramos un número diferente de 0 (una casilla no-vacía), lo intercambiamos con la posición vacía. por ejemplo, pasaría de:
0 0 2 2  (temp=0, i=2)
A:
2 0 0 2 (temp=1, i=2)

Y vamos a otro ciclo del bucle.


La primera parte, as casi lo mismo, pero al revés. Por cada casilla no-vacía desde la izquierda, buscamos la siguiente no-vacía. Si el número de la siguiente es el mismo (se pueden sumar), los sumamos, y eliminamos uno de ellos (el primero en este caso). Luego, cogemos el siguiente número, y repetimos.
En este código, temp guarda -1 mientras no se encuentra ningún número diferente de 0. Cuando encontramos uno, guardamos su posición en temp. Luego, al encontrar un segundo, comprobamos lo dicho anteriormente. En caso de que no sean iguales, establecemos temp a este último valor, y continuamos. Si son iguales, se suman, y temp lo volvemos a establecer a -1, hasta que encontremos el siguiente valor no-vacío.

Código
  1.    #include <iostream>
  2.  
  3.    int main(){
  4.     int arr[4] = {0,1,1,2};
  5.     int temp = -1;
  6.  
  7.     for(int i=0; i<4; i++){ // SUMAMOS LOS NÚMEROS IGUALES CONSECUTIVOS
  8.     if(temp!=-1){
  9.     if(arr[temp]==arr[i]){ // Encontrados dos consecutivos iguales
  10.     arr[temp] = 0; // Eliminamos uno
  11.     arr[i] *= 2; // Duplicamos el otro
  12.     temp = -1;
  13.     }else{
  14.     temp = i; // Si no son iguales, cogemos el último
  15.     }
  16.     }else if(arr[i]!=0){
  17.     temp = i;
  18.     }
  19.     }
  20.  
  21.     for(temp=0; temp<4; temp++) // AÑADIDO: Colocamos 'temp' al primer número no-vacío
  22.                if(arr[temp]!=0)
  23.                        break;
  24.        // AÑADIDO: 'i' empieza siendo uno más que 'temp'
  25.     for(int i=temp+1; i<4; i++) // COLOCAMOS TODOS LOS NÚMEROS AL PRINCIPIO
  26.     if(arr[i]!=0){
  27.     arr[temp++] = arr[i];
  28.     arr[i] = 0;
  29.     }
  30.  
  31.     for(int i=0; i<4; i++)
  32.     std::cout << arr[i] << " ";
  33.    }

Espero que lo entiendas así jaja
Si no, dime sin problema
1542  Foros Generales / Foro Libre / Re: ¿Hay alguien ahí fuera? en: 26 Diciembre 2015, 02:44 am
Interferencia.
1543  Programación / Programación C/C++ / Re: Creo que no reconoce <iostream> Eclipse Mars OSX en: 25 Diciembre 2015, 22:06 pm
Has colocado std:.cout o using namespace std; ?
1544  Foros Generales / Sugerencias y dudas sobre el Foro / Re: [Sugerencia] Dar votos a artículos/respuestas en: 25 Diciembre 2015, 16:50 pm
Es el foro el que te pide a ti un buen argumento para implementarlo. Yo no conozco una razón tal para implementarlo, ni has expuesto ninguna.
1545  Foros Generales / Sugerencias y dudas sobre el Foro / Re: [Sugerencia] Dar votos a artículos/respuestas en: 24 Diciembre 2015, 22:02 pm
Siendo un foro de esta índole, si crees que algo que se ha dicho es incorrecto, se comenta en un mensaje. Por lo demás, ¿qué hay que valorar?

En StackOverlofw por ejemplo, las valoraciones ayudan a encontrar la respuesta más correcta. Pero aquí el sistema no es ese.
1546  Programación / Programación C/C++ / Re: ¿Se puede añadir una funcion a string.h? en: 24 Diciembre 2015, 21:09 pm
¿Qué ocurre si el primer while sale por el conducto ordinario? (*str == 0)
Pues que se acabó la cadena y no s eha encontrado el delimitador.
Sin embargo, ignoras esa posibilidad, incrementas str, y te posiciones fuera de la cadena. Desde ahí, todo lo que hagas, puede dar lugar a error y es inesperado para el programador final.

E insisto, para incrementar un puntero, str++. El * sobra.
1547  Programación / Programación C/C++ / Re: ¿Se puede añadir una funcion a string.h? en: 24 Diciembre 2015, 20:21 pm
El while(*str) comprueba que str no sea '\0'.

Pero eso no soluciona ninguno de los problemas.

En la línea *str++;. Incrementas sin comprobar si llegaste a un caracter nulo. No sabes si saliste del bucle por caracter nulo, o si saliste por haber encontrado el delimitador.
Y a todo esto, no necesita el *str++.
1548  Programación / Programación C/C++ / Re: ¿Se puede añadir una funcion a string.h? en: 24 Diciembre 2015, 19:54 pm
Ten en cuenta que existe la función strtok.

A parte, en esa función das por hecho que el segundo y tercer argumento estarán llenos de caracteres nulos.
Además, utilizas como límite uint8_t. ¿Por qué? Son char*, no uint8_t*, tenlo en cuenta.
Luego, ¿qué ocurre si no encuentra el delimitador? Sin comprobar nada, incrementas el puntero, y empiezas a leer memoria que tal vez no te pertenezca.

Hicise la función pensando en el mejor de los casos. Piensa también en el peor de los casos (en cualqueira de ellos).

Las funciones de la librería estándar hacen exactamente lo que dicen. ¿Qué ocurriría si metieras esa función en la librería?

Está bien que quieras compartir tu librería, pero en ese caso, te recomendaría que publicases en, por ejemplo, github.
1549  Programación / Programación C/C++ / Re: Duda sobre vectores! en: 24 Diciembre 2015, 17:21 pm
Siendo 0 un vacío, supon una fila o columna así:
0 1 1 2
Si hay que apilarlos hacia la izquierda, harías algo como:
Código
  1. #include <iostream>
  2.  
  3. int main(){
  4. int arr[4] = {0,1,1,2};
  5. int temp = -1;
  6.  
  7. for(int i=0; i<4; i++){ // SUMAMOS LOS NÚMEROS IGUALES CONSECUTIVOS
  8. if(temp!=-1){
  9. if(arr[temp]==arr[i]){ // Encontrados dos consecutivos iguales
  10. arr[temp] = 0; // Eliminamos uno
  11. arr[i] *= 2; // Duplicamos el otro
  12. temp = -1;
  13. }else{
  14. temp = i; // Si no son iguales, cogemos el último
  15. }
  16. }else if(arr[i]!=0){
  17. temp = i;
  18. }
  19. }
  20.  
  21. temp = 0;
  22. for(int i=0; i<4; i++) // COLOCAMOS TODOS LOS NÚMEROS AL PRINCIPIO
  23. if(arr[i]!=0){
  24. arr[temp++] = arr[i];
  25. arr[i] = 0;
  26. }
  27.  
  28. for(int i=0; i<4; i++)
  29. std::cout << arr[i] << " ";
  30. }

Luego tendrás que saber hacia que lado se apila y todo eso. Eso ya queda de tu mano.
1550  Programación / Programación C/C++ / Re: Como hago que este modulo sea mas eficiente???? C++ en: 24 Diciembre 2015, 17:08 pm
Ni has explicado qué hace, ni para qué sirve, ni el nombre de la función es descriptivo.

Solo te puedo decir, que utilices un
Código
  1. switch(n.al[cont]){}
en vez de esos if.
Páginas: 1 ... 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 [155] 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 ... 401
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines