C/Visual C - Problemas de Arreglos

 
Vista:
sin imagen de perfil

Problemas de Arreglos

Publicado por Sebastián (31 intervenciones) el 01/12/2016 05:22:45
Hola con todas, les agradecería mucho si me ayudan con el siguiente ej:
"Elaborar un programa que lea n números y los almacene en un arreglo, n debe cumplir que n <= 500. Los números son leídos desde el teclado hasta que se digite 'N' cuando aparece el mensaje:

"Desea continuar (S/N)?"

El programa debe comparar el contenido de cada uno de los elementos con el valor de 0. Si un elemento tiene un valor de 0, dicho valor debe desplazarse hacia la derecha del arreglo, permitiendo de esta manera que al final del proceso, todos los números diferentes de 0 estén almacenados al comienzo del arreglo en el mismo orden en el que se leyeron, y todos los números 0 estén almacenados al final del arreglo.

Por ejemplo, si se tiene el siguiente arreglo:

2 3 4 0 9 0 7 0 8 0

al final del proceso el mismo arreglo quedará:

2 3 4 9 7 8 0 0 0 0 "

Mi pregunta es como puede generar la parte del "Desea continuar (S/N)", he estado intentando con bandera y do while pero la verdad no obtengo el resultado esperado, les agradezco su ayuda .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include<stdio.h>
 
 
	int main()
	{
		int ANum[100] = {},  n;
		int aux;
		int j,i;
		char bandera='N';
		int ban = 0;
		printf("Ingrese la dimensión A: ");
		scanf_s("%d", &n);
		while (n > 500)
			{
					printf("Ingrese la dimension : ");
					scanf_s("%d ", &n);
 
			}
 
 
		for (i = 0; i < n; i++)
		{
			printf("Ingrese un valor:\n");
			scanf_s("%d", &ANum[i]);
			if (ANum[i] == 'N')
			{
				printf("Desea continuar? (S/N)\n");
				scanf_s("%c", &bandera);
				if (bandera == 'N')
				{
					system("cls");
					ban = 1;
					break;
					printf("Adios\n");
 
					return -1;
 
				}
			}
		}
		for (int i = 1; i < n; i++)
		{
			for (j = 0; j < n - 1; j++)
			{
				if (ANum[j] == 0)
				{
					aux = ANum[j];
					ANum[j] = ANum[j + 1];
					ANum[j + 1] = aux;
				}
			}
		}
		if(ban==0)
		{
			printf("\nEl arreglo  es:\n");
			for (int i = 0; i < n; i++)
			{
				printf("%d ,", ANum[i]);
			}
		}
		else
		{
			system("cls");
			printf("adios\n");
		}
 
		_getch();
	}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Problemas de Arreglos

Publicado por agustin (272 intervenciones) el 01/12/2016 15:48:37
A ver si esto te sirve:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
int main()
{
    int ANum[500], n;
    int aux;
    int j,i,nElementos=0;
    char bandera=0;
 
    do{
        printf("Ingrese la dimension A: ");
        scanf("%d", &n);
        if(n > 500)
            printf("Dimension incorrecta. Ingrese un valor menor o igual a 500\n");
    }while (n > 500);
 
    for (i = 0; i < n && bandera != 'N'; i++){
        system("CLS");
        printf("Ingrese un valor: ");
        scanf("%d%c", &ANum[i],&bandera); //lo de usar bandera aqui es para librarme del salto de linea
        nElementos++;
        if(nElementos < n){
            do{
                printf("Desea continuar? (S/N): ");
                fflush(stdin);
                bandera=toupper(getchar());
                switch(bandera){
                    case 'S':
                        break;
                    case 'N':
                        printf("Adios\n");
                        break;
                    default:
                        printf("Opcion incorrecta. Vuelve a intentarlo.\n");
                }
            }while(bandera != 'N' && bandera != 'S');
        }
    }
 
    //Ordeno solo los elementos insertados
    for (i = 1; i < nElementos; i++){
        for (j = 0; j < nElementos - 1; j++){
            if (ANum[j] == 0){
                aux = ANum[j];
                ANum[j] = ANum[j + 1];
                ANum[j + 1] = aux;
            }
        }
    }
 
    //Se muestran solo los elementos insertados
    printf("\nEl arreglo  es:\n");
 
    for (i = 0; i < nElementos; i++){
        printf("%d", ANum[i]);
        if(i < nElementos -1){
            printf(", ");
        }else{
            putchar('\n');
            fflush(stdin);
        }
    }
    getchar();
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problemas de Arreglos

Publicado por Sebastián (31 intervenciones) el 01/12/2016 20:40:02
Agustín, muchas gracias de nuevo por tu ayuda y tiempo, la verdad ese punto se me convirtio en un problema, bastante confuso, gracias de nuevo por tu ayuda y tiempo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar