C/Visual C - ayudenme xfavor

 
Vista:

ayudenme xfavor

Publicado por paola (2 intervenciones) el 09/06/2007 06:31:09
hola, tengo dificultades con este problema recien empiezo con el curso y bueno tengo ciertos incovenientes espero reciba respuesta, aqui el problema:

se debe ingresar un numero de 'n' cifras y dos de una sola cifra estos dos representan las posiciones inicial y final respectivamente solo los numero que se encuentren en este rango deberan cambiar de posicion.

ejm:
numero: 159764823
posicion inicial: 4
posicion final: 7
numero nuevo: 159846723

el programa tambien debe correr con numeros de menores cifras
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

RE:ayudenme xfavor

Publicado por Gilberto (31 intervenciones) el 09/06/2007 17:47:50
Un tip : si usas un arreglo de char para almacenar el número, con un bucle que vaya de posicion_inicial-1 hasta (int)((posicion_final-1)/2), usando el índice principal del bucle para accesar el dígito más a la izquierda, y un índice extra para accesar el dígito más a la derecha, el índice primario se debe incrementar, y el secundario decrementar. No se te olvide usar una variable intermedia para intercambiar los dígitos del array
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

RE:ayudenme xfavor

Publicado por Diego (13 intervenciones) el 09/06/2007 17:50:08
Buenas.

Yo lo que haria es, tomar el primer numero como una cadena de caracteres, y los siguientes numeros como enteros. Luego, vas intercambiando los valores con una funcion. Una posible solucion es esta:

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

#define MAXLEN 10

void swap(char **s,int i, int f);

int main(void)
{
char *s;
int ini, fin;

if((s = malloc((sizeof(char) * MAXLEN) + 1)) == NULL)
exit(EXIT_FAILURE);

printf("Ingrese valor: ");
fgets(s,MAXLEN + 1, stdin);
s[strlen(s) - 1] = '\0'; /* Esto lo hago porque fgets le deja al array el \n */

printf("Ingrese posicion inicial: ");
scanf("%d",&ini);

printf("Ingrese ingrese posicion final: ");
scanf("%d",&fin);

printf("Orden inicial: %s\n",s);
swap(&s,ini,fin);
printf("Orden final: %s\n",s);




exit(EXIT_SUCCESS);
}

void swap(char **s, int i, int f)
{
char aux;

if(*s && i < f){
aux = (*s)[i];
(*s)[i] = (*s)[f];
(*s)[f] = aux;
swap(s,++i,--f);
}

return;
}

PD: Falta algunos detalles como ver que f no sea mayor que el largo de la cadena

Espero que te ayude.
Saludos
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