[ Foro de C ]

fallo en el array

22-Nov-2019 16:06
Invitado (david)
1 Respuestas

Tengo que hacer un array de 10 caracteres como máximo y que al introducir el carácter 101 se salga del bucle y no me funciona. Enunciado: introducir
números reales de valor entre [-100, 100] (#define MIN -100, #define MAX 100) en un array de como a máximo  ELEM elementos (#define ELEM 10), hasta entrar el 101.


#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#define MIN -100
#define MAX 100
#define ELEM 10

int main () {
	system("COLOR 04");
	float array[ELEM];
	float num=-201,suma=0,producte=1,ngran=0,npetit=0;
	int comptadormitja,mitja,parell=0,senar=0,opcio,comptadorseq=0,comptadornum=0;
	int i,j,a,x[ELEM];

	do {
		printf(" \n *****************************************************");
		printf(" \n *                    M  E  N  U                     *");
		printf(" \n *****************************************************");
		printf(" \n 1. Introduir els nombres fins introduir un 101, com a minim dos elements. ");
		printf(" \n 2. Mostrar resultats. ");
		printf(" \n 3. Reiniciar els comptadors. ");
		printf(" \n 4. Mostrar els valors introduits a l'array. ");
		printf(" \n 5. Mostrar la mitja de tots els valors introduits per l'array. ");
		printf(" \n 6. Finalitzar programa. ");
		printf("\n");
		printf("\n");
		scanf ("%d",&opcio);
		fflush(stdin);

		switch(opcio) {
			case 1:
				do{
					while((num<MIN)||(num>MAX)){
						printf("Escriu el numero %d, que ha d'estar entre [-100 i 100]: ", i+1);
						scanf("%f",&num);
						}
					if((num==101)&&(comptadornum<=2)){
						printf("Torna a introduir els valors.");
					}
					if(num!=101){
						x[i]=num;
						i++;
						comptadornum++;
					}
				} while ((num!=101)||(comptadornum<ELEM));
				if(comptadornum>ELEM){
					printf("L'array ja te el maxim de valors introduits. ");
				}
					
					
				for (i=0; i<=9; i++){
					suma += x[i];
				}
				for (i=0; i<=9; i++){
					producte *= x[i];
				}
				for(i=0; i<=9; i++){
					if(x[i] > ngran){
						ngran = x[i];
					}
				}	
				for(i=0; i<=9; i++){
					if(x[i] < npetit){
						npetit = x[i];
					}
				}		
				break;
			case 2:
				printf("La suma dels numero introduits es: %.2f\n",suma);
				printf("\n");
				printf("El producte dels numeros introduits es: %.2f\n",producte);
				printf("\n");
				printf("El numero mes gran introduit es: %.2f\n",ngran);
				printf("\n");
				printf("El numero mes petit introduit es: %.2f\n",npetit);
				printf("\n");
				printf("El total de nombres parells introduits es: %i\n",parell);
				printf("\n");
				printf("El total de nombres senars introduits es: %i\n",senar);
				printf("\n");
				printf("S'han detectat %i sequencies.",comptadorseq);
				printf("\n");
				break;
			case 3:
				num=-1,suma=0,producte=1,ngran=-1,npetit=151,parell=0,senar=0,comptadorseq=0;
				printf("\n");
				printf("Comptadors reiniciats.");
				printf("\n");
				break;
			case 4:
				for (i=0; i <ELEM; i=i+1)
					for (j=0; j <ELEM; j=j+1)
						if ( x[i] < x[j] ) {
							a=x[i];
							x[i]=x[j];
							x[j]=a;
						}
				for(i=0; i <10; i=i+1) {
					printf("%3d", x[i]);
				}
				break;
			case 5: 
				mitja=suma/comptadormitja;
		}
	} while (opcio!=6);
}


 


23-Nov-2019 23:47
Nacho Cabanes (+84)

Si pretendes lo que creo, sólo tienes que cambiar el "o" por un "y" en tu bucle do-while interno, para que salga cuando se llene o bien cuando se teclee 101, lo que primero ocurra:

while ((num!=101) && (comptadornum<ELEM));






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)