MV Programadores os necesito

letman

necesito entregar una practica para el martes y es qno tengo ni idea de como hacerla aver si me podeis echar una manita o dos!
practica!

-se rrecibiran 10 numeros enteros y se almacenaran en un array
-se recibiran dos numeros enteros que constituiran el limite max y limite min
-se recibiran un entero positivo que indicara el numero de intentos
-los numeros almacenados deberan estar comprendidos entre el limite max y limite min
-se filtraran numeros que no pertenezcan a dicho itnervalo, pero para ello se permitira un maximo de intentos indicados
si es el primer numero entonces e almacenara 0
para sucesivos numeros se almacenara el inmediato anterior
-tras obtener los 10 numeros se ordenadarn de mayor a menor
-se debera imprimir por pantalla:
-los enteros del array en una misma lina y separados por espacios
-el numero de fallos
se ofrecera la posibilidad de continuar

os pidoa ydua porque estoy muy perdido.. no por vagancia
de este ejercicio aunk aprezca mentira solose acer lo de ordenar los numero de mayor a menor.

y lo recibir 10 numeros y almacenarlos en un array
seria asi:
int arr[10]
siendo arr la variable
o asi tampoco es?

lo demas es que no tengo ni idea
y solo queria vuestras opiniones y como lo ariais sin PUNTEROS.. porque no los hemos dado
espero que me ayudeis lo que podais.. asique gracias

loq ue lelvo echo por ahora y me atrancado ya :S

int _tmain(int argc, _TCHAR* argv[])
{
int numero[NUM];
int a=10; // limite máximo del intervalo
int b=0; // limite minimo del intervalo
int c=3; // 3 intentos máximo
int d;

printf ("Numero de enteros:\n ");
scanf ("%d", &a);
fflush(stdin);

printf ("El Numero de fallos:\n ");
scanf ("%d", &a);
fflush(stdin);

printf ("Desea el usuario continuar S/N?:\n ");
scanf ("%d", &a);
fflush(stdin);

	while (d<3);
	{
		
		printf ("Numero de intentos hasta ahora:\n ");
		scanf ("%d", &a);
	}
	


getchar ();
return 0;

}

NeB1

a ver si es esto:

int main(){
/*Variables*/
  int max, min,intentos, fin, j, i,k,l,temp;
  int v[10];
/*Inicializaciones*/
  temp=0;
  fin=0;
  k=0;
  i=0;
  j=0;
  l=0;
/*bucle principal, terminará cuando fin=1*/
  while(!fin){
    printf("introduce el valor máximo del intervalo\n");
    scanf("%d", &max); //guardamos el valor máximo en max

printf("introduce el valor mínimo del intervalo\n");
scanf("%d",&min); //guardamos el mínimo en min

printf("introduce el número máximo de intentos\n");
scanf("%d",&intentos);
 /*mientras el vector no tenga 10 elementos (j<10) y el número de intentos no sea mayor del que toca (k<intentos) seguimos metiendo datos.*/
    while(j<10&&k<intentos){
       printf("introduce el elemento %d del vector \n", j);
       scanf("%d",&i);
       if(i>max||i<min){ 
       /*Si el valor introducido está fuera del intervalo:*/
          if(j==0){
             /*Si es el primer elemento, le metemos un 0*/
             v[j]=0;
          }
          else{
             /*Si nos, le metemos el elemento anterior*/
             v[j]=v[j-1];
          }
          /*incrementamos el contador de intentos K*/
          k=k+1;      
} else{ /*Si el valor introducido está dentro del intervalo, lo metemos al vector*/ v[j]=i; } /*incrementamos el contador de elementos del vector J*/ j=j+1; } /*Algoritmo de ordenación de vectores bubblesort (o sea, que ordena el vector)*/ for (i=1; i<j; i=i+1){ for (l=0 ; l<j - 1; l=l+1){ if (v[l] > lista[l+1]){ temp = v[l]; v[l] = v[l+1]; v[l+1] = temp; } } } /*Empezamos a imprimir cosas*/ for(i=0;i<10;i=j){ /*imprimos los J elementos que hemos metido en el vector*/ printf("\n%d ", v[i]);
} /*imprimimos el número de intentos realizados en una nueva linea*/ printf("\n %d", k); /*y ofrecemos la oportunidad de seguir:*/ printf("desea terminar? (1 - cerrar, 0 - continuar)"); scanf("%d", &fin); } }

está sin comprobar, pero no estoy en linux y no tengo el dev c/c++ instalado, pero más o menos será eso.

EDIT---
te he metido el código para ordenar el vector. Lo he hecho por el método de la burbuja, no me apetecía complicarlo más.

letman

neb1 muchas geracias pero tengo varias dudas.. sobre el codigo

en las variables q as puesto todas a 0

como aiq meter un limite max y un lim min no deberia cambiar esos valores a otros numeros o esos valores los itnroduces tu a mano?

otra cosa e probado el programa pero al llegar a meter los elementos del array o vector enntra en un bucle infinito con el numero
-858993460 y asi un buecle infinoq debno quitar

e puesto al fianl del codigo el
return 0;
getchar();

aber si me lo peude solucinar y sino pos solo darte las gracias por loq me as ayudado :)

NeB1

las variables que he puesto a 0 es para asegurarme que no tienen ningún valor "extraño" en memoria, la mayoría de esas variables las utilizo de contadores y cosas por el estilo.

Los límites se te piden en el programa, "introduce el límite..." y bueno, ara miro lo del bucle infinito
one moment!

NeB1

a ver, a mí me va bien así: (es C, no???)

#include "stdio.h"
#include "stdlib.h"

int main(){
/*Variables*/
  int max, min,intentos, fin, j, i,k,l,temp;
  int v[10];

/*bucle principal, terminará cuando fin=1*/
  while(!fin){
    /*Inicializaciones*/
    temp=0;
    fin=0;
    k=0;
    i=0;
    j=0;
    l=0;
    printf("introduce el valor máximo del intervalo\n");
    scanf("%d", &max); //guardamos el valor máximo en max

printf("introduce el valor mínimo del intervalo\n");
scanf("%d",&min); //guardamos el mínimo en min

printf("introduce el número máximo de intentos\n");
scanf("%d",&intentos);
 /*mientras el vector no tenga 10 elementos (j<10) y el número de intentos no sea mayor del que toca (k<intentos) seguimos metiendo datos.*/
    while(j<10&&k<intentos){
       printf("introduce el elemento %d del vector \n", j);
       scanf("%d",&i);
       if(i>max||i<min){ 
       /*Si el valor introducido está fuera del intervalo:*/
          if(j==0){
             /*Si es el primer elemento, le metemos un 0*/
             v[j]=0;
          }
          else{
             /*Si nos, le metemos el elemento anterior*/
             v[j]=v[j-1];
          }
          /*incrementamos el contador de intentos K*/
          k=k+1;      
} else{ /*Si el valor introducido está dentro del intervalo, lo metemos al vector*/ v[j]=i; } /*incrementamos el contador de elementos del vector J*/ j=j+1; } /*Algoritmo de ordenación de vectores bubblesort (o sea, que ordena el vector)*/ for (i=1; i<j; i=i+1){ for (l=0 ; l<j - 1; l=l+1){ if (v[l] > v[l+1]){ temp = v[l]; v[l] = v[l+1]; v[l+1] = temp; } } } /*Empezamos a imprimir cosas*/ printf("\nElementos del vector:"); for(i=0;i<j;i=i+1){ /*imprimos los J elementos que hemos metido en el vector*/ printf("\nv[%d] = %d ",i, v[i]);
} /*imprimimos el número de intentos realizados en una nueva linea*/ printf("\nNúmero de intentos: %d\n", k); /*y ofrecemos la oportunidad de seguir:*/ printf("desea terminar? (1 - cerrar, 0 - continuar)"); scanf("%d", &fin); }
}

como es la función principal, no le estoy poniendo ningun return, y el getchar() supongo que lo haces para que no se cierre la ventana enseguida, pero como al final te sale la pantalla de "desea terminar" y hasta que no apretas no se cierra, no hace falta.

Mira a ver si te vá, a mi no me dá problemas ahora.

NeB1

lo que hace #5 (porque a ver si estoy haciendo un programa que no hace lo que tu quieres) es:

1 - te pide un máximo y un mínimo y un número de intentos.

2 - empiezas a meter elementos a un vector de 10, si el elemento que intentas meter es mas grande que el máximo que antes hemos puesto, o es más pequeño que el mínimo entonces o se pone en el vector un "0" en caso de ser el primer elemento, o se pone el elemento anterior.
Además, en ese caso, gastas un intento.

3 - Si metes 10 elementos en el vector, sale del bucle, ordena el vector y te lo imprime.

 Si no has llegado a meter 10 elementos, pero has gastado todos los intentos, sale tmb del bucle e imprime lo que habias metido de vector hasta el momento.
letman

si es en c

me salia un bucle infinito cuando metia mas de 4 elementos al array salia el numero ese en bucle infinito
perdona por no cnt antes pero esq toi en clase jeje
ahora lo probare en mi casa y ya te digo aver q pasa

Angel89

yo te ayudaria, pero ya estoi demasiado cansado de programar y rayarme en clase, como para hacerlo en mi tiempo libre xD (ad+ es un tocho de prog!)

letman

otra pregunta lo de los vectores te refieres a arreays o es otra cosa
esq yo vectores todavia no e dado xd
o los arrays son vectores?

Fr4nk0

Los arrays son vectores (o viceversa). Si el programa que te ha puesto #5 no funciona tal cual, editalo y de paso aprendes a buscar fallos (si es que hay). Aparte el código te lo ha puesto comentado, por lo que no te va a costar saber que es lo que hace cada cosa.

NeB1

si, los arrays son vectores xDD

a mí me funciona, pruebalo tu a ver .

Dod-Evers

Ejemplo de cómo no hacer observaciones sin leer:

#2 qué es eso de que estás en linux y no tienes el dc++? Y el gcc? Para qué está entonces?

aNuBiS

#12 ¿Que es eso de leer?
"está sin comprobar, pero no estoy en linux y no tengo el dev c/c++ instalado, pero más o menos será eso. "
O en todo caso, ¿para que esta la comprension lectora? (XDDD)

NeB1

#13 thanks ^^

Dod-Evers

No se leer los noes...

sorry^^

letman

al inicializar el programa me sale q la variable fin is being used without being initialized

pork sale eso y no me deja cargar el programa?¿?¿
aver si alguein me lo soluciona please

NeB1

#16 si has copiado el programa exacto que tengo yo... no debería pasar. Si gastas otro código copialo aquí, y si por contra, gastas el mismo que yo, prueba esto.

cambia -->
int max, min,intentos, fin, j, i,k,l,temp;

por --->

int max, min,intentos, fin=0, j, i,k,l,temp;

mira ver si la variable en algun sitio no se ha escrito correctamente (por ejemplo haber puesto fim en vez de fin o algo así). enviame si quieres una captura de pantalla de tu programa cuando te lanza el error.

cabron

Pues te dice que estás usando fin sin haber inicicializado la variable con algún valor



 int max, min,intentos, fin, j, i,k,l,temp; //Aquí declaras fin
 int v[10];

 /*bucle principal, terminará cuando fin=1*/
 while(!fin){  //Aquí usas fin sin ahberlo inicializado


De todas formas eso suele dar un warning, ¿seguro que no te inicia por esto?, que dicho sea de paso, debes corregirlo, o si no la lógica no será como esperas.

NeB1

#18 la variable está iniciada dentro del bucle (porque cada vez que se repite el bucle, hay que reiniciarla)

 while(!fin){
/*Inicializaciones*/
    temp=0;
    fin=0;
    k=0;
    i=0;
    j=0;
    l=0; 

de todas formas hay que iniciarla antes tambien por si acaso antes de entrar en el while(!fin) fin vale algo raro, aunque debería funcionar el programa igualmente. Sería así:

  fin=0;
 while(!fin){
/*Inicializaciones*/
    temp=0;
    fin=0;
    k=0;
    i=0;
    j=0;
    l=0; 
cabron

#19:

Se considera inicialización de una variable, su primera asignación, el resto son solo asignaciones, nunca inicialiaciones, por eso mismo la variable no está inicializada antes de su primer uso en el código sin la correción.

NeB1

ok ok :P es que no había pensado en lo del while... ha sido justo después de contestar que no lo había visto.

letman

osease q pongo
fin=0 declarando las variables?¿

o antes del while?

NeB1

#22 la que quieras, pone esta última si acaso.

 fin=0;
 while(!fin){
    /*Inicializaciones*/
    temp=0;
    fin=0;
    k=0;
    i=0;
    j=0;
    l=0; 
Riu

#1en este caso este arrray es una matriz "Unidimensional" de x posiciones, tu lo que vas a hacer es meter el minimo y el maximo osea su tamaño, por ejemplo puedes poner que el minimo sea el valor 1 y el mayor el 10
entonces deberas meter los valores desde la posicion 1 hasta la 10 -> for(min;min<=max;min++), esto recorreria el bucle entonces ahora preguntarias el valor que quieres meter en el array, donde preguntarias cout<<"\nInserta valor en la posicion"<<min<<endl";, cin>>array[min]; donde meterias el valor en la posicion del array, despues para visionar los valores haria otro bucle for desde min hasta max y lo enseñaria por pantalla, para mostrar la muestra ordenada del vector ,
utilizaria el siguiente codigo que es el metodo de ordenacion por Intercambio directo:

donde j es el minimo y tamano es el maximo de la matriz.
	for(j = 1 ;j < TAMANO; j++)
	{
		if(array[j-1] > array[j])
		{
			aux = array[j];
			array[j] = array[j-1];
			array[j-1] = aux;
		}
	}
P

CABRONES, no me estoy enterando de nada... jajaja

Un saludo maquinas,!

Usuarios habituales

  • Riu
  • NeB1
  • letman
  • cabron
  • Dod-Evers
  • aNuBiS
  • Fr4nk0