nesito ayuda con este otro problema plox, para acabar con el mal de mordor

Iniciado por LARANARENElol, 17 Noviembre 2018, 21:30 PM

0 Miembros y 1 Visitante están viendo este tema.

LARANARENElol

el problema es este:
1. Elaborar un programa que calcule e imprima el promedio y una serie de N números a partir del 1,
exceptuando los múltiplos de X. Para imprimir la serie de números, deberá usarse función que
reciba parámetros. El programa se repetirá las veces que el usuario desee.
Por ejemplo si N =20 y X = 7, el programa imprimirá:
1 2 3 4 5 6 8 9 10 11 12 13 15 16 17 18 19 20 22 23
El promedio es 11.7
Otro ejemplo sería si N =5 y X = 2, el programa imprimirá:
1 3 5 7 9
El promedio es 5

y lo que echo es esto:


#include<stdio.h>
#include<stdlib.h>
void funcionacosadeldiablo(int ,int);
void main()
{
int X,N;

printf("da el valor de numeros que quieres que sean promediados:\n");
scanf("%d",&N);
printf("da los multiplos que no quieres que se promedien:\n");
scanf("%d",&X);
funcionacosadeldiablo(X,N);
system("pause");
}

void funcionacosadeldiablo(int X,int N)
{
int i=0,S=0;
float prom,R=0;


do
{
if(N<=X)
printf("el valor del cual quieres que no aparescan no puedeb ser mas grande que el mismo numero que deseas");
else
{
for(i=1; i<=N; i++)

if(i!=i%X)
printf("%d ",i);
S++;
}
prom=i/S;

}while (i<=X);
R=prom+prom;
printf("El promedio es: %.2f",R);
}





solo me falta el promedio de los numeros impresos sumados por la cantidad de numeros
ejemplo: N=10 X=4, se imprimiria: 1 2 3 5 6 7 9 10, y quiero que sume esos numeros y los divida entre la cantidad de los mismos, esos numeros ya sumados dan 43 y entre los 8 que son deberia dar: 5.37 pero no da eso, ayuda

#include<stdio.h>
#include<stdlib.h>
void funcionacosadeldiablo(int ,int);
void main()
{
int X,N;

printf("da el valor de numeros que quieres que sean promediados:\n");
scanf("%d",&N);
printf("da los multiplos que no quieres que se promedien:\n");
scanf("%d",&X);
funcionacosadeldiablo(X,N);
system("pause");
}

void funcionacosadeldiablo(int X,int N)
{
int i=0,S=0;
float prom,R=0;


do
{
if(N<=X)
printf("el valor del cual quieres que no aparescan no puedeb ser mas grande que el mismo numero que deseas");

else
{
for(i=0; i<=N; i++)

if(i%X!=0)
printf("%d ",i);
S++;
}

}while (i<=X);

prom=i/S;
printf("El promedio es: %.2f",prom);
}


MOD: No hacer doble post. Etiquetas GeSHi.

Beginner Web

#1
Primero que nada necesitas un bucle para ir preguntando si el usuario quiere seguir averiguando los N Primeros valores no multiplos de X;
Y dentro de eso una variable j=1 que vaya incrementando sin parar.
Bien en ese bucle preguntas si j%X!=0 es verdadero, si lo es muestras por pantalla el valor de j que es la variable que no para de crecer e incrementas el valor de i en i+1 que es la que controlara que se impriman N numeros;
Ahora j se incrementa en +1, sin importar nada porque tiene que ir creciendo dentro del bucle y nada mas, bueno aqui te dejo un codigo en modo demostracion, la funcion la puedes hacer tu  ;-)

Código (cpp) [Seleccionar]
int i, j, contador, promedio, N, X;
char respuesta;
cout<<"Ingrese N: ";
cin>>N;
cout<<"Ingrese X: ";
cin>>X;
do{
promedio=0;
contador=0;
i=1;
j=1;
while(i<=N){
if(j%X!=0){
cout<<j<<endl;
promedio+=j;
contador++;
i++;
}
j++;
}
cout<<"Promedio: "<<promedio/contador<<endl;
cout<<"Continuar? S/N: ";
cin>>respuesta;
}while(respuesta=='s' || respuesta=='S')

7w7

K-YreX

He notado una ambigüedad en la pregunta, por eso voy a intentar aclararlo. Si introduces <N = 10> y <X = 4> tenemos varios resultados:
- 1 2 3 5 6 7 9 10 11 13 (es decir imprimir N números y que ninguno de ellos sea múltiplo de X)
- 1 2 3 5 6 7 9 (es decir imprimir desde 1 hasta N y que ninguno sea múltiplo de X)
Se nota a simple vista la diferencia, en el primer caso calcular el promedio es más fácil ya que siempre dividiremos la suma de la sucesión entre N. En cambio en el segundo caso tenemos que ver de esos N números cuántos se han imprimido al final para dividir la suma por ese número.

Para la solución a la primera situación sólo debemos contar que se ha impreso un elemento cuando este no sea múltiplo de X, y debemos de incrementar la variable que vamos imprimiendo siempre. El código quedaría algo así:
Código (cpp) [Seleccionar]

void sucesion(int multiplo, int repeticiones){
int contador = 0, elemento = 1;
float suma, promedio;
while(contador < repeticiones){
if(elemento % multiplo != 0){
printf("%d  ", elemento);
suma += elemento;
contador++;
}
elemento++;
}
promedio = suma / repeticiones; // o (promedio = suma / contador) porque (contador == repeticiones)
printf("\nEl promedio de la sucesion es: %.2f \n", promedio);
}


Para la segunda solución debemos de contabilizar cada iteración, no sólo las que no sean múltiplo de X. Pero en este caso debemos llevar una cuenta aparte de cuántos dígitos hemos impreso para calcular el promedio. El código sería algo así:
Código (cpp) [Seleccionar]

void sucesion(int multiplo, int limite){
int contador = 0;
float suma, promedio;
for(int elemento = 1; elemento <= limite; elemento++){
if(elemento % multiplo != 0){
printf("%d  ", elemento);
suma += elemento;
contador++;
}
}
promedio = suma / contador; // (promedio = suma / limite) es incorrecto (contador < limite)
printf("\nEl promedio de la sucesion es: %.2f \n", promedio);
}


Y ahora un par de consejos para el futuro:
- Es recomendable usar nombres de variables que ayuden a comprender su utilidad. Nota la diferencia entre <repeticiones> código 1 y <limite> código 2.
- A no ser que sea tarea estudiantil y te obliguen a usar la llamada al sistema <system("pause")> hay alternativas mejores, para más información https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Aparte para evitar la situación de que N < X podrías hacer uso de un filtro:
Código (cpp) [Seleccionar]

int repeticiones, multiplo;
do{
printf("Introduce el numero de valores para la sucesion: ");
scanf("%d", &repeticiones);
printf("Introduce el numero cuyos multiplos no deben aparecer en la sucesion: ");
scanf("%d", &multiplo);
} while(repeticiones < multiplo);
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;