Dev - C++ - Contar cuantos ceros hay en una matriz

 
Vista:
Imágen de perfil de Dennis
Val: 141
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Contar cuantos ceros hay en una matriz

Publicado por Dennis (63 intervenciones) el 08/10/2020 14:31:35
Hola a todos y saludos.
Por la universidad tengo que hacer un ejercicio que tengo que contar cuantos ceros hay en una matriz, y la suma de todas sus filas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <iomanip>
 
using namespace std;
 
void ls(){
    system("cls");
}
 
int main(){
 
int arreglo[100][100], filas = 3, columnas = 3;
int arregloSumaFilas[100][100];
int contCeros = 0;
    for(int i = 0; i < filas; i++){
        for(int j = 0; j < columnas; j++){
            cout<<  "FILA[ " << i << " ] COLUMNA[ " << j << " ]" <<endl;
             cin>> arreglo[i][j];
                if(arreglo[i][j] == 0){
                    contCeros++;
            }
             arregloSumaFilas[i][0] += arreglo[i][j];
          ls();
        }
       ls();
    }
    cout<< "MATRIZ: \n";
    for(int i = 0; i < filas; i++){
        for(int j = 0; j < columnas; j++){
            cout<< setw(4) << arreglo[i][j] << " ";
          }
        cout<< endl;
    }
cout<< "-----------------------------------------------------------------\n";
    for(int i = 0; i < filas; i++){
        cout<< "SUMA TOTAL FILA " << i + 1 << ": " << arregloSumaFilas[i][0] <<endl;
    }
cout<< "-----------------------------------------------------------------\n";
    if(contCeros > 0){
    cout<< "HAY " << contCeros << " ELEMENTO(s) CERO(s) EN LA MATRIZ." <<endl;
    }else{
        cout<< "NO HAY CEROS EN LA MATRIZ" <<endl;
    }
getch();
}

El programa esta bien, pero lo que necesito es que si tienen otra forma de hacerlo mas eficiente me lo comenten.
Cualquier sugerencia se los agradezco...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Contar cuantos ceros hay en una matriz

Publicado por Nacho (181 intervenciones) el 08/10/2020 15:02:21
Cuando pones
1
2
for(int i = 0; i < filas; i++){
for(int j = 0; j < columnas; j++){
dejas al compilador que lleve toda la lógica de hallar la posición en memoria de cada elemento, y hace algo como esto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for (int i = 0; i < filas; i++) {
00E22F1A  mov         dword ptr [ebp-138C0h],0
00E22F24  jmp         mainMalo+85h (0E22F35h)
00E22F26  mov         eax,dword ptr [ebp-138C0h]
00E22F2C  add         eax,1
00E22F2F  mov         dword ptr [ebp-138C0h],eax
00E22F35  mov         eax,dword ptr [ebp-138C0h]
00E22F3B  cmp         eax,dword ptr [filas]
00E22F41  jge         mainMalo+1F3h (0E230A3h)
        for (int j = 0; j < columnas; j++) {
00E22F47  mov         dword ptr [ebp-138CCh],0
00E22F51  jmp         mainMalo+0B2h (0E22F62h)
00E22F53  mov         eax,dword ptr [ebp-138CCh]
00E22F59  add         eax,1
00E22F5C  mov         dword ptr [ebp-138CCh],eax
00E22F62  mov         eax,dword ptr [ebp-138CCh]
00E22F68  cmp         eax,dword ptr [columnas]
00E22F6E  jge         mainMalo+1E9h (0E23099h)

Como esa matriz no deja de ser un bloque de memoria todo seguido es mucho más óptimo tratarla como eso y llevar tú la lógica de cada fila y columna, que es muy sencilla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Matriz

Publicado por Rodrigo (539 intervenciones) el 08/10/2020 15:39:52
Optimiza la memoria que usas para resolver el problema y remueve el uso de una dimension que no usas:
Tu arregloSumaFilas deberia ser un vector/arreglo de 1 dimension. Elimina 1 dimension, y quita el [0] que usas siempre que interviene ese arreglo ahora.

Por otro lado, la matriz deberia tener tantas filas como el valor de la variable filas y tantas columnas como la variable columnas.

Y ahora que lo verbalizo: filas y columnas deberia ser constantes, no variables.

Cuando sumas las filas, deberias asegurarte que la suma parte en 0.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar