Przekazanie wartości przez funkcję main()

0

Witam! Chcę zrobić taki przykład z książki:
Napisz program, który pobiera wartość typu float i wyświetla ją podniesioną do sześcianu. Funkcja main() powinna przekazywać pobraną wartość (jako argument) do Twojej funkcji.

Mógłby mi ktoś wytłumaczyć o co chodzi z tą drugą częścią zadania?

0

Funkcja startowa to:

int main(int argc, char **argv)

W tablicy argv znajdują się parametry z którymi został wywołany program.

0

A nie powinno byc tak?

int main(int argc, char *argv[]) 

Przetestuj sobie tak:

for(int i = 0; i < argc; i ++)
{
     cout << argv[i] << endl;
}
 

Użyj atof aby zamienić c-stringa na float.

http://www.cplusplus.com/reference/clibrary/cstdlib/atof/

0

A możecie wytłumaczyć dlaczego tak i co to oznacza?

1

@Wibowit i @Bumcykowy: raczej nie o to chodzi w tym zadaniu.

@bakłażan9494: masz stworzyć funkcję, która będzie podnosić float'y do sześcianu. Po prostu musi dostać tego float'a jako argument i zwrócić wartość.

0
bakłażan9494 napisał(a):

Witam! Chcę zrobić taki przykład z książki:
Napisz program, który pobiera wartość typu float i wyświetla ją podniesioną do sześcianu. Funkcja main() powinna przekazywać pobraną wartość (jako argument) do Twojej funkcji.

Mógłby mi ktoś wytłumaczyć o co chodzi z tą drugą częścią zadania?

Mi się wydaje ze chodzi o te parametry. Bo skąd indziej main mógł by je pobrać ?

Oto chodzi ze swoj program uruchamiasz tak w cmd

oblicz.exe 6

Czyli przekazujesz do program liczbę 6 bez żadnych cin, po czym dokonujesz obliczenia i wypisujesz wynik.

0

o_O? Mnie się wydaje że po prostu w main() jest wczytanie danych od usera.

0
Shalom napisał(a):

o_O? Mnie się wydaje że po prostu w main() jest wczytanie danych od usera.

Jak by się zastanowić to pewnie masz rację, w main stosowne pytanie, scanf/cin w jakim tam języku to pisze i w wypisaniu wywołanie funkcji która mu argumentargumentargument zwróci.

0
sig napisał(a):
Shalom napisał(a):

o_O? Mnie się wydaje że po prostu w main() jest wczytanie danych od usera.

Jak by się zastanowić to pewnie masz rację, w main stosowne pytanie, scanf/cin w jakim tam języku to pisze i w wypisaniu wywołanie funkcji która mu argumentargumentargument zwróci.

No właśnie tak miałem zamiar to zrobić. Wartość była by wpisywana przez usera, po czym jest ona podnoszona do sześcianu (xxx). Kompletnie nie rozumiem tylko tej części zadania:
Funkcja main() powinna przekazywać pobraną wartość (jako argument) do Twojej funkcji.

0

Tworzysz sobie funkcję, np.

float  nie_chce_mi_sie_czytac_ksiazki_a_weekend_taki_ladny(float  liczba);

W ciele tej funkcji podnosisz sobie do sześcianu, czy odprawiasz inną czarną magię. W funkcji main() zaś wywołujesz swoją funkcję, przekazując jej wartość jako argument:

wynik = nie_chce_mi_sie_czytac_ksiazki_a_weekend_taki_ladny(pobrana);
0

To możesz zrobić tak

float liczba, wynik;

if(argc < 2)
{
    liczba = PobierzLiczbe();
}
else
{
    liczba = atof(argv[1]);
}

wynik = Oblicz(liczba);
0

Po pierwsze, nie sądzę żeby sposób pobierania danych od usera był tutaj istotny. Autor wątku raczej nie o to pyta.
Po drugie, mieszacie mu każąc używać funkcji konwertującej na int, podczas gdy w zadaniu stoi jak byk float.
Po trzecie, atocokolwiek() nie wykrywa błędnych danych wejściowych i proponowanie użycia tych funkcji do parsowania wejścia od użytkownika jest Evil(tm).

0

Kumashiro to nie jest kwestia tego, że nie chce mi się czytać książki. Po prostu nie potrafię ogarnąć tego zdania. Jak funkcja main() ma przekazać pobraną wartość (jako argument) do mojej funkcji?

0

Najnormalniej na świecie.
Tworzysz sobie osobną funkcję, która jako argument przyjmuje liczbę typu float. W funkcji main przekazujesz wczytaną (lub po prostu liczbę) tej funkcji i wyświetlasz wynik. Czego nie rozumiesz?

PS. Tu chodzi o zwykłe wczytanie liczby w main i wywołanie na niej funkcji, także bez kombinowania ;).

0

Łoo;D To po co autor książki to tam pogmatwał?;D Pogubiłem się trochę ale dzięki;)

A jeszcze z innej beczki, jakbym chciał to zrobić za pomocą pętli while w ten sposób, że gdy wpisuję liczbę większą lub mniejszą 0 to normalnie liczy sześcian tej liczby, a gdy wpiszę 0 to program kończy pracę to jak mam to zapisać? Gdy piszę:

while (liczba <> 0) 

to kompilator wywala mi błąd. Ale jak wpiszę:

while (liczba < 0) 

lub

while (liczba > 0) 

to niby jest w porządku. Jak więc zaznaczyć, że ma być ">" lub "<" od 0 ale nie "=" 0?

0
bakłażan9494 napisał(a):

Kumashiro to nie jest kwestia tego, że nie chce mi się czytać książki. Po prostu nie potrafię ogarnąć tego zdania. Jak funkcja main() ma przekazać pobraną wartość (jako argument) do mojej funkcji?

Zadanie domowe #1:
Przeanalizuj poniższy kod. Co się dzieje? Dlaczego po wywołaniu pierwszej funkcji zmienna value w main się nie zmieniła, a po wywołaniu drugiej funkcji już ma inną wartość?

#include <stdio.h>


float  by_value(float  v)
{
    return v + 1.0;
}


void  by_ptr(float  *v)
{
    *v += 1.0;
}


int  main(void)
{
    float   value, tmp;


    /* Nadajemy wartości początkowe */
    value = 10.0;
    tmp = 0.0;
    printf("1. value = %.1f; tmp = %.1f\n", value, tmp);

    /* Przekazanie przez wartość */
    tmp = by_value(value);
    printf("2. value = %.1f; tmp = %.1f\n", value, tmp);

    /* Przekazanie przez wskaźnik; zwróć uwagę, że operujemy tylko na `value' */
    by_ptr(&value);
    printf("3. value = %.1f; tmp = %.1f\n", value, tmp);

    return 0;
}

Zadanie domowe #2:
Przeczytaj rozdział dotyczący funkcji w książce, lub zmień książkę (polecam "Język ANSI C" Kernighana i Ritchie).

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