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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con un programailla de sumas aritmeticas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con un programailla de sumas aritmeticas  (Leído 3,925 veces)
7hongo7

Desconectado Desconectado

Mensajes: 27



Ver Perfil
Ayuda con un programailla de sumas aritmeticas
« en: 13 Febrero 2013, 16:29 pm »

Hola bueno soy nuevo aqui y no se muy bien programar :rolleyes: :rolleyes:, mi problema es el siguiente;tengo que hacer un programa que imprime en pantalla el numero que cae el dia de la semana osea del 1 al 7 ingresando Dia,Mes,Año.
 Mi codigo es este pero el problema es que cuando cambio de año me imprime mal, no cabe decir que el dia es de 57 dias son 12 meses y el año inicia desde el 2001.

int main()
{
    int D=0,M=0,A=0,S;
    scanf("%d %d %d",&D,&M,&A);
    S=(D+M+A)%7;
    if((D+M+A)%7==0)
    {
        S=7;
    }
    printf("%d",S);
    return 0;
}

Para dar un ejemplo 1 1 2001 es 1 8 2001 es 1 pero cuando cambia de año osea 1 1 2002 imprime 2 y deberia imprimir 6 porque el 57 12 2001 es 5.
 Muchas gracias por su ayuda espero que me entiendan no soy bueno en esto jejejeje


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda con un programailla de sumas aritmeticas
« Respuesta #1 en: 13 Febrero 2013, 19:24 pm »

...............................tengo que hacer un programa que imprime en pantalla el numero que cae el dia de la semana osea del 1 al 7 ingresando Dia,Mes,Año.
 

Para tener el código no tienes más que mirarte este enlace:

http://es.wikipedia.org/wiki/Algoritmo_para_calcular_el_d%C3%ADa_de_la_semana


Saluditos!.

P.D: Por cierto ¿por qué le llamas al tema "programilla con sumas?. no indica nada, y lo de ayuda se sobreentiende.

Podías llamarle "entrar fecha y me dé día de la semana", es más explícito de tu problema.

Si tienes dudas no dudes  :P  en preguntar.  ;)


« Última modificación: 13 Febrero 2013, 23:08 pm por leosansan » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ayuda con un programailla de sumas aritmeticas
« Respuesta #2 en: 14 Febrero 2013, 02:25 am »

Otra opción es utilizar la función mktime (prototipo en <time.h>) para que sea esta la que calcule el día de la semana y año. Un ejemplo sencillo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int main(void)
  6. {
  7.   char *dia[] = {
  8.      "Domingo",
  9.      "Lunes",
  10.      "Martes",
  11.      "Miercoles",
  12.      "Jueves",
  13.      "Viernes",
  14.      "Sabado"
  15.   };
  16.   struct tm f = {0};
  17.  
  18.   srand((unsigned) time(NULL));
  19.   f.tm_year = 113;
  20.   f.tm_mon = rand() % 12;
  21.   f.tm_mday = 1 + rand() % 28;
  22.  
  23.   mktime(&f);
  24.   printf("2013/%d/%d ==> %s\n", 1 + f.tm_mon, f.tm_mday, dia[f.tm_wday]);
  25.  
  26.   return EXIT_SUCCESS;
  27. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
7hongo7

Desconectado Desconectado

Mensajes: 27



Ver Perfil
Re: Ayuda con un programailla de sumas aritmeticas
« Respuesta #3 en: 14 Febrero 2013, 05:45 am »

Muchas gracias a los dos me sirvio super bien los ejemplos muchas gracias!!!!!!!!!!!! ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda con un programailla de sumas aritmeticas
« Respuesta #4 en: 14 Febrero 2013, 14:56 pm »

Y según Wikipedia:

Código
  1. #include <stdio.h>
  2. #include<locale.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6.    setlocale(LC_ALL, "Spanish");
  7.    int dia_=0,dia_semana=0,M_=0,mes_,a=0;
  8.    int M[2][12] = {0,3,3,6,1,4,6,2,5,0,3,5,
  9.    0,3,4,0,2,5,0,3,6,1,4,6 };
  10.    char dia[7][10] = {"Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado"};
  11.    while (1){
  12.      printf ("Indique el  mes (1-12): ");
  13.      fflush (stdout);
  14.      scanf("%d",&mes_);
  15.      printf ("Indique el día del mes: ");
  16.      fflush (stdout);
  17.      scanf("%d",&dia_);
  18.      printf ("Indique el año: ");
  19.      fflush (stdout);
  20.      scanf("%d",&a);
  21.      if  (a%4 ==0 && a%100!=0 ||  (a%400==0))
  22.        M_=M[1][mes_-1];
  23.      else
  24.        M_=M[0][mes_-1];
  25.      dia_semana=((a-1)%7+((a-1)/4 - 3*(((a-1)/100)+1)/4)%7+M_+dia_%7)%7;
  26.       printf("\n%s  dia de la semana %d\n\n",dia[dia_semana],dia_semana);
  27.    }
  28.    return EXIT_SUCCESS;
  29. }
  30.  
  31.  

Saluditos!.
« Última modificación: 14 Febrero 2013, 16:29 pm por leosansan » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ayuda con un programailla de sumas aritmeticas
« Respuesta #5 en: 14 Febrero 2013, 17:32 pm »

Algunos comentarios:

* Los elementos de un array pueden inicializarse mediante una lista de valores, si cada elemento es a su vez un array (como es tu caso) se deben utilizar listas anidadas, de esta forma:
Código
  1. int M[2][12] = {
  2.   {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5},
  3.   {0, 3, 4, 0, 2, 5, 0, 3, 6, 1, 4, 6}
  4. };

* El operador lógico AND tiene mayor prioridad que el operador lógico OR, por ello en esta expresión los paréntesis son superfluos (con o sin ellos el resultado es el mismo):
Código
  1. a%4 ==0 && a%100!=0 ||  (a%400==0)

* El resultado de los mentados operadores es uno si se cumple la condición y cero en caso contrario, en base a ello si revisamos el condicional:
Código
  1. if (a%4 ==0 && a%100!=0 ||  (a%400==0))
  2.   M_=M[1][mes_-1];
  3. else
  4.   M_=M[0][mes_-1];
Este se puede reducir a:
Código
  1. M_ = M[a%4 == 0 && a%100 != 0 || a%400 == 0][mes_-1];
Y (al gusto de cada quien) se puede sustituir el uso del operador "==" por paréntesis y el operador de negación "!".

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda con un programailla de sumas aritmeticas
« Respuesta #6 en: 14 Febrero 2013, 22:57 pm »

Para quien nos "vea" parecería que mi código no funcionase correctamente, y todo lo contrario, hace lo que se le pide. así que sólo unos pequños comentarios, entre tú y yo:

Algunos comentarios:

* Los elementos de un array pueden inicializarse mediante una lista de valores, si cada elemento es a su vez un array (como es tu caso) se deben utilizar listas anidadas, de esta forma:
Código
  1. int M[2][12] = {
  2.   {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5},
  3.   {0, 3, 4, 0, 2, 5, 0, 3, 6, 1, 4, 6}
  4. }

Creo que aquí hablaríamos de "claridad", ya que "creo" que tan correcta es una como otra opción.
Por ejemplo, al declarar una matriz de tres por tres se me puede "apetecer" la primera o la segunda forma:


Código
  1. a[3][3]={1,2,3,4,5,6,7,8,9};
  2.  
  3. a[3][3]={{1,2,3},{4,5,6},{7,8,9};

No niego que la segunda es más ·visible" y menos expuesta a errores, pero será igual de válida que la primera.

Citar
* El operador lógico AND tiene mayor prioridad que el operador lógico OR, por ello en esta expresión los paréntesis son superfluos (con o sin ellos el resultado es el mismo):
Código
  1. a%4 ==0 && a%100!=0 ||  (a%400==0)


Superfluo no es sinónimo de mal, sino exceso de celo. Reconozco que en este caso peque del copy´pega de un código antiguo. No es que quiera disculpar ese "exceso", pero en general más vale pecar por exceso que por defecto, más estos códigos que yo al menos hago con cierta "alegría".


Citar
* El resultado de los mentados operadores es uno si se cumple la condición y cero en caso contrario, en base a ello si revisamos el condicional:]
Código
  1. if (a%4 ==0 && a%100!=0 ||  (a%400==0))
  2.   M_=M[1][mes_-1];
  3. else
  4.   M_=M[0][mes_-1];
Este se puede reducir a:
Código
  1. M_ = M[a%4 == 0 && a%100 != 0 || a%400 == 0][mes_-1];

Esto último es de veteranía. Aunque considero que el if-else es más "entendible" para quien propuso el tema, en virtud de lo que colgó, no dejo de reconocer que es algo a tener en cuenta.

Conclusión: gracias por las puntualizaciones, agudas como siempre y que me ayudan a mejorar hasta los detalles más nimios.

Saluditos!.
  :silbar:
En línea

7hongo7

Desconectado Desconectado

Mensajes: 27



Ver Perfil
Re: Ayuda con un programailla de sumas aritmeticas
« Respuesta #7 en: 17 Febrero 2013, 01:48 am »

Vientos "leosansan" me has ayudado con los codigosy me funcionan genial ;-) ;-) ;-) ;-) solamente que ahora tengo otra duda y es que como podría hacer lo mismo pero con una expresion aritmetica :huh: :huh: :huh: :huh: como me publicaste hace tiempo pero el problema es que esa formula ignora completamente el mes y no me imprime lo que requiero se desfasa por un dia el programa, muchas grax carnal la neta me estas ayudando muchisimo
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ayuda con un programailla de sumas aritmeticas
« Respuesta #8 en: 17 Febrero 2013, 18:01 pm »

Vientos "leosansan" me has ayudado con los codigosy me funcionan genial ;-) ;-) ;-) ;-)

Gracias, gracias.

Citar
solamente que ahora tengo otra duda y es que como podría hacer lo mismo pero con una expresion aritmetica :huh: :huh: :huh: :huh: como me publicaste hace tiempo pero el problema es que esa formula ignora completamente el mes y no me imprime lo que requiero se desfasa por un dia el programa, muchas grax carnal la neta me estas ayudando muchisimo

Lo que yo uso es una expresión aritmética, a diferencia de rir que usa funciones del sistema. Y si te fijas bien hace uso de la variable "mes_". Y el código no desfasa en un día. ¿O te estas refiriendo a otro código que has hecho tú o yo?. Aclaramelo please.

Saluditos!.
En línea

7hongo7

Desconectado Desconectado

Mensajes: 27



Ver Perfil
Re: Ayuda con un programailla de sumas aritmeticas
« Respuesta #9 en: 20 Febrero 2013, 16:07 pm »

Bueno no es que lleve otro código porque la neta no entiendo ese programa y según es el fácil  :o :o :o :o :o  jejejeje,  el problema que me da es que en la pagina que me diste de wikipedia copie la formula pero se desfasa  el mes en 1 dia osea cuando marco 1 1 2001 me marca 1 y eso esta bien pero cuando marco 1 2 2001 me vuelve a marcar 1 y me deberia de marcar 2 a eso me refiero en los demas con dias y años esta bien
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
4 operaciones aritmeticas en Java Eclipse
Java
Emili 4 9,459 Último mensaje 12 Octubre 2009, 07:48 am
por forerito
operaciones aritmeticas en JAVA ECLIPSE
Java
leliCabello 0 6,921 Último mensaje 12 Octubre 2009, 02:47 am
por leliCabello
[Source-Actualizacion 6] Operaciones aritmeticas con Hex, Oct, Binario y Decimal
Programación Visual Basic
BlackZeroX 1 2,349 Último mensaje 26 Septiembre 2010, 09:57 am
por VanHan
Reducir stack con expresiones aritméticas en prefix.
Programación C/C++
arctic_kooks 0 2,351 Último mensaje 27 Junio 2011, 03:01 am
por arctic_kooks
Operaciones aritmeticas de una ristra con recursividad
Java
Javator 4 3,533 Último mensaje 25 Marzo 2014, 23:22 pm
por 1mpuls0
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines