Dev - C++ - Problema con arreglos. Impedir repetir un número

 
Vista:
sin imagen de perfil
Val: 9
Ha aumentado su posición en 2 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema con arreglos. Impedir repetir un número

Publicado por Antonia (5 intervenciones) el 07/09/2020 16:30:41
Este es lo que llevo, me falta poner una función que impida que el usuario ingrese el mismo número y también debo mencionar cuáles son los números que están en las posiciones pares!

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#define tam 3
 
int main() {
    //Declaramos Variables
    int Arreglo[9];
    int Matriz [tam][tam];
    int i=0, f, c, x;
    int suma=0;
 
    //Mostramos en Pantalla
    printf("*****************************************\n");
    printf("Arreglo de 9 Elementos Enteros");
    printf("\n\n");
 
    //Pedir Datos Al Usuario Para el Arreglo
    for(x=0; x<9; x++) {
        printf("\n Ingrese Elementos al Arreglo %i:  ",x+1);
        scanf("%i",&Arreglo[x]);
    }
 
    //Imprimimos Los Datos del Arreglo
    printf("\n Lo Elementos del Arreglo son: \n");
    for(x=0; x<9; x++) {
        printf(" %i \t",Arreglo[x]);
    }
    printf("\n\n");
 
    //Ingresar Los Datos del Arreglo a la Matriz
    for(f=0; f<tam; f++) {
        for(c=0; c<tam; c++) {
            Matriz[f][c] = Arreglo[i];
            i++;
        }
    }
 
    //Imprimir Los Datos Almacenados del Arreglo en la Matriz
    for(f=0; f<tam; f++) {
 
        //Sumar Las Columnas de la Matriz
        suma=0;
        for(c=0; c<tam; c++){
            suma = suma + Matriz[f][c];
            printf("\t %i",Matriz[f][c]);
        }
        //Imprimimos en Pantalla la Suma de las Filas
        printf(" | %i",suma);
        printf("\n");
    }
 
    //Imprimimos en Pantalla
    printf("\t ---     ---     ---\n");
    //Sumar las Columnas de La Matriz
    for(c=0; c<tam; c++) {
        suma = 0;
 
        for(f=0; f<tam; f++)
            suma = suma + Matriz[f][c];
            printf("\t %i ",suma);
    }
 
    getch();
    return 0;
}
028E0A52-7C0B-444C-B58E-26D153E189A7
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
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++

Problema con arreglos. Impedir repetir un número

Publicado por Rodrigo (539 intervenciones) el 07/09/2020 16:43:51
2 ideas, la primera es mas larga que la segunda:

1.
Cambia este for

1
2
3
4
for(x=0; x<9; x++) {
  printf("\n Ingrese Elementos al Arreglo %i: ",x+1);
  scanf("%i",&Arreglo[x]);
}

por un while

1
2
3
4
5
6
x=0;
while(x<9) {
  printf("\n Ingrese Elementos al Arreglo %i: ",x+1);
  scanf("%i",&Arreglo[x]);
  x++;
}

con eso queda listo para el siguiente paso: no incrementar x siempre
La idea es chequear si el numero que se ingresa esta o no antes, y si esta antes, no incrementar x.
Si no esta actuar como siempre.

1
2
3
4
5
6
7
x=0;
while(x<9) {
  printf("\n Ingrese Elementos al Arreglo %i: ",x+1);
  scanf("%i",&Arreglo[x]);
  // if( no esta )
  x++;
}

Para saber si no esta, recorre el arreglo desde 0 hasta x-1 y compara el valor ingresado con el valor que se visita. y si esta, no incrementas x.

2. Esto de saber donde esta, se puede resolver de otra manera:
Define al inicio de tu programa un arreglo de enteros adicional de tamano 10.
Inicializa este arreglo con 0 en todas las posiciones, antes del ciclo para pedir numeros.

Ahora comienza a leer tal como lo has hecho hasta ahora.
Cada vez que se ingresa un numero chequeas si en la posicion correspondiente del arreglo nuevo sigue un 0 ahi o no.
Si hay un 0, incrementas x y cambias ese 0 por un 1.
Si hay un 1, el numero ya aparecio antes, no incrementas x.

Lo malo de estas 2 ideas es que parecieran no usar una condicion que se esta poniendo, que es que tienes que usar una funcion para esto.
Asi que para la idea 1, define una funcion que recibe el arreglo, el numero ingresado y el indice actual para hacer el recorrido.
y para la segunda idea, define una funcion que recibe el arreglo nuevo y el numero ingresado.

Otra posibilidad es que inicialices el arreglo "Arreglo" con 0s y cuando lees, lo lees directamente a Arreglo[x], sino que usas una variable distinta, y luego la funcion recibe el arreglo tal como esta ahora, y el valor ingresado, y recorra el arreglo hasta que aparezca un 0, o aparezca el valor ingresado. Solo habria que incrementar si el elemento no esta (y el valor ingresado esta entre 1 y 9).


1
2
3
4
5
6
7
8
9
x=0;
while(x<9) {
  printf("\n Ingrese Elementos al Arreglo %i: ",x+1);
  scanf("%i",&valor);
  if( esValido(Arreglo, valor) ) {
      Arreglo[x] = valor;
      x++;
  }
}

esValido es una funcion que chequearia si el elemento esta o no y si es valor esta entre 1 y 9.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar