PRM, Laboratorium nr 4, semestr letni 2014/2015


Tematyka: Funkcje, przekazywanie argumentów przez wartość oraz przez wskazanie.

Zadanie 1. Wskaźniki, funkcje, zmienne globalne i lokalne, przekazywanie argumentów przez wartość/wskazanie, modyfikator const.

  1. Utworzyć nowy projekt l4z1 i do głównego pliku projektu skopiować zawartość pliku źródłowego z1.c
  2. Zapoznać się z definicją funkcji suma, która zwraca pewną wartość. (linie 6-8, linie 40-44)
  3. Zapoznać z uproszonym sposobem deklaracji funkcji. Co się stanie, gdy usuniemy deklarację tej funkcji? Co się stanie, gdy usuniemy definicję tej funkcji? (linie 10-14, linie 77-82, linie 46-47)
  4. Zaobserwować co stanie się, jeżeli argument funkcji zadeklarowano jako const, a funkcja wykonuje operacje na tej zmiennej (linie 25-27)
  5. Zapoznać się z widocznością zmiennych globalnych i lokalnych, oraz sposobami deklarowania i wywoływania funkcji. (linia 3, linie 52-54)
  6. Zapoznać się ze sposobem deklaracji wskaźników, operatorem adresowania (znak &) oraz operatorem wyłuskania wartości ze wskaźnika (znak *). Na jaką wartość pokazuje wskaźnik po modyfikacji zmiennej rok? (linie 57-64)
  7. Zapoznać się ze sposobami przekazywania argumentów przez wartość i wskazanie. Na tej podstawie wytłumaczyć, dlaczego funkcja scanf wymaga argumentów poprzedzonych znakiem & (linie 68-72, linie 29-35)

Zadanie 2. Przekazywanie argumentów do funkcji przez wartość i wskazanie.

  1. Utworzyć nowy projekt l4z2 i do głównego pliku projektu skopiować zawartość pliku źródłowego z2.c
  2. Uruchomić program i zapoznać się z jego działaniem.
  3. Zmodyfikować program tak, aby realizował (poprawnie) zadanie zamiany wartości zmiennych przez wywołanie funkcji. Wskazówki: skorzystać z przekazania argumentu przez wskazanie i wprowadzić dodatkową zmienną lokalną.

Zadanie 3. Zadanie samodzielne.

Grupa A

Napisać i uruchomić program do obliczania natężenia prądu stałego płynącego przez rezystor oraz wydzielającej się na nim mocy. Użytkownik wprowadza wartość oporu oraz napięcie odłożone na rezystorze. Program powinien zawierać funkcję o sygnaturze:
      int oblicz_parametry_rezystora(double opor, double napiecie, double* wsk_natezenie, double* wsk_moc);
    
Funkcja powinna zwracać 0 gdy obliczenia się powiodą, 1 gdy nie jest możliwe wykonanie obliczeń (tzn. gdy opor <= 0). Jeżeli obliczenia się powiodą, wartości natężenia i mocy powinny być wpisane pod adresy w pamięci zawarte we wskaźnikach wsk_natezenie oraz wsk_moc.

Przykładowy wynik działania programu:
      
        Proszę podać opór rezystora [om]: 1
        Proszę podać napięcie odłożone na rezystorze [V]: 5
        Natężenie wynosi: 5 [A], moc: 25 [W]
        
      
        Proszę podać opór rezystora [om]: 0
        Proszę podać napięcie odłożone na rezystorze [V]: 5
        Opór jest mniejszy bądź równy zero!
      
    

Grupa B

Napisać i uruchomić program wyznaczający pole powierzchni oraz objętość kuli na podstawie jej promienia. Program powinien zawierać funkcję o sygnaturze:
      int oblicz_pole_objetosc(double promien, double* wsk_pole, double* wsk_objetosc);
    
Funkcja ta zwraca 0 gdy obliczenia się powiodą i 1 gdy nie jest możliwe wykonanie obliczeń (tzn. gdy promien < 0). Jeżeli obliczenia się powiodą, pole powierzchni i objetosc powinny być wpisywane pod adresy w pamięci zawarte we wskaźnikach wsk_pole oraz wsk_objetosc.

Przykładowe wyniki działania programu:
      
        Prosze podać promien kuli: 3
        Pole powierzchni i objetosc wynosza: 12.57 i 4.19

        Prosze podac promien kuli: -1.3
        Promien mniejszy od zera!