¿Alguien me puede ayudar con este programa?

Iniciado por ivorybom, 4 Noviembre 2012, 14:23 PM

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

ivorybom

Hola. El motivo por el que abro este tema es que no se como programar este ejercicio y quería saber si me pueden ayudar a programarlo. Es un poco urgente, así que agradecería respuestas rápidas.

Se pide la implementación de un programa en lenguaje C para rellenar un vector de 10 números enteros sin que se repita ningún valor. El programa deberá controlar que cuando el usuario introduzca un nuevo valor éste no haya sido introducido previamente; si dicho valor ya existe en el vector el programa deberá volver a pedir otro hasta que el que se introduzca no exista.

Gracias de antemano.

MOD: No se hacen tareas!

crazykenny

Hola; por mi parte, una opcion es crear una matriz de 10 valores, y, luego, con el comando input insertado dentro de un bucle for-next que se repita 10 veces para insertar los diez valores.
Por ultimo, y, despues del comando input (el cual asigna el valor a una variable), habria que poner otro bucle for-next (el cual tambien se repite 10 veces) con una comprobacion a traves del comando if, de tal forma que compruebe si el valor de la variabe esta dentro de alguno de los diez de la matriz, de tal forma que, si esta, vuelva al comando input para que vuelva a pedir insertar el mismo valor (y yo lo realizaria con el comando "Goto"); no obstante, y, si el valor de la variable no esta en la matriz, pues el programa tendria que seguir, de tal forma que asigne el valor de la variable a la respectiva posicion de la matriz; cabe destacar que, bueno, los bucles for-next utilizan una variable para determinar cuantas repeticiones del bucle se han realizado, y, por mi parte, esta la utilizaria para determinar que posicion de la matriz hay que asignarle el valor del input.
Espero haberte podido ser de ayuda.
Muchas gracias por vuestra atencion.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

leosansan

#2
CitarCreo que esto es justo lo que pides:
Código (cpp) [Seleccionar]
#include <stdio.h>
#define N   10
int main(){
   int array[N],array_[N],i,j;
   for (i=0;i<N;i++){
           printf ("Introducir numero:");
           scanf ("%d",&array[i]);
           for (j=0;j<i;j++) {
                   if (array[j]==array[i]){
                          printf ("Numero repetido.  ");i--;break;
                      }
               }
       }
   for (i=0;i<N;i++)
       printf ("%d  ",array[i]);
   return 0;
}

Saludos!.

crazykenny

Hola leosansan; una cosa sobre tu codigo, y sin animo de ofender, ni nada por el estilo, pero, en el segundo bucle "for", y, en caso de que el bucle estuviese repetido, ¿no deberia haber un goto que redirija (u algo asi) hacia la pregunta del numero, con la respectiva etiqueta antes de pedir el numero?, no se, es que, a lo mejor me he liado, pero no lo he visto (creo), pese a que no se programar en C++.
Por ultimo, una ultima pregunta, si me lo permites, y sin animo de criticar, ni nada por el estilo, pero, creo que falta lo que es la asignacion de la posicion actual a la matriz, en el sentido de, por ejemplo, poner algo asi como;
matriz(posicion)=variable
Se que suena algo chapucero esto que acabo de escribir en la linea anterior, pero creo que falta ponerlo, y me disculpo por las molestias causadas.
Muchas gracias por vuestra atencion.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

leosansan

#4
El segundo for compara cada nuevo valor con todos los anteriores introducidos y si encuentra uno igual sale del bucle y no se toma ese valor, y como no se toma se restituye los contadores con i--  y j--, retornando a continuación al primer for, donde se continua la introducción de los números. No hace falta ningún goto.
Si quieres la posición del valor puedes cambiar

Código (cpp) [Seleccionar]
printf ("%d  ",array[i]);
por esta otra:
Código (cpp) [Seleccionar]
printf ("\ncomponente %d =  %d",i+1,array[i]);
Por cierto, el código está en C, no en C++.

crazykenny

Gracias por la aclaracion, leosansan, pero ivorybom creo que ha comentado acerca de que, si el valor ya existe, tiene que pedir otro hasta que deje de repetirse, y, bueno, me imagino que sera de forma "indefinida", motivo por el cual he comentado acerca de lo de insertar el goto para que vuelva a preguntar el numero, y no pasar al siguiente como me comentas, puesto que, bueno, al pasar otra vez al bucle principal, preguntaria hasta un limite, en este caso, hasta que i no sea superior a N, y por esto he comentado acerca del goto hacia la pregunta del valor.
Muchas gracias por vuestra atencion.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

Blaster

O puedes hacerlo asi para que la salida sea mas atractiva  ;D

#include <stdio.h>
#define N 10

int main(){
    int array[N], i, j;
   
    for(i=0; i<N; i++){
       printf ("Introducir numero para la posicion[%i]: ", i);
       scanf ("%d", &array[i]);

    for(j=0; j<i; j++) {
       if(array[j]==array[i]){
         printf ("Numero repetido!!!\n");i--;j--;break; }
                }
        }
    return 0;
}


Un saludo!!

rir3760

Cita de: crazykenny en  4 Noviembre 2012, 17:11 PMpero ivorybom creo que ha comentado acerca de que, si el valor ya existe, tiene que pedir otro hasta que deje de repetirse, y, bueno, me imagino que sera de forma "indefinida", motivo por el cual he comentado acerca de lo de insertar el goto para que vuelva a preguntar el numero
No es necesaria una sentencia de salto "goto" porque si el numero esta repetido la iteracion se repite debido al decremento:
if (array[j]==array[i]){
   printf("Numero repetido.  ");
   i--; /* <== Al decrementar se repite la operacion */
   j--;
   break;
}


Y sin animo de molestar les recuerdo que una de las políticas de estos foros es no hacer las tareas del prójimo.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

crazykenny

Ah, es cierto, y muchas gracias por comentar lo del "i--", rir3760, y me disculpo por el malentendido relacionado con el goto y demas, puesto que no recordaba esto que comentas.
Muchas gracias por vuestra atencion.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

BatchianoISpyxolo

rir3760, claro que no debemos resolver las tareas del prójimo, porque además así no le ayudamos en nada pero, en este caso, crazykenny, se molestó en preguntar cosas y en tratar de entenderlas y eso también es importante.

De nada sirve que exponga un código sin ningún sentido y sin saber realmente lo que hace cada cosa aunque para aprender a programar hay que programar y programar.

Saludos y perdón por el off-topic xD
Puede que desees aprender a programar desde 0: www.espascal.es