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
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ć.
A z tym pytaniem "czy tablica może mieć dowolne rozmiary zadane interakcyjnie" to jak będzie
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)
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;
}
Czemu używasz zmiennych globalnych? Tablice indeksuje się od zera, nie od 1.
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
Jednak nie do końca działa, wyświetla posortowany wiek, ale ze złym imieniem
Zmieniasz tylko wiek, więc nic dziwnego. Swapuj całe struktury.
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;
}
Tylko właśnie nie za bardzo wiem jak bo mi errory wywala
temp = Pracownicy[j+1].wiek;
Pracownicy[j+1].wiek = Pracownicy[j].wiek;
Pracownicy[j].wiek = temp;
Tutaj pewnie muszę zmienić na całe struktury
Zadanie zrobione :D