Witam,
Mam zadanie, ze na liscie jednokuerunkowej sa boki prostakata tzw. kazdy element listy ma dwie liczby typu float i sa to boki prostakata. Zadanie polega na tym, aby posegregowac pola prostokotow w taki sposob, ze te ktore sa mniejsze od sredniej pól to je segregujemy rosnąca, reszte wrzucamy na poczatek listy. No i mam taki problem, ze obliczylem ilosc elementow listy, policzylem srednia, ale teraz nie wiem w jaki sposob dokonac tej segregacji... Przechodze se przez liste jak napotkam na element ktorego pole jest mniejsze od sredniej to ustawiam go na koniec, a potem jakos przejsc juz po tej czesciowo posegregowanej liscie i poprzemieniac tylko te elementy ktore sa mniejsze od sredniej? Nie wiem za bardzo jak to sortowac, poki co zrobilem taki kod:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct lista {
float a, b;
struct lista *n;
};
typedef struct lista ELEMENT;
typedef ELEMENT *ADRES;
ELEMENT *poczatek = NULL;
void addToList(float x, float y);
void FunkcjaZamiana(ADRES poczatek);
int main()
{
addToList(10, 15);
addToList(5.4, 1.5);
addToList(11, 66.5);
addToList(99, 1.5);
addToList(15, 25);
addToList(10.5, 16);
addToList(7, 8);
addToList(15.5, 11.5);
addToList(10, 20);
FunkcjaZamiana(poczatek);
return 0;
}
void addToList(float x, float y)
{
struct lista *newElement = malloc(sizeof(struct lista));
newElement->a = x;
newElement->b = y;
if(poczatek != NULL){
struct lista *help = poczatek;
while(help != NULL){
if(help->n == NULL){
help->n = newElement;
newElement->n = NULL;
}
help = help->n;
}
}
else{
poczatek = newElement;
poczatek->n = NULL;
}
}
void FunkcjaZamiana(ADRES poczatek)
{
float suma=0, srednia=0, licznik_elementow=0;
ADRES help = poczatek, pom = poczatek, help2, help3;
if(poczatek == NULL)
{
printf("Lista jest pusta.\n");
}
else
{
if(poczatek->n == NULL)
{
printf("Na liscie jest tylko jeden element.\n");
}
else
{
while(help != NULL)
{
suma += (help->a * help->b);
licznik_elementow++;
help = help->n;
}
srednia = (suma / licznik_elementow);
printf("Srednie pole wynosi: %.2f\n", srednia);
}
}
/* Zamiana */
while(pom->n != NULL)
{
help2 = pom;
if((pom->a * pom->b) < srednia)
{
help3->a = pom->a;
help3->b = pom->b;
pom->a = pom->n->a;
pom->b = pom->n->b;
pom->n->a = help3->a;
pom->n->b = help3->b;
pom = pom->n;
}
else
{
pom = help2->n;
}
}
/* Wypisanie naszej nowej listy */
while(poczatek != NULL)
{
printf("%.2f\t%.2f\t%.2f\n", poczatek->a, poczatek->b, poczatek->a * poczatek->b);
poczatek = poczatek->n;
}
}