como hacer un programa que imprima los numeros que no estan dentro de una rango

Iniciado por pefo, 20 Noviembre 2012, 19:37 PM

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

pefo

como puedo hacer un programa en C que dados N numeros proporcionados por el usuario imprima los que no se no se encuentren dentro de un rango igualmento proporcionado por el usuario.

por ejemplo el usuario introducirá:

N números:  4, 8, 10 , 14, 16, 15, 14
limite inf:   0
limite sup:  10

entonces el programa imprimirá los números que no se encuentren dentro del 0 al 10

regresara:  14, 16, 15  (sin imprimir números previamente leídos)

leosansan

Cita de: pefo en 20 Noviembre 2012, 19:37 PM
como puedo hacer un programa en C que dados N numeros proporcionados por el usuario imprima los que no se no se encuentren dentro de un rango igualmento proporcionado por el usuario.

por ejemplo el usuario introducirá:

N números:  4, 8, 10 , 14, 16, 15, 14
limite inf:   0
limite sup:  10

entonces el programa imprimirá los números que no se encuentren dentro del 0 al 10

regresara:  14, 16, 15  (sin imprimir números previamente leídos)
CitarVamos que te hagan toda la tarea!!!!.No aportas nada ! ! !
Pero como no somos malos, para que te hagas una idea de por donde pueden ir los tiros -es una opción, las hay .....- :
Código (cpp) [Seleccionar]

#include<stdio.h>
#include<stdlib.h>
#define N   8

int main()
{
    int num[N]={4,8,10,14,16,15,14,9},i=0,j=0,k,aux[8],num1[8],n=0;
    for (i=0;i<=N;i++)
        if (num[i]<0 || num[i]>10) {aux[j]=num[i];j++;}
    for( i = 0; i < j; ++i ){
            for( k = 0; k < n && num1[k] != aux[i]; ++k ) ;
            if( k >= n ){
                    num1[n] = aux[i];
                    ++n;
              }
        }
    for (i=0;i<n;i++)  printf("%d  ",num1[i]);
    return 0;
}

Saluditos!.

pefo

ya lo hice y si hace lo que quiero, pero ahora no se como separarlo por funciones

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


int main()
{
int *nums;
int cant,i,lim_inf,lim_sup;
printf("Ingrese la cantidad de numeros:");
scanf("%d",&cant);
nums=(int *) malloc(cant*sizeof(int));

for(i=0;i<cant;i++)
{
printf("\nIngrese el %d numero:",i+1);
scanf("%d",nums+i);
}
printf("\nIngrese el limite inferior :");
scanf("%d",&lim_inf);
printf("\nIngrese el limite superior :");
scanf("%d",&lim_sup);


for(i=0;i<cant;i++)
{
if(*(nums+i)>lim_sup || *(nums+i)<lim_inf)
printf("%d  ",*(nums+i));
}

return 0;
}

Oblivi0n

#include <stdio.h>

#define TRUE 1
#define FALSE 0

int  isInRange(int n,int limiteInferior,int limiteSuperior);
void printNumbers(int numeros[], int limiteInferior,int limiteSuperior);


int

int main(){

int n[] = {1,2,5,3,6,4,8,7,10,4,3,};
int limiteInferior, limiteSuperior;
printf("Introduzca el limite inferior");
scanf("%d",&limiteInferior);
printf("Introduzca el limite superior");
scanf("%d", &limiteSuperior);
if(limiteInferior < limiteSuperior){
printNumbers(n,11,limiteInferior,limiteSuperior);
}else{
frptinf(stderr,"Limite superior inferior ( o igual ) a limite inferior");
}


void printNumbers(int numeros[],int size, int limiteInferior,int limiteSuperior){

for(int i = 0; i < size;i++){
if(isInRange(numeros[i],limiteInferior,limiteInferior) == TRUE){
printf("Numero: %d  \n",numeros[i]);
}
}
}

int  isInRange(int n,int limiteInferior,int limiteSuperior){
if( n >= limiteInferior || n <= limiteSuperior){
return TRUE;
}else{
return FALSE;
}
}
}

leosansan

Cita de: Oblivi0n en 21 Noviembre 2012, 11:57 AM
#include <stdio.h>


int  isInRange(int n,int limiteInferior,int limiteSuperior){
if( n >= limiteInferior || n <= limiteSuperior){
return TRUE;
}else{
return FALSE;
}
}
}

CitarTiene el problema de que el 14 o cualquier otro numero que se repita, se repetirá en la respuesta.
Saluditos!.

Oblivi0n

Cita de: leosansan en 21 Noviembre 2012, 13:36 PM
Saluditos!.


Se soluciona de manera sencilla con un metodo "contains". Guardando en otro array los numero ya impresos, y comprobando que este no esté repetido

rir3760

Dos comentarios en relación al programa de Oblivi0n:

1) El lenguaje C no permite la anidación de funciones, esta es una extensión. Uno de los compiladores que la soportan es, si recuerdo correctamente, GCC. Para solucionarlo basta con sacar a "printNumbers" e "isInRange" de la función "main".

2) Los operadores lógicos y de comparación resultan en el valor uno si se cumple la condición y cero en caso contrario. En base a ello se puede reducir la función que comprueba el rango (también hay que sustituir el operador lógico OR por AND):
int isInRange(int num, int min, int max)
{
   return num >= min && num <= max;
}


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