TransWikia.com

Promedio de cada fila en lenguaje c

Stack Overflow en español Asked by Fragmentado on November 13, 2021

Me mandan a realizar un código en Lenguaje C que dice:

En una línea de taxis la cual trabaja de lunes a domingo, existen 6 >taxistas, se necesita llevar el control de las carreras que hace cada taxista >cada día, para ello se manejan los datos en una matriz y hacer lo siguiente:

  • Cargar de valores la matriz
  • Contar cuántas veces no se hizo carrera
  • Sacar promedio de carreras por semana

Realizo la matriz pero no sé cómo contar los 0 ni el promedio semanal, puedo sacar el promedio del mes pero no por semana igual con los 0.

#include<locale.h>
#include<stdio.h>

int main(){
    setlocale(LC_CTYPE, "Spanish");
    
    int matriz[6][7], fila, columna, cont=0;
    float prom;
    
    for(fila=0; fila<6; fila++){
        for(columna=0; columna<7; columna++){
            printf("Taxista %d, Día de la semana %d, digite las carreras hechas: ", fila+1, columna+1);
            scanf("%d", &matriz[fila][columna]);
                    
            if(matriz[fila][columna]<1){   //Para ir contando los 0
                cont=cont+1;
            }
        }
    }
    
    
    printf("nn");
    
    
    for(fila=0; fila<6; fila++){   //Para mostrar todo lo que se ingresó a la matriz
        for(columna=0; columna<7; columna++){
            printf("%d  ", matriz[fila][columna]);
        }
        printf("n");
    }
    
    printf("nEn total no se hicieron %i carreras", cont);
    
    return 0;
}

One Answer

no sé cómo contar los 0

Los pasos son sencillos:

  • Declara una variable entera que usarás para llevar la cuenta
  • Itera por la matriz
  • En cada iteración, comprueba el valor de la celda, si es 0, incrementas el contador

Dicho con código:

for( int taxista=0; taxista<6; taxista++ )
{
  int total = 0;
  for( int dia=0; dia<7; dia++ )
  {
    total += (matriz[taxista][dia] == 0); // <<--- 1
  }
  printf("El taxista %d no hizo carreras durante %d diasn", taxista, total);
}

Respecto al comentario que he puesto en el código:

total += (matriz[taxista][dia] == 0); // <<--- 1

Lo que hacemos aquí es aprovechar una característica del lenguaje. Las operaciones booleanas generan un valor entero que puede valer 0 (falso) o 1 (verdadero). Como nos interesa conocer el total de verdaderos, aprovechamos ese 1 para ir llevando el conteo.

puedo sacar el promedio del mes pero no por semana igual con los 0

Esto que dices es mentira por tres razones:

  • No tienes los datos del mes, luego dificilmente vas a poder calcular el promedio de un mes
  • El promedio de un mes, de poder calcularse, incorporaría los 0 que dices que te dan problemas en el promedio semanal... si puedes con el del mes, el semanal es igual pero con menos días
  • Los promedios son insensibles a los 0...

ni el promedio semanal

El promedio se calcula así:

  • Declara una variable entera que usarás de acumulador
  • Itera por la matriz
  • En cada iteración, acumula en la variable el valor de la celda
  • Una vez has terminado las iteraciones, divide el valor del acumulador entre el número total de valores (en este caso 7).

Es decir, si un taxista presenta los siguientes valores:

5 0 3 7 0 0 9

El promedio sería:

(5 + 0 + 3 + 7 + 0 + 0 + 9) / 7 = 3

Espera... ¿y no da decimales?

Para obtener un resultado con decimales tienes que usar un tipo de dato que sea capaz de almacenar decimales (y no, int no vale). Una operación entre dos int descarta automáticamente cualquier decimal que se pudiese generar. Tienes que promocionar alguno de los valores involucrados en la operación a un tipo decimal para que la operación te devuelva decimales:

int a = 5;
int b = 2;

printf("%d %f", a/b, a/(float)b);

¿Y no pones código?

En este caso no, lo siento. Tu comentario respecto a los promedios me ha sonado a "me gustaría que alguien me hiciese la tarea" y yo, si quieres, te hago los deberes... pero entonces te tendría que cobrar por ello ya que te estaría dedicando mi tiempo en exclusiva a ti en vez de escribir respuestas que le sirviesen a más gente.

Answered by eferion on November 13, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP