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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con sintaxis For
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con sintaxis For  (Leído 2,899 veces)
oq.JULIO.po

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Ayuda con sintaxis For
« en: 25 Abril 2018, 06:40 am »

Hola!, tengo que hacer un programa que sume los múltiplos de 3 que haya contenidos en un número dado por el usuario.
Si digito un 9 la suma de sus múltiplos debería dar 3+6+9=18

Lo que pasa es que no sé si estoy ingresando bien la sintaxis del for...

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4.  
  5. {
  6.  
  7. int n,suma;
  8.  
  9. do {
  10.  
  11. printf("Ingrese un numero igual o mayor que 3...");
  12. scanf("%d",&n);
  13.  
  14. } while(n<=3);
  15.  
  16. suma=0;
  17.  
  18.  
  19. for (n==n;n==3;n-=1)
  20. {
  21. if(n%3==0)
  22. {
  23. suma+=n;
  24.  
  25.  
  26.  
  27. }
  28. else (n!=3);{ n-=1;}
  29.  
  30. }
  31.  
  32. printf("La suma de los multiplos de 3 es : %d", suma);
  33. return 0;
  34. }
  35.  


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex


« Última modificación: 25 Abril 2018, 06:49 am por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Ayuda con sintaxis For
« Respuesta #1 en: 25 Abril 2018, 06:56 am »

primero que nada
Código:
n==n

no hace nada... eso es una comparación que retorna verdadero

por otro lado, el for se ejecutará siempre y cuando

Código:
n==3

es decir, si n no es 3 no funciona...

te recomiendo la forma de hacer esto mejor es

Código:
for(;n%3==0;n/=3){
    suma es suma mas n  
}

puede ser una forma extrana XD pero tiene sentido...

primero, no hay primer valor en el for porque no importa..., el for se repetirá siempre que n sea multiplo de 3 (implica que tiene multiplos de 3) y avanzará dividiendo n entre 3 XD

pruebalo bien XD es de madrugada no he dormido bien y lo hice sin probar XD

por cierto... no resto 1 o busco valores porque por teoría de matemática los productos son comutativos... así que no importa el orden de los factores el producto es igual... es decir... 2*3*3*7*11 se podrá dividir entre cualquiera de sus factores sin importar como fue multiplicado


« Última modificación: 25 Abril 2018, 06:59 am por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
JPS

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Ayuda con sintaxis For
« Respuesta #2 en: 26 Abril 2018, 00:37 am »

Yo tb soy nuevo en esto.

Por lo poco que sé el for se utiliza para recorrer intervalos usando ciclos, de 0 a n (ascendente), o de n a 0 (descendente). Estos intervalos se pueden recorrer de ciclo a ciclo con i++ o i-- o la progresión que le quieras poner(x+=2 para ir saltando de dos en dos por ejemplo), sea ascendente o descendente según el propósito que le quieras dar.

Por ejemplo de 0 a n (ascendente) sería así, siendo n=5:
Código:
...
for (int i=0;i<=5;i++) {printf("Ciclo %i\n",i);
...
Imprimiría 5 ciclos empezando desde cero:
...
Ciclo 0
Ciclo 1
Ciclo 2
Ciclo 3
Ciclo 4
...

3 a n (descendente) sería así, siendo n=-5:
Código:
...
for (int i=3;i>=-5;i--) {printf("Ciclo %i\n",i);
...
Imprimiría 8 ciclos empezando desde 3:
...
Ciclo 3
Ciclo 2
Ciclo 1
Ciclo 0
Ciclo -1
Ciclo -2
Ciclo -3
Ciclo -4
...

Para el uso de vectores se usa un for desde 0 (principio del vector) hasta n (final del vector).

Para el uso de matrices se usan dos for anidados. Uno usa i para recorrer el intervalo de las filas (primera dimension (un simple vector)) y el otro usa j para recorrer el intervalo de las columnas (segunda dimensión).


te aconsejo ver este curso en youtube: https://www.youtube.com/watch?v=hZXFl4n6854&list=PLWtYZ2ejMVJmUTNE2QVaCd1y_6GslOeZ6&index=33

Ánimo, no desesperes y si ves que algo se te olvida anótalo en una libreta.
En línea

oq.JULIO.po

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ayuda con sintaxis For
« Respuesta #3 en: 26 Abril 2018, 02:28 am »

Okok muchas gracias a ambos, y si quisiera que se inicializara desde el valor de la variable "n" dada por el usuario,y termine hasta que sea igual a 3?
En línea

dijsktra

Desconectado Desconectado

Mensajes: 110


Mr Edsger Dijsktra (Tribute to)


Ver Perfil
Re: Ayuda con sintaxis For
« Respuesta #4 en: 27 Abril 2018, 14:57 pm »

Hola!

... que haya contenidos en un número dado por el usuario.
Si digito un 9 la suma de sus múltiplos debería dar 3+6+9=18

Yo diría mejor

 contenidos en un rango empezando desde 3 hasta un número (mayor o igual que 3) dado por el usuario.


La sintaxis de la instrucción de control "for", a no dudarlo, una de las señales más características del lenguaje C, sobretodo porque es tan versátil que su expresividad es equivalente a la de la instrucción "while"...
Esto no era así en otros lenguajes de su época, como el mítico Pascal, en el que se usaba como azucar sintáctico de una construcción while particular (donde había una variable  contadora "n", que se comparaba contra una expresión "n=e(...)" y se incrementaba o disminuía  en un valor constante 1,2...)

Tiene 4 partes
Código
  1. for (init; B ; step) body
que vienen a coincidir con lo que en algoritmia clásica se conoce como

  • init : donde se dan valores a las variables al principio
  • B : guarda que determina cuándo termina su ejecución. (Después del init y del step en segundas vueltas)
  • step : incremento de variable, para que el bucle progrese hacia su terminación (después del body)
  • body: aproxima el cómputo parcial a la solución definitivadespues de evaluar la guarda y antes de step

En el cuerpo del bucle pueden aparecer instrucciones como break; o continue, y aunque muy útiles en programación se sistemas y en el mundo real, en algoritmia clásica son el "patito feo" que rompe la llamada "programación estructurada" o "composicional"... Pero esto es otro tema aparte..... C no fue hecho para estudiar algoritmia, sino para la programación de sistemas operativos, y es ahí donde encuentran todo su valor...


Ahi va una solución a tu problema.
Los comentarios tienen más importancia en cursos avanzados de algoritmia. Por el momento fífate en la rutina mult3. Después intenta programarla en sentido descendente (con nn--...)


Código
  1. #include <stdio.h>
  2. #include <assert.h>
  3.  
  4.  
  5. /*
  6.   P : M >= 3
  7.   Q : c = sum i : 3 <= i <= M and (i%3==0) : i
  8.  
  9.   I : Q[M/n] and 3 <= n <= M
  10.   B : n < M
  11.  
  12.   Quota (n) = M - n >= 0
  13.   Step : n = n + 1
  14.   Restore : c = c + (n+1)*\chi((n+1)%3==0)
  15.  
  16. */
  17.  
  18. #define DEBUG
  19.  
  20. unsigned int mult3(const unsigned int N)
  21. {
  22.  assert(N>=3);
  23.  unsigned int n,c;
  24. #ifdef DEBUG
  25.      printf("%d ",3);
  26. #endif
  27.  for(n=c=3;n<N;n++)
  28.    {
  29.      if (((n+1)%3==0)) c+=(n+1);
  30. #ifdef DEBUG
  31.      if ((n+1)%3==0) printf("%d ",n+1);
  32. #endif
  33.    }
  34.  return c;
  35. }
  36.  
  37.  
  38.  
  39. int main()
  40. {
  41.  unsigned int M;
  42.  int e;
  43.  for ( ; (e=scanf("%u",&M))==1;)
  44.    printf(" --> %u\n",mult3(M));
  45.  if (e!=EOF)
  46.    {
  47.      printf("Not a integer");
  48.      return -1;
  49.    }
  50.  return 0;
  51. }
  52.  
  53.  
  54.  


La salida que da el programa es:

Código:
3
3  --> 3
4
3  --> 3
5
3  --> 3
6
3 6  --> 9
7
3 6  --> 9
8
3 6  --> 9
9
3 6 9  --> 18
10
3 6 9  --> 18




« Última modificación: 27 Abril 2018, 22:32 pm por dijsktra » En línea

Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)
dijsktra

Desconectado Desconectado

Mensajes: 110


Mr Edsger Dijsktra (Tribute to)


Ver Perfil
Re: Ayuda con sintaxis For
« Respuesta #5 en: 27 Abril 2018, 22:58 pm »

Okok muchas gracias a ambos, y si quisiera que se inicializara desde el valor de la variable "n" dada por el usuario,y termine hasta que sea igual a 3?

Un poco más raro... pero igual de bonito.

La expresión

Código
  1. c=(N%3==0)*N

se evalúa de la siguiente manera: Si N es divisible entre 3, entonces (N%3==0) es 1, y entonces c, vale  1*N . En otro caso, pues 0.

Código
  1. #include <stdio.h>
  2. #include <assert.h>
  3.  
  4.  
  5. /*
  6.   P : M >= 3
  7.   Q : c = sum i : 3 <= i <= M and (i%3==0) : i
  8.      
  9.   I : Q[M/n] and 3 <= n <= M
  10.   B : n > 3
  11.      
  12.   Quota (n) = n - 3 >= 0
  13.   Step : n = n - 1
  14.   Restore : c = c + (n-1)*\chi((n-1)%3==0)
  15.      
  16. */
  17.  
  18. #define DEBUG
  19.  
  20. unsigned int mult3(const unsigned int N)
  21. {
  22.  assert(N>=3);
  23.  unsigned int n,c;
  24.  for(n=N,c=(N%3==0)*N;n>3;n--)
  25.    {
  26. #ifdef DEBUG
  27.      if (n%3==0) printf("%d ",n);
  28. #endif
  29.      if (((n-1)%3==0)) c+=(n-1);
  30.    }
  31. #ifdef DEBUG
  32.      printf("%d ",3);
  33. #endif
  34.  return c;
  35. }
  36.  
  37.  
  38.  
  39. int main()
  40. {
  41.  unsigned int M;
  42.  int e;
  43.  for ( ; (e=scanf("%u",&M))==1;)
  44.    printf(" --> %u\n",mult3(M));
  45.  if (e!=EOF)
  46.    {
  47.      printf("Not a integer");
  48.      return -1;
  49.    }
  50.  return 0;
  51. }

La salida del programa da
Código:
3
3  --> 3
4
3  --> 3
5
3  --> 3
6
6 3  --> 9
7
6 3  --> 9
8
6 3  --> 9
9
9 6 3  --> 18
10
9 6 3  --> 18
« Última modificación: 30 Abril 2018, 15:25 pm por dijsktra » En línea

Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con error de sintaxis en formulario PHP
PHP
oscarj24 2 2,804 Último mensaje 8 Junio 2010, 20:05 pm
por oscarj24
Ayuda con c, para final de SIntaxis !
Programación C/C++
mariaorlando0922 2 2,426 Último mensaje 14 Febrero 2013, 21:47 pm
por durasno
ayuda en la sintaxis Programas en Batch/bat
Scripting
XXXNEUROXXX 1 4,187 Último mensaje 9 Julio 2013, 23:28 pm
por Eleкtro
ayuda con sintaxis en un modulo
Programación Visual Basic
rapbyone 4 2,474 Último mensaje 23 Septiembre 2014, 09:15 am
por rapbyone
ayuda con error de sintaxis
Bases de Datos
crisoof 0 2,292 Último mensaje 6 Abril 2016, 16:01 pm
por crisoof
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines