Primero el código no es de c, como ya han dicho es de c++. Segundo, además de ser de c++ la función main no retorna ningún valor, no se si puede tratarse de eso o simplemente el problema sea del compilador. Que compilador o IDE usas?
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: do-while en 17 Septiembre 2014, 20:54 PM
¡Buenas!
Esta función es muy sencilla también:
int longitud(char *s)
{
if(!(*s))
return 0;
return 1 + longitud(s + 1);
}
¡Saludos!
PD: o con un cuerpo de una sola línea: XD
int longitud(char *s)
{
return (*s) ? 1 + longitud(s + 1) : 0;
}
Cita de: rir3760 en 16 Septiembre 2014, 17:15 PM
Otra parte que se debe corregir para que el programa funcione correctamente es:int main()
{
char cadena[10];
char *pCadena = 0;
cout << "Introduce una cadena como array: ";
cin >> cadena;
cout << "Su tamano es: " << LongitudCadena(cadena) << ". " << endl;
cout << "\nIntroduce una cadena como puntero: ";
cin >> *pCadena;
cout << "Su tamano es: " << LongitudCadena(pCadena) << ". " << endl;
Ahí el valor inicial de "pCadena" no es valido, hay que cambiarlo a:int main()
{
char cadena[10];
char *pCadena = cadena;
cout << "Introduce una cadena como array: ";
cin >> cadena;
cout << "Su tamano es: " << LongitudCadena(cadena) << ". " << endl;
cout << "\nIntroduce una cadena como puntero: ";
cin >> pCadena;
cout << "Su tamano es: " << LongitudCadena(pCadena) << ". " << endl;
Sin embargo no es un buen ejercicio para la practica de punteros por lo siguiente:
1) Cuando se utiliza el operador ">>" con el objeto "cin" (como en tu ejemplo) se lee una palabra y se debe indicar mediante un puntero donde debe almacenarse.
2) Ese puntero se genera de forma automática al utilizar el identificador del array (este es "cadena").
En pocas palabras no hay tal diferencia entre array y puntero en este caso, supongo lo que quiere enseñar el profesor es el uso de los operadores "[]" y "*".
Un saludo
Cita de: eferion en 17 Septiembre 2014, 11:57 AM
Eso es porque tu algoritmo de ordenación no funciona.
Te lo pongo con un ejemplo práctico... si tu tienes: 1 4 2 5 3 7 6 9 8 10.
Incialmente comparas 1 y 10... orden correcto, después comparas 4 y 8... orden correcto, después comparas 2 y 9... nuevamente orden correcto... al final no has cambiado ningún valor de posición.
Lo que te están pidiendo es que implementes el algoritmo de la burbuja, el de toda la vida. La "novedad" que plantea tu ejercicio es que tiene que poderse elegir si empiezan por el principio del array o por el final... pero no te están pidiendo que pongas un puntero al principio, otro al final y que vayas comparándolos entre ellos.
No se si me explico.
#include <iostream>
using namespace std;
void Ordenar(int*, int, bool);
int main() {
int lista[10] = { 1, 4, 2, 5, 3, 7, 6, 9, 8, 10 };
for (int i = 0; i <= 9; i++) {
cout << lista[i] << " ";
}
cout << endl;
Ordenar(lista, 10, 0);
for (int i = 0; i <= 9; i++) {
cout << lista[i] << " ";
}
cin.sync();
cin.get();
return 0;
}
void Ordenar(int *vector, int nElementos, bool ascendente) {
int *q, *p;
p = vector;
q = &vector[nElementos];
if (ascendente) {
while (p <= q) {
if (*p > *q) {
*p += *q;
*q = *p - *q;
*p -= *q;
}
p++; q--;
}
}
else {
while (p <= q) {
if (*p < *q) {
*p += *q;
*q = *p - *q;
*p -= *q;
}
p++; q--;
}
}
}