[ Foro de C ]

Duda en arreglos

11-Sep-2020 03:36
Carlos Bolaos
2 Respuestas

Tengo una duda con una tarea que me dejaron. Soy nuevo en c y la verdad es que no entiendo mucho.
La tarea resolver un problema de ver cuantos animales pasaron por ambos mares y me dan los datos de entrada.
N = 5
A(animales)=[3, 1, 4, 1, 3]
M(Mares)=[1, 2, 1, 2, 2]
la respuesta deberia ser que solo un animal(el animal 3) paso por ambos mares
Y lo que llevo de mi código es lo siguiente:

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int n, cont=0;
   printf("Tamaño del arreglo");
   scanf("%d", &n);
   int A[n], M[n];
   for(int i=0; i<n; i++)
   {
       printf("Ingresa el valor");
       scanf("%d", &A[i]);
       scanf("%d", &M[i]);
   }
   for(int i=0; i<n; i++)
   {
       printf("%d %d\n", A[i], M[i]);
   }
   
   return 0;
}


11-Sep-2020 20:35
Invitado (Flash-Original)

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int n, cont=0;
  char texto[4];
  printf("Tamaño del arreglo");
---->  gets(texto);
  --->    sscanf(texto,"%d",&n);
  int A[n], M[n];
  for(int i=0; i<n; i++)
  {
      printf("Ingresa el valor de A");
   --->   gets(texto);
    --->  sscanf(texto,"%d",&A[i]);
        printf("Ingresa el valor de M");
      ---> gets(texto);
    --->  sscanf(texto,"%d",&M[i]);
  }
  for(int i=0; i<n; i++)
  {
      printf("%d %d\n", A[i], M[i]);
  }
 
  return 0;
}

La funcion scanf se come el intro es decir si pone 1 y luego intro, la pulsacion de Intro lo coge como numero
Tambien deberias comentar mas si te das cuenta he puesto dos printf uno para A y otro para M

Yo no se si ese es el resultado que esperabas pero ahora el programa se ejecuta
usa gets(variable) siendo la variable tipo char
y lo conviertes a numero con sscanf(texto,"%d",&n); //la n es un numero que recibi la variable ya convertida a decimal


13-Sep-2020 22:05
Cristian Pablo Fusaro

Dado que dices "ambos" mares, en lugar de usar 2 vectores -uno para animales y otro para mares- puedes pensar el problema usando una matriz, de n filas por 2 columnas. Las filas representan los animales, y las columnas los mares. En cada celda de la matriz colocas un valor de verdad -un 0 si el animal no paso por ese mar, o un 1 si sí pasó-. Puedes hacerte la vida más fácil comenzando la numeración de la matriz en 1,1 en lugar de 0,0 para que se corresponda con los números de animales y de mares.
Sí o sí, para que esto funcione debes inicializar la matriz a cero (falso). Ejemplo:

for(int i = 1; i <= n; i++) M[i][1] = M[i][2] = 0; //M es la matriz, n la cantidad de animales, 1 y 2 los mares.

Para cada animal -y su correspondiente mar- que se ingresa le asignas a la celda de la matriz un 1 (verdadero):

M[animal][mar] = 1; //el animal pasó por el mar

Luego, en otro ciclo chequeas por cada fila (cada animal) si ambas columnas están en 1, es decir, pasó por los 2 mares.






Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...