System na triedenie udajov v C

Programovacie jazyky, rady, poradňa...
xdef
Amateur
Amateur
Príspevky: 11
Registrovaný: 02 feb 2010, 11:15

System na triedenie udajov v C

Príspevok od používateľa xdef »

Dobry den,

Prosim Vas potreboval by som poradit ako zrealizovat system na triedenie udajov, ktory musi obsahovat:
1. Načítanie údajov zo súboru do dynamického poľa v cykle
2. Možnosť zmeny existujúcej položky poľa v tvare štruktúry resp. jej členov
3. Možnosť triedenia štruktúr podľa konkrétnej položky
4. Možnosť vyhľadávania podľa konkrétnej položky
5. Uloženie zmenených dát do súboru

Nacitat udaje do dnamickeho pola zo suboru v cykle viem, taksito ulozit zmenene data do suboru, moznosti 2,3,4 nie su mi az tak jasne. Bol by niekto ochotny mi pomoct? Dakujem.
Zatial mam:

Kód: Vybrať všetko

#include <stdio.h>
#include <stdlib.h>

int main()
{
    
   int n, i; 
   FILE *f1,*f2;
   float *pole_hodnot;
   
pole_hodnot = (float*)malloc(n * sizeof(float));
if(pole_hodnot == NULL)
{
printf("Nedostatok pamatoveho priestoru.\n");
return -1;
}
if ((f1 = fopen("file1.txt", "r"))!= NULL
	{

for(i = 0; i < n; i++)
   {
       fscanf(f1, "%f", &pole_hodnot[i]);
   }


    return 0;
}
PS: mam predstavu co su to struktury typedef struct {polozky}; , ale neviem ako to presne realizovat a bol by som rad, ak by mi to niekto skuseny predviedol priamo na tomto priklade.

EDIT:
viem, ze napr.

Kód: Vybrať všetko

typedef struct priklad{ 
      int cislo; 
      char znak; 
} Spriklad; 
vytvori strukturu s dvomi polozkami cislom a slovom o 9 znakoch a pouzije sa:

Kód: Vybrať všetko

Spriklad premenna; 
premenna.cislo = 10; 
premenna.znak = 'a';
Ale potrebujem jednoducho nejaky odrazovy bod, najlepsie cely priklad nejakeho navrhnuteho vlastneho systemu na triedenie udajov, ktory musi obsahovat to co je popisane v hornych bodoch. Takym stylom ako to je napr v Ucebnici jazyka C od Herouta, no tam som presiel celu kapitolu, ale stale neviem ako konkretne zrealizovat tie body, ktore som popisoval vyssie...Uz som uplne zmeteny...
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: System na triedenie udajov v C

Príspevok od používateľa c-ice »

Detail k prvemu kodu: "n" nemas inicializovane a už ho používaš na nasobenie

2. ak to spravne chapem tak ide o zmenu napr.

Kód: Vybrať všetko

Spriklad pole[10];
pole[2].cislo = 15;
// alebo 
Spriklad pom;
pom.cislo = 15;
pole[2] = pom;
3. no toto ma napada len tak ze pre kazdy datovy typ budes muset vytvorit nejaku sortovaciu funkciu z prepinacom ze o ktoru polozku sa jedna
teda napada ma aj viac moznosti ako to spravit ale toto ako prve
tu maš sortovacie algoritmi ... http://people.tuke.sk/igor.podlubny/C/Kap11.htm
4. podobne ako 3 len namiesto porovnavacieho algoritmu (co je viac menej) budes porovnavat ci sa to rovná a vracať napr. NULL ak sa nenachadza alebo poziciu na ktorej sa nachadza ...

Datove struktury prestuduj si to je tam aj priklad ...
http://people.tuke.sk/igor.podlubny/C/Kap10.htm
plus si prejdi radsej celu knihu je tam toho par stránok a je to určite menej ako nejaka cela kniha od Herouta ...
BTW. dalsi fiitkar ?
xdef
Amateur
Amateur
Príspevky: 11
Registrovaný: 02 feb 2010, 11:15

Re: System na triedenie udajov v C

Príspevok od používateľa xdef »

Dik, dost mi to pomohlo este by som sa chcel ale spytat jednu vec a to:

Kód: Vybrať všetko

int main()
{
    int i,n;
    int a[10];
    for(i=1;i <= n; i++) {
    printf("prvok a[%d]:",i);
    scanf("%d",&a[i]);
    }

    for(i=1;i<=n;i++)
    printf("Vypis:%d\n",a[i]);

    return 0;
}
mam hore uvedene staticke pole, do ktoreho nacitavam 11 cisel. Ak ich nacitavam po rade cize 1,2,3,4,5,6,7,8,9,10,11, tak sa aj v poriadku vypisu ako maju, ale akonahle ich zadavam striedavo cize 5,4,5,7,8,9,1,2,3,6, tak pri dajme tomu 9-tom prvku mi to skoci akoby som zadaval znovu od 2-heho prvku a potom to pokracuje do nekonecna, proste stale mozem zadavat udaje a nic sa nevypise, ako je to mozne? Dik za odpoved.

EDIT: plus este by ma zaujimalo, ako sa da dosiahnut to, ze ked z jedneho suboru precitam retazec a zapisem ho do druheho ( to mi prebehne ok) ale zaroven ho zapise do povodneho z ktoreho cital, tak aby to zapisal pod citany retazec a ten povodny neprepisal tym zapisovanym?

EDIT2: Nevadi, uz som to vsetko vyriesil :)
Napísať odpoveď