Witam, mam do napisania projekt na piątek. Praktycznie mam w kodzie wszystko co niezbędne, lecz mam problem z wywołaniem funkcji. Szukam chętnego do pomocy (wytłumaczenia co jest nie tak), kod prześlę na PW.
ile płacisz czy to też na PW?
(problem z wywołaniem funkcji, uważaj bo uwierzę, a jak tak rzeczywiście jest to wklej kod tutaj ktoś Ci pomoże na pewno)
fasadin napisał(a):
ile płacisz czy to też na PW?
(problem z wywołaniem funkcji, uważaj bo uwierzę, a jak tak rzeczywiście jest to wklej kod tutaj ktoś Ci pomoże na pewno)
Kod mam, mogę przesłać Ci na PW jak nie wierzysz, jeżeli będziesz skłonny mi pomóc. ;)
void sortuj(wezel *start)
{
wezel *nowystart=NULL;
wezel *max, *poprzmax, *pom;
while(start)
{
max=start;
poprzmax=NULL;
pom=start;
while(pom->next)
{
if (pom->next->dane1.pracownicy>max->dane1.pracownicy)
{
poprzmax=pom->next;
max=pom->next;
}
pom=pom->next;
}
if (poprzmax)
{
poprzmax->next=max->next;
}
else
{
start=max->next;
max->next=nowystart;
nowystart=max;
}
start=nowystart;
}
}
To przykładowa funkcja sortująca. Gdy chcę ją wywołać wyskakuje, że za mało mam argumentów.
case 4: sortuj(); break;
no to pokaż jak ją wywołujesz.
Tam skąd ściągnąłeś kod nie ma przykłady jak wywołać? Sam napisałeś, że dostajesz informację że przy wywołaniu przekazujesz za mało argumentów. Twoja funkcja oczekuje jednego argumentu a Ty nie przekazujesz żadnego.
Dobra, macie cały kod.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct firma {
char nazwa_firmy;
int data_powstania;
float fundusze;
int pracownicy;
char branza;
char miejscowosc;
char email;
}info_firma;
typedef struct wlasciciel {
char imie;
char nazwisko;
int wiek;
info_firma dane_firma;
}info_wlasciciel;
typedef struct wezel{
info_wlasciciel dane;
info_firma dane1;
struct wezel *next;
}wezel;
wezel *start=NULL;
wezel *koniec=NULL;
info_wlasciciel czytaj()
{
info_wlasciciel a;
printf("Podaj imie: ");
scanf("%s", a.imie);
printf("Podaj nazwisko: ");
scanf("%s", a.nazwisko);
printf("Podaj wiek: ");
scanf("%d", a.wiek);
printf("Podaj dane firmy\n");
printf("\t Nazwa firmy: ");
scanf("%s", a.dane_firma.nazwa_firmy);
printf("\t Data powstania: ");
scanf("%d", a.dane_firma.data_powstania);
printf("\t Branza: ");
scanf("%s", a.dane_firma.branza);
printf("\t Liczba pracowników: ");
scanf("%d", a.dane_firma.pracownicy);
printf("\t Miejscowosc firmy: ");
scanf("%s", a.dane_firma.miejscowosc);
printf("\t E-mail: ");
scanf("%s", a.dane_firma.email);
printf("\t Fundusze firmy: ");
scanf("%f", a.dane_firma.fundusze);
printf("\n\n");
return a;
}
void dodaj(info_wlasciciel a)
{
wezel *pom;
start=(wezel*)malloc(sizeof(wezel));
if (pom=NULL)
{
printf("Brak pamięci");
}
pom->dane=a;
pom->next=start;
start=pom;
}
void wypisz(wezel *start)
{
wezel *pom;
for(pom=start; pom!=NULL; pom=pom->next)
{
printf("%s %s %d, ", pom->dane.imie, pom->dane.nazwisko, pom->dane.wiek);
printf("%s %d %s %d %s %s %f\n", pom->dane1.nazwa_firmy, pom->dane1.data_powstania, pom->dane1.branza, pom->dane1.pracownicy, pom->dane1.miejscowosc, pom->dane1.email, pom->dane1.fundusze);
pom=pom->next;
}
}
int szukaj(info_firma a)
{
wezel *pom=start;
while(pom)
{
if ((strcmp(pom->dane1.nazwa_firmy, a.nazwa_firmy)==0))
{
return 1;
}
else
{
pom=pom->next;
}
return 0;
}
void sortuj(wezel *start)
{
wezel *nowystart=NULL;
wezel *max, *poprzmax, *pom;
while(start)
{
max=start;
poprzmax=NULL;
pom=start;
while(pom->next)
{
if (pom->next->dane1.pracownicy>max->dane1.pracownicy)
{
poprzmax=pom->next;
max=pom->next;
}
pom=pom->next;
}
if (poprzmax)
{
poprzmax->next=max->next;
}
else
{
start=max->next;
max->next=nowystart;
nowystart=max;
}
start=nowystart;
}
}
void usun_firme(wezel *start)
{
wezel *pom;
pom=start;
start=pom->next;
free(pom);
}
void zdp()
{
int i;
FILE * plik;
wezel *pom=start;
plik=fopen("firmy.txt", "w");
while(pom!=NULL)
{
fprintf("%s %s %d, ", pom->dane.imie, pom->dane.nazwisko, pom->dane.wiek);
fprintf("%s %d %s %d %s %s %f\n", pom->dane1.nazwa_firmy, pom->dane1.data_powstania, pom->dane1.branza, pom->dane1.pracownicy, pom->dane1.miejscowosc, pom->dane1.email, pom->dane1.fundusze);
pom=pom->next;
}
fclose(plik) ;
}
void czytaj_z_pliku()
{
wezel a;
FILE *plik;
plik=fopen(plik,"rt");
fscanf(plik, "%s" , &a.dane.imie);
fscanf(plik, "%s" , &a.dane.nazwisko);
fscanf(plik, "%d" , &a.dane.wiek);
fscanf(plik, "%s" , &a.dane1.branza);
fscanf(plik, "%d" , &a.dane1.data_powstania);
fscanf(plik, "%s" , &a.dane1.email);
fscanf(plik, "%f" , &a.dane1.fundusze);
fscanf(plik, "%s" , &a.dane1.miejscowosc);
fscanf(plik, "%s" , &a.dane1.nazwa_firmy);
fscanf(plik, "%d" , &a.dane1.pracownicy);
fclose(plik);
}
int main()
{
int z;
printf("\n--------------------------------- BAZA DANYCH ----------------------------------\n");
printf("1. Dodaj nowa firme i wlasciciela\n");
printf("2. Usun istniejaca firme\n");
printf("3. Wyszukaj podana firme\n");
printf("4. Posortuj dane\n");
printf("5. Wypisz dane");
printf("6. Zapisz dane do pliku\n");
printf("7. Wczytaj dane z pliku\n");
printf("8. Wyjscie\n\n");
printf("Wybierz interesujaca Cie opcje: ");
scanf("%d",z);
switch (z)
{
case 1: dodaj(info_wlasciciel czytaj); break;
case 2: usun(); break;
case 3: szukaj(info_wlasciciel czytaj); break;
case 4: sortuj(info_wlasciciel czytaj); break;
case 5: wypisz(info_wlasciciel czytaj); break;
case 6: zdp(); break;
case 7: wdzp(); break;
case 8: (); break;
}
}
no tak niby wywołujesz sortuj tylko co ma sortować? widzisz, że ta funkcja pobiera jakiś argument? Podejrzewam, że początek jakiejś listy - pewnie jakiegoś gotowca dostałeś i nie wiesz jak z niego skorzystać o ile to i tak działa (nie zagłębiałem się).
Dobra, pytanie jedno zasadnicze. Czy dużo trzeba zmieniać w kodzie, by działał on poprawnie?
Zdefiniuj „poprawnie”, bo nie wiemy co tak naprawdę ma on robić. Ale forumowe doświadczenie podpowiada mi, że zmienić trzeba wszystko. :P
No program ma robić to co widać w menu (dodawać, usuwać, szukać, sortować, zapisywać do pliku etc). Jeżeli byłbym leniem, to poprosiłbym o zrobienie i zapłatę, a ja chcę pomocy, wskazówek. Pytanie: w kodzie widać funkcję proszącą o wpisanie przez użytkownika danych. Mam problem z usunięciem, nie wiem jakiej zmiennej użyć, by funkcja to załapała.
Poza tym jest sam błąd w funkcji, oto jego treść: "expected' struct wezel*' but argument is of type 'struct info_wlasciciel (*)()' ". Podejmie się ktoś pomocy dla mnie?