Menú

Mostrar Mensajes

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ú

Mensajes - K-YreX

#891
El problema es que no tienen porqué ser la misma cantidad de caracteres. Entonces no puedes formar una única palabra. No sé si me entiendes.
#892
Aquí te dejo una versión que acabo de hacer simplificada para que veas la parte del ordenamiento. Lo que hay que hacer una vez se tienen los alumnos con sus respectivos nombres y apellidos, se comparan los apellidos del padre y el que sea menor se pone primero; si son iguales, se compara el de la madre y el menor se pone primero; y si son iguales, se comparan los nombres y el primero se pone primero.

Si tienes dudas sobre el valor de retorno de <strcmp> es el siguiente:
< 0 si la primera cadena es menor que la segunda.
> 0 si la primera cadena es mayor que la segunda.
= 0 si las dos cadenas son iguales.

Adapta esto a tu programa. Suerte.


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

#define TAM 20
#define MAX_STUDENTS 3

typedef struct{
char name[TAM];
char lastNameFather[TAM];
char lastNameMother[TAM];
} Student;

void initializeStudent(Student*, char*, char*, char*);
void showStudent(Student);
void sortStudents(Student*);

int main(){
Student st1, st2, st3;

initializeStudent(&st1, "aaaa", "baba", "cccd");
initializeStudent(&st2, "aaaa", "abab", "cccc");
initializeStudent(&st3, "aaab", "baba", "cccc");

Student students[MAX_STUDENTS] = {st1, st2, st3};

puts("Alumnos sin ordenar");
for(size_t i = 0; i < MAX_STUDENTS; i++)
showStudent(students[i]);

sortStudents(students);

puts("\nAlumnos ordenados");
for(size_t i = 0; i < MAX_STUDENTS; i++)
showStudent(students[i]);
}

void initializeStudent(Student *st, char *name, char *lastNameFather, char *lastNameMother){
strncpy(st->name, name, TAM);
strncpy(st->lastNameFather, lastNameFather, TAM);
strncpy(st->lastNameMother, lastNameMother, TAM);
}

void showStudent(Student st){
printf("%s\t%s\t%s\n", st.lastNameFather, st.lastNameMother, st.name);
}

void sortStudents(Student *students){
Student assistant;
for(size_t i = 0; i < MAX_STUDENTS-1; i++){
if(strcmp(students[i].lastNameFather, students[i+1].lastNameFather) > 0){
assistant = students[i];
students[i] = students[i+1];
students[i+1] = assistant;
}
else if(strcmp(students[i].lastNameFather, students[i+1].lastNameFather) == 0){
if(strcmp(students[i].lastNameMother, students[i+1].lastNameMother) > 0){
assistant = students[i];
students[i] = students[i+1];
students[i+1] = assistant;
}
else if(strcmp(students[i].lastNameMother, students[i+1].lastNameMother) == 0){
if(strcmp(students[i].name, students[i+1].name) > 0){
assistant = students[i];
students[i] = students[i+1];
students[i+1] = assistant;
}
}
}
}
}
#893
Manda el código para ver cómo estás almacenando los alumnos, para ver si son estructuras, arrays...

De todas formas es simple, comparas un apellido con otro y si uno es menor, ese va primero y si son iguales, comparas el otro.
#894
Existe una librería que es <cctype> o <ctype.h> para C++ y C respectivamente que tienes algunas funciones como por ejemplo <isalnum> (comprueba si el caracter es alfanumérico), <isalpha> (comprueba si el caracter es alfabético) o <isdigit> (comprueba si el caracter es un digito decimal).
Esas son las que más te pueden interesar pero si le echas un vistazo a la librería entera tiene más funciones para hacer muchas más comprobaciones, como puede ser ver si hay espacios en blanco, ver si son mayúsculas o minúsculas o comprobar si el caracter es hexadecimal, entre otras más...

Espero que esto te sirva, suerte.
#895
Programación C/C++ / Re: Ayuda con programa
22 Noviembre 2018, 22:28 PM
No estás usando la función <abrir>, así es imposible que funcione. Además de eso no sé si el fallo es ese o es otra cosa entonces si te sale algún error de compilación inclúyelo en el mensaje.

PD: Por favor, no usar <conio.h>, ni <system("pause")> y creo recordar que la librería <istream> no es necesaria.
#896
Programación C/C++ / Re: [C] Elementos de un array
22 Noviembre 2018, 04:09 AM
He editado esto en mi post anterior pero como veo que habéis respondido mientras lo hacía, lo pregunto de nuevo para que no quede en el olvido:
Citar
Y por último, sabéis por qué si citas un código en C aparecen "&#160" en la tabulación del código?? Eso en códigos entre etiquetas cpp no pasa. Y hay alguna forma de usar el tabulador?? Ya que eso de tener que usar muchos espacios para tabular bien el código... :-\
#897
Programación C/C++ / Re: [C] Elementos de un array
22 Noviembre 2018, 04:01 AM
Cita de: AlbertoBSD en 22 Noviembre 2018, 03:47 AM
Por que no hacerlo al mismo tiempo?


#include <stdio.h>
int main(void){
   printf("Ingresar cantidad de elementos: ");
   int r;
   scanf("%d", &r);
   int i = 0;
   int array[r],A[r];
   do {
         array[r - 1] = r;
         A[i] = r;
         r = r- 1;
         ++i;
   } while (r > 0);
   printf("Lista: \n");
   for(r = 0; r < i; ++r)
        printf("%d \t", array[r]);
   printf("\nLista: \n");
   for(r = 0; r < i; ++r)
        printf("%d \t", A[r]);
   return 0;
}

Aunque hay un pequeño error, como la serie de números va decreciendo se van guardando los valores desde el final del array hacia el principio. Con eso corregido quedaría así:

do {
       array[r - 1] = r;
A[r - 1] = r; // Esta era la instruccion que guardaba el array <A> al reves que el array <array>
       r = r- 1;
       ++i;
} while (r > 0);


PD: Un tanto extraña y poco convencional esa forma de almacenar un array aunque funcionar claro que funciona. Una alternativa:

#include <stdio.h>

int main(void){
   printf("Ingresar cantidad de elementos: ");
   int r;
   scanf("%d", &r);
   int i = 0;
   int array[r],A[r];

   for(size_t i = 0; i < r; i++){
       array[i] = i;
       A[i] = i;
   }

   printf("Lista: \n");
   for(size_t i = 0; i < r; i++)
       printf("%d \t", array[i]);
   
   printf("\nLista: \n");
   for(size_t i = 0; i < r; i++)
       printf("%d \t", A[i]);
   
   return 0;
}


Edit: De esta manera evitas modificar el tamaño de <r> ya que representa el tamaño del array. Aunque no se va a modificar el tamaño por modificar <r> pero si el código fuese más grande puedes pensar que <r> vale el tamaño del array y como lo has modificado no es así y podrías tener problemas.

Y por último, sabéis por qué si citas un código en C aparecen "&#160" en la tabulación del código?? Eso en códigos entre etiquetas cpp no pasa. Y hay alguna forma de usar el tabulador?? Ya que eso de tener que usar muchos espacios para tabular bien el código... :-\
#898
Programación C/C++ / Re: [C] Elementos de un array
22 Noviembre 2018, 03:28 AM
Cuando declaras un array se puede inicializar directamente si conoces todos sus datos, es decir, puedes hacer esto:

int array[TAM] = {1,2,3,4,5,...};


Pero en tu caso que no puedes conocer esos valores antes de la ejecución del programa, tienes que declarar el nuevo array vacío y copiar después todos los valores. Como esta copia se hace después de haber declarado el nuevo array, entonces ya no puedes hacer la forma rápida que sería (en tu caso):

int array[TAM] = {1,2,3,4,5,...};
int nuevoArray[TAM] = array;  // Esto no es correcto.


En vez de eso, debes hacer una copia elemento a elemento (como ejemplo):

int array[10] = {0,1,2,3,4,5,6,7,8,9};
int nuevoArray[10];
for(size_t i = 0; i < 10; i++)
    nuevoArray[i] = array[i];


Con esto tendrías el siguiente resultado:
array[10] = {0,1,2,3,4,5,6,7,8,9}
nuevoArray[10] = {0,1,2,3,4,5,6,7,8,9}

Espero haberte ayudado con esto.
#899
Lo siento pero no, más que nada porque nunca me he parado a buscar códigos ajenos ya que no es algo que me guste mucho si no es para ayudar a otra persona. Pero si no encuentras nada siempre puedes coger cualquier código de internet y hacerte tú mismo la pregunta o intentar comprender su funcionamiento sin ejecutarlo y después lo ejecutas para ver si estabas en lo correcto.

En este mismo foro en otros posts he visto que hay algunos códigos que trabajan con temas matemáticos que al fin y al cabo creo que son los mejores para hacer lo que quieres hacer ya que la dificultad no está en las instrucciones que se usan sino en ver por qué se están usando.

PD: Yo mismo he escrito algunos trozos de código para resolver algunos de estos posts que te comento. Si te interesa el programa entero o que te mande alguno de los programas que tengo yo puedes decírmelo por un mensaje privado y te lo puedo mandar si te sirve de ayuda.
#900
Programación C/C++ / Re: [C] Elementos de un array
22 Noviembre 2018, 03:11 AM
Creo que no entiendo bien la pregunta porque ese programa que tienes si lo ejecutas en introduces 10, ya te está creando un conjunto (que no se llama A, se llama array) en el que tienes los números almacenados en el orden que tú quieres que estén.
Entonces no sé dónde está el problema :huh:

Igual te refieres a que quieres guardar todo el contenido de <array> en otra variable <A>. Es eso??