¿Con qué carácter especial detengo un vector?

Iniciado por estudianteuv, 24 Mayo 2018, 23:14 PM

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

estudianteuv

Hola a todos, ¿qué tal?

Lo que pasa es que tengo este programa que adjuntaré, el cuál no sé si es correcto (espero puedan ayudarme en la función, si es que está mal) pero en fin, mi pregunta es que; ¿cuál es el carácter especial para detener un vector, por ejemplo en cadenas es '\0', como sabes, ¿pero en un vector?

Espero puedan ayudarme. Este es el programa:
Lo he compilado y funciona pero al final sale 0.

Código (ada) [Seleccionar]
#include<stdio.h>
#define T 5

int buscar_nmayor(int *v,int n);

int main(){
int vct[T];
int mayor,i=0;
int num_mayor;

for(i=0;i<T;i++){
printf("Inserte valor %i del vector: ",i+1);
scanf("%i",&vct[i]);}
mayor=vct[0];
num_mayor=buscar_nmayor(vct,mayor);
printf("El numero mayor del vector es: %i",num_mayor);
return 0;
}

int buscar_nmayor(int *v,int n){
if(*v=='\0')return 0;
else{if(*v>n)return buscar_nmayor(++v,n);
else return buscar_nmayor(++v,n);}
}

XKC

Cita de: estudianteuv en 24 Mayo 2018, 23:14 PM
Hola a todos, ¿qué tal?

Lo que pasa es que tengo este programa que adjuntaré, el cuál no sé si es correcto (espero puedan ayudarme en la función, si es que está mal) pero en fin, mi pregunta es que; ¿cuál es el carácter especial para detener un vector, por ejemplo en cadenas es '\0', como sabes, ¿pero en un vector?

Espero puedan ayudarme. Este es el programa:
Lo he compilado y funciona pero al final sale 0.

#include<stdio.h>
#define T 5

int buscar_nmayor(int *v,int n);

int main(){
int vct[T];
int mayor,i=0;
int num_mayor;

for(i=0;i<T;i++){
printf("Inserte valor %i del vector: ",i+1);
scanf("%i",&vct[i]);}
mayor=vct[0];
num_mayor=buscar_nmayor(vct,mayor);
printf("El numero mayor del vector es: %i",num_mayor);
return 0;
}

int buscar_nmayor(int *v,int n){
if(*v=='\0')return 0;
else{if(*v>n)return buscar_nmayor(++v,n);
else return buscar_nmayor(++v,n);}
}


Has probado con NULL??
Para poder atacar y vencer con seguridad, ataca donde ellos no puedan defenderse.
Para defenderte y resistir firme, defiéndete en donde ellos no atacarán.

estudianteuv

Cita de: XKC en 24 Mayo 2018, 23:16 PM
Has probado con NULL??

Sinceramente no, y no sé como usarlo, ¿solamente escribo NULL? ¿O tengo que agregarle algo más?

MAFUS

NULL es un define de 0.
Lo que debes pasar a la función que reciba tu vector es el número de elementos que tiene.
En vez de pasar mayor, que no sirve de nada pues ese dato lo puedes sacar una vez dentro de la función, pásale el número de elementos, así podrás hacer un for desde 0 hasta ese máximo.

Serapis

De entrada no todas las cadenas acaban en null (carácter ASCII 0), solo las BString.
Hay cadenas de longitud fija, cuyo tamaño va justo delante del puntero al primer carácter. Estas no acaban sino en lo que tenga la propia cadena, si se rellenó de espacios, acabará en espacio, si no con lo que se rellenare.

Es decir es una convención que siguen muchos lenguajes, pero no es universal (no se aplica siempre)

Y en cuanto a los arrays, pasa lo mismoq ue con las cadenas de longitud fija, hay un descriptor (estructura), que delimita el tamaño del array. Que to sepa, ningún lenguaje implementa nada similar a una BString, para un array... la razón es que al contrario que una cadena que solo tiene sentido que tenga caracteres imprimibles (en general), en un array cualquier byte tiene igual probabilidad y sentido que aparezca, luego es imposible fijar un byte concreto para tal propósito, sin matar la útilidad de un array...
Imagina que cargas un fichero desde disco, el array finalizaría cuando encontrara x byte?.... es decir nadie, nunca, para nada, podría usar un determinado byte???... ni siquiera cuando procede de un resultado arimético?. A-B-S-U-R-D-O.
Ahora ya sabes porque no existe.

Para buscar en un array, necesitas saber el límite del array. Si yu ya declaras que el array tiene 'T' elementos, entonces ya sabes que el límite es 'T'.


entero = Funcion BuscarMayor(array X() , entero T)
    entero j, k

    j= x(0)
    bucle para k desde 1 hasta T-1
        si ( x(k) es mayor que j) luego
            j = x(k)
        fin si
    siguiente
    devolver j
fin funcion