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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


  Mostrar Mensajes
Páginas: 1 ... 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 [98] 99 100 101 102
971  Programación / Programación C/C++ / Re: necesito ayuda en este rpograma, quiero que pregunte si quiero hacer otro correo en: 21 Noviembre 2018, 07:15 am
Primero decir que C no es mi fuerte, ya que programo más en C++ pero te comento:
- Por lo que he leído ahora mismo por ahí, las funciones de entrada de datos que usas son para especificar el tamaño máximo de la entrada, cosa que no haces. Por ejemplo <gets_s> debería recibir la variable donde quieres guardas el dato y el tamaño máximo. En ese caso te recomiendo usar <fgets> y sería tan simple como <fgets(cadena1, 10, stdin);> es decir guardar en cadena1 los 10 primeros caracteres cogidos de la entrada estándar.

- Segundo... Pero este trozo de código que sentido tiene?? :huh:
Código
  1. if(cadena1[11]>10){
  2. printf("no puede exceder 10 cartacteres, de nuevamente el nombre");
  3. }
  4. else{
  5. while(cadena1[11]>10);
  6. {
  7. // mas codigo
  8. }
Traduzco por si las moscas: si el caracter guardado en cadena1[11] es mayor que 10 (supongo que comparará en Ascii lo que tampoco tiene mucho sentido creo yo), mostramos por pantalla que no se puede exceder de 10 caracteres; sino (osea si cadena1[11] no es mayor que 10) mientras cadena1[11] sea mayor que 10 que haga el resto del código... Te das cuenta que es un sin sentido? :-\
PD: El while va sin ";". El do while sí va con ";". Aunque siga estando mal para futuros programas.

- Tercero: no repitas código (lo que se conoce como principio de una única vez). Si en ambos casos del switch acabas haciendo lo mismo, hazlo una vez hayas salido del switch y así sólo lo pones una vez.

- Cuarto: quieres repetir el programa? Aquí tienes un ejemplo para que lo adaptes.
Código
  1. char respuesta;
  2. do{
  3.    // codigo, mucho codigo
  4.    printf("Desea repetir el programa (s/n): ";
  5.    scanf("%c" &respuesta);
  6. } while(respuesta == 's' || respuesta == 'S');
PD: Los caracteres entre comillas simples, las cadenas de caracteres entre comillas dobles.

Edit: He estado probando a ver cómo podría hacer el programa y aunque he conseguido avanzar algo, no consigo que quede del todo correcto. El código que he implementado es el siguiente:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. const int SIZE_NAME = 10;
  6. const int SIZE_EMAIL = 30;
  7.  
  8. typedef enum{true = 1, false = 0} bool;
  9.  
  10. int main(){
  11. char name[SIZE_NAME+1];
  12. char hotmail[] = "@hotmail.com";
  13. char gmail[] = "@gmail.com";
  14. char finalEmail[SIZE_EMAIL];
  15. int option;
  16. char repeat;
  17. bool validEmail;
  18.  
  19. do{
  20. validEmail = true;
  21. //do{ // bucle para quitar los saltos de linea del buffer || getchar() del ultimo while
  22. strcpy(name, "");
  23. strcpy(finalEmail, "");
  24. system("clear");
  25. printf("Enter your name for the email: ");
  26. fgets(name, SIZE_NAME, stdin);
  27. printf("\n%lu\n", strlen(name));
  28. //} while(name[0] == '\n');
  29.  
  30. printf("Select an option:");
  31. printf("\n\t1. Hotmail");
  32. printf("\n\t2. Gmail");
  33. printf("\nOption: ");
  34. fscanf(stdin, "%d", &option); // opcion 1 para guardar opcion
  35. //scanf("%d", &option); // opcion 2 para guardar opcion
  36.  
  37. //printf("%s", finalEmail); // prueba
  38. //printf("%s", name); // prueba
  39. // esta funcion inserta la respuesta anterior antes de la nueva. Descomentar pruebas para verlo
  40. strncpy(finalEmail, name, strlen(name)-1);
  41. //printf("%s", finalEmail); // prueba
  42. switch(option){
  43. case 1:
  44. strncat(finalEmail, hotmail, strlen(hotmail));
  45. break;
  46. case 2:
  47. strncat(finalEmail, gmail, strlen(gmail));
  48. break;
  49. default:
  50. printf("\nThis option is invalid\n");
  51. validEmail = false;
  52. break;
  53. }
  54. if(validEmail){ // no se puede repetir programa si validEmail == false por errores en el buffer
  55. printf("\nYour email is: %s\n", finalEmail);
  56. printf("\nDo you want to repeat the program (y/n): ");
  57. do{ // bucle para evitar que el salto de linea del buffer nos impida elegir si repetir programa
  58. repeat = getchar();
  59. } while(repeat == '\n');
  60. }
  61. } while(validEmail && (repeat == 'y' || repeat == 'Y') && getchar()); // getchar() para eliminar un '\n' del buffer || do while inicial
  62. }

Lo que no consigo arreglar es que si introduces un correo y deseas escribir otro, si el segundo nombre es más corto que el primero se repite el primer nombre. Además si el segundo nombre no es más corto se añade el correo anterior y se concatena la nueva opción. Os pongo un ejemplo para que veáis a lo que me refiero:
nombre1: aaaaaa
opcion1: 1
email1: "aaaaaa@hotmail.com"

Hasta aquí todo bien pero ahora introducimos "y" para crear otro correo:
nombre2: bb
opcion2: 2
email2: "bbaaaa@hotmail.com@gmail.com"

No sé muy bien como solucionar esto. Si alguien puede echar un vistazo al código anterior y corregirme si me he equivocado en algo...
Dentro del propio código hay algunos comentarios sobre el porqué de algunas partes del código (he averiguado la línea en la que sucede ese error que he explicado antes y está señalado en el código).
Y por último me gustaría que el código quedase bien, es decir, si se pudiese arreglar el código sin añadir un montón de cálculos incomprensibles (no sé si me explico).

PD: Por este tipo de cosas me quedo con C++. Pero me gustaría conseguir resolver este programa :rolleyes:
972  Programación / .NET (C#, VB.NET, ASP) / Re: Matriz aleatoria en: 21 Noviembre 2018, 02:04 am
Resumiendo tu código sería:
1º Generar array de primos
2º Barajar los primos.
3º Asignarlos valores primos barajados al array bidimensional (si bastara un array unidimensional, el array primos una vez barajado se podría devolver, haciendo innecesario el punto 3º.
Yo había pensado generar el array de primos y en lugar de barajar el array y después asignarlo a cada posición de la matriz, asignar a cada posición de la matriz una posición aleatoria del array de primos (entre 0 y 23) y así no desordenas el array de primos.
973  Programación / .NET (C#, VB.NET, ASP) / Re: Matriz aleatoria en: 21 Noviembre 2018, 01:44 am
El objetivo del programa es generar una matriz de 6x4 con los primeros 24 numeros primos y que estos sean aleatorios.
Los 24 primeros números primos son estos: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89. Es decir, que no entiendo lo de "que estos sean aleatorios". Te refieres a tener esos 24 números y meterlos en la matriz desordenados?   
974  Programación / Programación C/C++ / Re: Operaciones entre posiciones de un entero en: 20 Noviembre 2018, 23:38 pm
Entonces tienes que hacer lo que te he comentado antes pero sin usar arrays, osea directamente suma cada dígito a un acumulador si la posición es par y a otro acumulador si es impar. Como pista tienes que usar los operadores </> (calcula el cociente de una división) y <%> (calcula el resto de una división entera) y usar algunas potencias de 10 para ir separando dígitos.
Ahora el programa te toca hacerlo a ti.
975  Programación / Programación C/C++ / Re: Operaciones entre posiciones de un entero en: 20 Noviembre 2018, 23:20 pm
Para ello tienes que descomponer el número. Puedes hacerlo con un algoritmo que va cogiendo cada cifra y metiéndola en un array o bien transformándolo en un string o cadena C para poder acceder a cada posición independientemente.
Si tienes alguna duda más pon tu código para ver lo que pretendes hacer exactamente.
976  Programación / .NET (C#, VB.NET, ASP) / Re: Matriz aleatoria en: 20 Noviembre 2018, 23:14 pm
No entiendo muy bien tu pregunta, si pudieras ser más claro con el objetivo del programa (con un ejemplo).
De todos modos si no puedes usar un <for> pero sí puedes usar un <while>... Aquí tienes como se transforma un <for> en un <while>:silbar::
Código
  1. // BUCLE FOR
  2. for(int i = 0; i < n; i++){
  3. // cuerpo del for
  4. }
  5.  
  6. // BUCLE WHILE
  7. int i = 0;
  8. while (i < n){
  9. // cuerpo del while
  10. i++;
  11. }
977  Programación / Programación C/C++ / Re: Arreglo funciones en: 20 Noviembre 2018, 23:05 pm
Se aprueba con 7, y yo tampoco sabia que con menos de 5 se aprobaba, tenias sueño lo se, asi te queria agarrar  ;-)
Cierto, fallo mío, he puesto el <if> al revés. Pero sí que es cierto que al menos en España a partir del 5 es un aprobado. No sé en qué lugares se aprueba a partir del 7. :huh:
978  Programación / Programación C/C++ / Re: Arreglo funciones en: 20 Noviembre 2018, 10:40 am
Lo veo bien. El único cambio que haría sería quitar el promedio de la estructura porque siempre debe depender de los parciales. Si se guarda como un dato se podría modificar y por tanto falsear. Si no existe se obliga a calcularlo cada vez que sea necesario y por tanto es una garantía más de que sea el que toca.
Cierto, se me olvidó comentarlo. Cuando hice el programa hice una función que recibiendo un alumno como parámetro te calcule la media en vez de guardar esta como un miembro. Además usé <double> en lugar de <int> tanto para las notas como para la media. Y también había pensado en comprobar que el id del alumno que estás guardando no esté repetido; para ello recorrer el array de alumnos que ya existen y comprobar sus id's con el nuevo.

Sin embargo creo que quien creó el post no debe de haber llegado a estudiar una <struct> o <class> porque de haberlo hecho este ejercicio sería muy sencillo de resolver.
Aquí es donde viene mi cuestión... De no hacerlo usando <struct> ni <class>:
Opción 1:
Código
  1. const int NUM_ALUMNOS = 5;
  2. const int NUM_NOTAS = 3;
  3. string nombres[NUM_ALUMNOS];
  4. int ids[NUM_ALUMNOS];
  5. double notas[NUM_ALUMNOS][NUM_NOTAS];

Opción 2:
Código
  1. const int NUM_NOTAS = 3;
  2. string alumno1, alumno2, ..., alumno5;
  3. int id1, id2, id3, id4, id5;
  4. double notas1[NUM_NOTAS], notas2[NUM_NOTAS],..., notas5[NUM_NOTAS];

Yo elegiría la primera porque es más general y haciendo una sola modificación puedes cambiar la cantidad de alumnos y notas/alumno. Sin embargo, creo que cuando yo empecé con estos ejercicios me habrían dicho que lo hiciese como la segunda ya que es más simple (aunque más limitada).
979  Programación / Programación C/C++ / Re: Error ld 1 returned status. Ayuda plox en: 20 Noviembre 2018, 09:34 am
Como programa funciona pero si estás interesado en la programación y quieres mejorar un poco ese código:
- Elimina <stdio.h>. No estás usando entradas/salidas de C, sino de C++.
- Elimina <conio.h> por favor. Y cómo uso <getchar()> ?:huh:. No lo uses, usa <cin.get()> para lo que no necesitas <conio.h>.
- Las funciones que no reciben parámetros en C++ no es necesario escribir <void> en los parámetros.
- No uses librerías acabadas en ".h" sino que empiecen por "c". Es decir: <stdlib.h> -> <cstdlib>y así con todas.
Y esto sin haber llegado a mirar el programa por dentro.
Si no te interesa y sólo quieres que el programa funciones, ya está, objetivo conseguido.
980  Programación / Programación C/C++ / Re: Arreglo funciones en: 20 Noviembre 2018, 09:16 am
Código
  1. typedef struct alumno{
  2. int id;
  3. string nombre_alumno;
  4. int primer_parcial;
  5. int segundo_parcial;
  6. int tercer_parcial;
  7. int promedio;
  8. };

Desde mi humilde opinión yo usaría un array para las notas. Pero bueno eso ya es cosa de generalizar el programa para meter más notas.

Código
  1. switch(a[i].promedio){
  2.    case 1 ... 6: cout<<"Desaprobado"<<endl;break;
  3.    case 7 ... 10: cout<<"Aprobado"<<endl;break;
  4. }
  5. }

Y aquí creo que es más fácil hacerlo con un <if> ya que las condiciones no van alternadas:
Código
  1. if(promedio < 5)
  2.    cout << "Aprobado" << endl;
  3. else
  4.    cout << "Suspenso" << endl;
Y... no sabía que hay quien considera el aprobado a partir del 7. :xD
Páginas: 1 ... 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 [98] 99 100 101 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines