Funkcja minimum.

Odpowiedz Nowy wątek
2011-08-30 19:10
0

Witam.
Mam problem z napisaniem pewnego programu a dokładnie 1 funkcji. O to treść:

Zadeklaruj globalnie szablon struktury o następujący polach : nazwa[30], ilość i cena typu całkowitego.
Napisz funkcje:
-wczytaj(wczytuje ilość towarów i towary z klawiatury oraz zapisuje struktury do pliku "magazyn ( funkcja nie posiada parametrów i nic nie zwraca. Otwarcie i zamknięcie pliku dokonuje się wewnątrz funkcji).
-minimum ( wybiera strukturę o najmniejszej wartości i zwraca ją bezpośrednio ( funkcja nie posiada parametrów. Otwarcie i zamknięcie pliku dokonuje się wewnątrz funkcji).
-drukuj ( drukuje pojedynczą strukturę( funkcja jako parametr pobiera strukturę do wydruku, nie zwraca żadnej wartości)).

Napisałem na razie funkcję wczytaj i mam problem bo nie wiem jak się zabrać za funkcję minimum.(wartość=cena*ilość)

O to co na razie napisałem:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct szablon
{
    char nazwa[30];
    int ilosc;
    int cena;
};
void wczytaj(void);
void minimum(void);
 
int main()
{
wczytaj();
}
 
void wczytaj(void)
{
    FILE *plik;
    int i,n;
    struct szablon lista;
     plik=fopen("towary.txt","wt");
    printf("Ile towarow zamierzasz wpisac\n");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        printf("Podaj Nazwe towaru\n");
        scanf("%s",lista.nazwa);
        printf("Podaj ilosc tego towaru\n");
        scanf("%d",&lista.ilosc);
        printf("Podaj cene tego towaru\n");
        scanf("%d",&lista.cena);
        fprintf(plik,"%s    %d      %d\n",lista.nazwa,lista.ilosc,lista.cena);
       // fwrite(&lista,sizeof(lista),n,plik);
    }
 
    fclose(plik);
}
 
void minimum(void)
{
    FILE *plik;
    int i,n,wartosc;;
    plik=fopen("towary.txt","rt");
    printf("Ile towarow chcesz sprawdzic\n");
    scanf("%d",&n);
    wartosc=lista.ilosc*lista.cena;
    for(i=0;i<n;i++)
    {
 
    }
}
edytowany 1x, ostatnio: madmike, 2011-09-04 12:46
Nie kompilowałem tego, ale jeżeli dobrze widzę to to się nawet nie skompiluje. Nie możesz odwołać się do zmiennej lista w funkcji minimum bez uprzedniego utworzenia tej zmiennej. Algorytm jest analogiczny do znajdowania minimum w tablicy liczb :D - Atael 2011-08-30 19:53

Pozostało 580 znaków

2011-08-30 19:47
0

może mam takie dziwne wrażenie, ale funkcja miminum jak sama nazwa wskazuje wyszukuje minimum w jakimś kontenerze i zwraca te minimum, może lepiej byłoby zacząć ją pisać tak:

int minimum(int* tab, int rozmiar)
{
  int i;
  int ret=tab[0]; // jak rozmiar bedzie zerowy to i tak funkcja powinna sie wykrzaczyc, bo nie da sie znalezc minimum z pustego zbioru
  for (i=1; i<rozmiar; i++)
    if (tab[i]<ret)
      ret = tab[i];
  return ret;
}

w takim kodzie łatwiej się błędów szuka


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 2x, ostatnio: krwq, 2011-08-30 19:50
Gorzej jeśli tab[0] nie spowoduje wywalenia się kodu. Dobrym pomysłem byłoby jednak dodanie tam checka. - msm 2011-08-30 19:58
na razie mam dylemat czy on będzie wiedział jak wykorzystać ten kod - krwq 2011-08-30 22:05

Pozostało 580 znaków

2011-08-31 16:26
0

Witam.
W poleceniu jest napisane funkcja nie posiada parametrów.

krwq podał przykład funkcji obliczającej minimum z podanej tablicy liczb, nie rozwiązanie Twojego problemu. - Atael 2011-08-31 16:35

Pozostało 580 znaków

2011-08-31 16:52
0

to zrób sobie tak:

void minimum()
{
  int n;
  int* tab;
  ... // pobierz tablice i ilosc elementow
  return minimum(tab,n);
}

będzie bez parametrów


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

2011-08-31 18:17
0

Ale dalej nie rozumiem jak szukać w strukturze.

Pozostało 580 znaków

2011-08-31 20:00
0

Po prostu wybierasz element struktury według którego będzie się dokonywać porównanie, np. cena i przeciążasz operator mniejszości dla tej struktury. voilà!

On chyba w C pisze. :-P - Endrju 2011-08-31 20:34
ups, racja,sorki. Zamiast przeciążać operator można po prostu w funkcji porównywać od razu po tym elemencie, np. if(tab[i].cena < minimum)... - piternet 2011-08-31 20:36

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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