CitarHago esta aclaración porque en muchos casos suponen que tengo 15 o 20 años(es lo lógico) y en realidad tengo 61, como comprenderán no voy a la facultad y la gente que conozco no tiene la más mínima idea lo que es la computadora y menos programar.-
Hola a todos.
Aclaro que hace menos de una semana que llegué al capítulo "punteros" en el libro que estoy aprendiendo C.-
Lo que debería hacer el programa es ordenar el arreglo de punteros para que se muestre Abeja – abeja y no abeja – Abeja, el gran problema que tengo es como declarar temp para que contenga la dirección de memoria de uno de los punteros.-
Espero se entienda de lo contrario por favor consúltenme necesito esto para poder seguir.-
#include <stdio.h>
#include <string.h>
int main(void){
char *frase[] = {"abeja", "Abeja"};
int i;
i = strcmp( *frase, *(frase+1));
if(i > 0){
temp = frase;
frase = frase+1;
frase+1 = temp;
}
for(i=0; i<2; i++){
printf("%s", *(frase+i));
}
return 0;
}
Saludos.
Daniel
(http://i41.tinypic.com/2mhamg9.jpg)
Deberias eliminar esto:
Cita de: DanielC# en 19 Diciembre 2013, 23:53 PMHago esta aclaración porque en muchos casos suponen que tengo 15 o 20 años(es lo lógico) y en realidad tengo 61, como comprenderán no voy a la facultad y la gente que conozco no tiene la más mínima idea lo que es la computadora y menos programar.-
Ya que mientras no infrinjas las reglas de los foros no hay problema.
----
Cita de: DanielC# en 19 Diciembre 2013, 23:53 PMel gran problema que tengo es como declarar temp para que contenga la dirección de memoria de uno de los punteros
La variable temporal debe ser del mismo tipo que los elementos del array "frase": "char *".
Ademas en el intercambio debes aplicar indirección con el operador "*" o "[]". El programa con los cambios:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *frase[] = {
"abeja",
"Abeja"
};
int i;
if(strcmp(*frase, *(frase + 1)) > 0){
char *temp = frase[0];
frase[0] = frase[1];
frase[1] = temp;
}
for (i = 0; i < 2; i++)
printf(" %s", frase[i]);
putchar('\n');
return 0;
}
Un saludo
Hola rir3760.
CitarComparar dos líneas usando la función de la biblioteca estándar strcmp().
Si dos líneas están desacomodadas -- intercambiar (swap) los apuntadores (no el texto).
Discúlpame por la ignorancia, tú código cumple con el enunciado del libro?.
En cuanto a la aclaración de mi edad, obtengo mucha comprensión y no es lo mismo tener 20 que 61, son otras las posibilidades.-
Saludos.
Daniel
(http://i41.tinypic.com/2mhamg9.jpg)
Hola a todos.-
Con esta imagen seguramente les quedara clara la idea.-
(http://i43.tinypic.com/14jz0xv.jpg)
Saludos.
Daniel
(http://i41.tinypic.com/2mhamg9.jpg)
Cita de: DanielC# en 20 Diciembre 2013, 03:19 AMDiscúlpame por la ignorancia, tú código cumple con el enunciado del libro?
Si. Un ejemplo similar se encuentra en el tema Consulta argumentos (http://foro.elhacker.net/programacion_cc/consulta_argumentos-t405279.0.html).
Un saludo
Hola rir3760.
Me parece que sigo sin explicarme lo suficiente, te dejo otra imagen que puede que quede más claro.-
(http://i40.tinypic.com/b5mkaq.jpg)
En cuanto al enlace te soy sincero no lo probé porque es muy avanzado para mis conocimientos.-
Saludos.
Daniel
(http://i41.tinypic.com/2mhamg9.jpg)
Me parece que estas confundiendo la dirección de un elemento con la dirección almacenada en el elemento. Las cadenas "abeja" y "Abeja" no pueden almacenarse en las direcciones 4c69c y 4c6a0 porque cada una consta (incluyendo el '\0') de seis caracteres.
Si modificamos el programa un poco:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *frase[] = {
"abeja",
"Abeja"
};
int i;
for (i = 0; i < 2; i++)
printf("frase[%d]: %p --> %s\n", i, (void *) frase[i], frase[i]);
if(strcmp(*frase, *(frase + 1)) > 0){
char *temp = frase[0];
frase[0] = frase[1];
frase[1] = temp;
}
puts("----");
for (i = 0; i < 2; i++)
printf("frase[%d]: %p --> %s\n", i, (void *) frase[i], frase[i]);
return 0;
}
Su salida (en mi caso) es:
frase[0]: 0x004090bd --> abeja
frase[1]: 0x004090b7 --> Abeja
----
frase[0]: 0x004090b7 --> Abeja
frase[1]: 0x004090bd --> abeja
Un saludo
Hola a todos.
Por fin puedo demostrar con este programita lo que pretendía hacer, sólo que todavía no pude hacerlo con array de puntero a char, seguramente alguien me pondrá algún ejemplo.-
#include<stdio.h>
//funcion para cambiar las posiciones de memoria
void cambiar_punteros(int **x, int **y) {
void *t = *x;
*x = *y;
*y = t;
}
int main(int argc,char *argv[]){
int a1 = 15, a2 = 29, *ptr1=&a1, *ptr2=&a2;
printf("\n\n int a1 = 15, a2 = 29, *ptr1=&a1, *ptr2=&a2;");
printf("\n\n Posiciones y valores iniciales de *ptr1 ---> Valor = %d Direccion = %p",*ptr1, ptr1);
printf("\n Posiciones y valores iniciales de *ptr2 ---> Valor = %d Direccion = %p\n",*ptr2, ptr2);
printf("\n\n Ahora quiero que p1 tenga la posicion de memoria de p2 y a la inversa.\n");
cambiar_punteros(&ptr1,&ptr2);
printf("\n\n Posiciones de memoria cambiados de *ptr1 ---> Valor = %d Direccion = %p",*ptr1, ptr1);
printf("\n Posiciones de memoria cambiados de *ptr2 ---> Valor = %d Direccion = %p\n",*ptr2, ptr2);
return 0;
}
(http://i44.tinypic.com/3305ra8.jpg)
Saludos.
Daniel
(http://i41.tinypic.com/2mhamg9.jpg)
Cita de: DanielC# en 24 Diciembre 2013, 00:19 AMPor fin puedo demostrar con este programita lo que pretendía hacer, sólo que todavía no pude hacerlo con array de puntero a char
Sin animo de ofender pero en este tema desde mi primera respuesta tienes un ejemplo sobre como intercambiar el valor de dos punteros (por supuesto elementos de un array):
#include <stdio.h>
#include <string.h>
int main(void)
{
char *frase[] = {
"abeja",
"Abeja"
};
int i;
if(strcmp(*frase, *(frase + 1)) > 0){
char *temp = frase[0];
frase[0] = frase[1];
frase[1] = temp;
}
for (i = 0; i < 2; i++)
printf(" %s", frase[i]);
putchar('\n');
return 0;
}
Para que sea casi igual a tu ultimo programa solo hay que realizar algunos cambios:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p = "abeja";
char *q = "Abeja";
if(strcmp(p, q) > 0){
char *temp = p;
p = q;
q = temp;
}
printf("%s %s\n", p, q); /* Abeja abeja */
return 0;
}
Un saludo
Hola rir3760.
Me culpo por no hacerme entender desde el principio, el último programa es el que necesitaba.-
(http://i44.tinypic.com/29fy2s1.jpg)
Feliz navidad para todos y saludos.
Daniel
(http://i41.tinypic.com/2mhamg9.jpg)
Hola rir3760.
Una pregunta más, tu ultimo código se puede aplicar de esta manera.-
char *frase[] = {"aveja", "Aveja"};
Si te parece tedioso para este post sólo decime si es posible y me las rebusco.-
Saludos.
Daniel
Cita de: DanielC# en 26 Diciembre 2013, 16:16 PM
Hola rir3760.
Una pregunta más, tu ultimo código se puede aplicar de esta manera.-
char *frase[] = {"aveja", "Aveja"};
Si te parece tedioso para este post sólo decime si es posible y me las rebusco.-
Sí, de hecho lo hace justo en el código anterior.
Cita de: DanielC# en 26 Diciembre 2013, 16:16 PMUna pregunta más, tu ultimo código se puede aplicar de esta manera.
char *frase[] = {"aveja", "Aveja"};
Primero tienes que explicar de una forma clara a que te refieres con "aplicar de esta manera", si te refieres a la comillas estas deben ser "comillas planas sin chiste".
Un saludo
Hola amchacon.
Esta es la diferencia.-
char *frase[] = {"abeja", "Abeja"};
char *p = "abeja";
char *q = "Abeja";
Cita de: DanielC# en 26 Diciembre 2013, 17:38 PM
Hola amchacon.
Esta es la diferencia.-
char *frase[] = {"abeja", "Abeja"};
char *p = "abeja";
char *q = "Abeja";
¿Y no es eso lo que preguntabas?
Hola.
Me parece que mi problema es más facil de entender que respirar.-
Codigo de rir3760
char *p = "abeja";
char *q = "Abeja";
¿Puedo hacer lo mismo de esta manera?
char *frase[] = {"abeja", "Abeja"};
Saludos.
Daniel
Cita de: DanielC# en 26 Diciembre 2013, 21:30 PM
Hola.
Me parece que mi problema es más facil de entender que respirar.-
Codigo de rir3760
char *p = "abeja";
char *q = "Abeja";
¿Puedo hacer lo mismo de esta manera?
char *frase[] = {"abeja", "Abeja"};
Saludos.
Daniel
Creo que rir3760 ya ha respondido a ambos. Por si no te has dado cuenta te dejo la combinación de los dos:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *p = "abeja";
char *q = "Abeja";
printf(" %p --> %s\n",(void*)p, p);
printf(" %p --> %s\n",(void*)q, q);
if(strcmp(p, q) > 0){
char *temp = p;
p = q;
q = temp;
}
puts("----");
printf(" %p --> %s\n",(void*)p, p);
printf(" %p --> %s\n",(void*)q, q);
char *frase[] = {"abeja","Abeja"};
int i;
putchar ('\n');
for (i = 0; i < 2; i++)
printf("frase[%d]: %p --> %s\n", i, (void *) frase[i], frase[i]);
if(strcmp(*frase, *(frase + 1)) > 0){
char *temp = frase[0];
rase[0] = frase[1];
frase[1] = temp;
}
puts("----");
for (i = 0; i < 2; i++)
printf("frase[%d]: %p --> %s\n", i, (void *) frase[i], frase[i]);
return 0;
}
;-) ;-) Felices Navidades y Próspero Año Nuevo. ;-) ;-)
¡¡¡¡ Saluditos! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)