Struktura w C

0

Cześć mam takie zadanie, " Wypełnij interakcyjnie tablicę strukturami Pracownik, zawierającymi imię pracownika (char) i wiek (int).Posortuj tablicę wg składowej "wiek" używając metody bąbelkowej. Czy tablica może mieć dowolne rozmiary zadane interakcyjnie?"
I mam pytanko, wypełnić interakcyjnie to chodzi że mam np napisać funkcję która w pętli będzie pobierała wpisane dane ?
Ogólnie napisałbym to tak, zrobił bym funkcje która pobiera imię i nazwisko, zrobiłbym jeszcze jedną tablice do której będzie dostarczany wiek, i tą tablice przekaże do funkcji która będzie sortować metodą bąbelkową no i funkcję która wyświetli posortowane liczby czyli wiek naszych pracowników.
Tak to mam napisać ? Może trzeba inaczej albo jest jakiś inny sposób, łatwiejszy czy cus :D

0

wypełnić interakcyjnie to chodzi że mam np napisać funkcję która w pętli będzie pobierała wpisane dane ?

Tak

zrobił bym funkcje która pobiera imię i nazwisko, zrobiłbym jeszcze jedną tablice do której będzie dostarczany wiek, i tą tablice przekaże do funkcji która będzie sortować metodą bąbelkową no i funkcję która wyświetli posortowane liczby czyli wiek naszych pracowników.

Nie, masz zrobić strukturę Pracownik, wypełnić tablicę tych struktur i je posortować.

0

A z tym pytaniem "czy tablica może mieć dowolne rozmiary zadane interakcyjnie" to jak będzie

0

Odpowiedzią na to pytanie jest "tak". Możesz użyć VLA (czyli po prostu wczytać zmienną oznaczającą wielkość, a potem użyć jej do definicji tablicy), albo użyć malloc (odradzam w tym wypadku)

0

Napisałem ale nie działa poprawnie

#include <stdio.h>
#define SIZE 5
struct Pracownik{
    char imie[10];
    int wiek;
};
struct Pracownik Pracownicy[5];
void bubbleSort(struct Pracownik Pracownicy[], int rozmiar)
{
    int i, j, temp;
    for (i = 0; i<rozmiar-1; i++)
    {
        for (j=0; j<rozmiar-1-i; j++)
        {
            if (Pracownicy[j].wiek > Pracownicy[j+1].wiek)
            {
                temp = Pracownicy[j+1].wiek;
                Pracownicy[j+1].wiek = Pracownicy[j].wiek;
                Pracownicy[j].wiek = temp;
            }
        }
    }
}

int main() {
    for(int i=1;i<=5;i++){
        printf("Podaj imie i wiek pracownika nr %d\n",i);
        scanf("%s %d", Pracownicy[i].imie, &Pracownicy[i].wiek);
    }
    bubbleSort(Pracownicy,SIZE);
        for(int j=1;j<=5;j++){
        printf("Pracownicy posortowanie wzgledem wieku %s %d\n",Pracownicy[j].imie,Pracownicy[j].wiek);
    }
    return 0;
}
0

Czemu używasz zmiennych globalnych? Tablice indeksuje się od zera, nie od 1.

0

Działa, zmieniłem indeks na 0, miałem od 1 bo wcześniej mialem w petli printf gdzie było wyświetlanie Imie i wiek pracownika nr i tutaj nr to był indeks pętli, cos takieog to było for(i=1;i<=5;i++) printf("Imie i wiek pracownika nr %d: %s %d, i, prac.imie, prac.wiek

0

Jednak nie do końca działa, wyświetla posortowany wiek, ale ze złym imieniem

0

Zmieniasz tylko wiek, więc nic dziwnego. Swapuj całe struktury.

0

Ktoś ma pomysł jak to zmodyfikować ? Sortuje wiek ale później wyświetla mi złe imię do wieku

#include <stdio.h>
#define SIZE 5

struct Pracownik{
    char imie[10];
    int wiek;
};
struct Pracownik Pracownicy[5];
void bubbleSort(struct Pracownik Pracownicy[], int rozmiar)
{
    int i, j, temp;
    for (i = 0; i<rozmiar-1; i++)
    {
        for (j=0; j<rozmiar-1-i; j++)
        {
            if (Pracownicy[j].wiek > Pracownicy[j+1].wiek)
            {
                temp = Pracownicy[j+1].wiek;
                Pracownicy[j+1].wiek = Pracownicy[j].wiek;
                Pracownicy[j].wiek = temp;
            }
        }
    }
}

int main() {
    for(int i=0;i<=5;i++){
        printf("Podaj imie i wiek pracownika\n");
        scanf("%s %d", Pracownicy[i].imie, &Pracownicy[i].wiek);
    }
    bubbleSort(Pracownicy,SIZE);
        for(int j=0;j<=5;j++){
        printf("Pracownicy posortowanie wzgledem wieku %s %d\n",Pracownicy[j].imie,Pracownicy[j].wiek);
    }
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0