Laboratorium 2 - Przecięcia zera

Zakres materiału

Kodowanie. Uruchamianie programu. Stałe symboliczne. Instrukcja pętli (while).

Przygotowanie do zajęć

Przed przystąpieniem do zajęć należy przygotować 3 opisane poniżej programy oraz zaproponować algorytm wykrywający przecięcia zera zgodnie z podaną specyfikacją.

  1. Programy:

  2. Zaproponuj i zapisz kompletny algorytm pozwalający na realizację następującego zadania (zadanie jest inspirowane programem do wyliczania częstotliwości pracy serca na podstawie sygnału ekg):

  3. (Opcjonalne) Generatywny transformer wstępnie przetrenowany (jak sam siebie nazywa:) poproszony o rozwiązanie prostszego zadania: ''Napisz w języku C program, który w ciągu liczb całkowitych będzie zliczał liczbę zmian znaku liczby. Wartość 99 oznacza koniec danych'' zaproponował następujący kod:
    #include <stdio.h>
    
    int main() {
        int liczba, poprzednia_liczba, zmiany_znaku = 0;
    
        printf("Podaj liczby calkowite (99 konczy wprowadzanie):\n");
    
        scanf("%d", &liczba);
        poprzednia_liczba = liczba;
    
        while (liczba != 99) {
            scanf("%d", &liczba);
    
            if ((liczba > 0 && poprzednia_liczba < 0) || (liczba < 0 && poprzednia_liczba > 0)) {
                zmiany_znaku++;
            }
            poprzednia_liczba = liczba;
        }
    
        if (poprzednia_liczba != 0) {
            zmiany_znaku--; // Nie uwzględniamy ostatniej liczby niezerowej jako zmiany znaku
        }
    
        printf("Liczba zmian znaku: %d\n", zmiany_znaku);
        return 0;
    }
    
    Przetestuj, skomentuj i popraw.

Uwagi do zadania algorytmicznego

W celu realizacji postawionego powyżej zadania algorytmicznego:

Zadania do wykonania

Wskazówki

  1. Warto zauważyć, że do stwierdzenia faktu wystąpienia przecięcia zera, ze strumienia danych wejściowych potrzebne są jedynie same wartości zmierzone. Oznacza to, że dane określające czas będą w procesie obliczeniowym pomijane. Można tego dokonać:

  2. Proszę zauważ, że do poprawnej identyfikacji wystąpienia w danym miejscu przecięcia zera potrzebne są jedynie dwie wartości z podawanej sekwencji i tyle tylko ze strumienia danych wejściowych należy zapamiętywać w programie – przecięcie następuje, jeśli te wartości są przeciwnych znaków.

  3. Zastanów się, co zaproponowany algorytm będzie robił, gdy przecięcie pojawi się na granicy pomiędzy kolejnymi grupami (np. ostatnia liczba w poprzedniej grupie dodatnia, pierwsza w następnej – ujemna) – takie przecięcie nie powinno zostać zaliczone do żadnej z grup.

Testy oprogramowania

Pamiętaj o rzetelnym przeprowadzeniu testów napisanego programu. To, że program działa, nie oznacza, że działa poprawnie. Zadbaj, by każdy z testów sprawdzał oddzielny aspekt działania algorytmu i został właściwie opisany w sprawozdaniu.

Sprawozdanie

Sprawozdanie powinno zawierać:

Pytania kontrolne

  1. Przypomnij, jakie bloki są wykorzystywane do tworzenia diagramu algorytmu, a jakie diagramu czynności.
  2. W jaki sposób deklaruje się w języku C stałe symboliczne? Podaj przykład.
  3. Jakiego typu powinna być zmienna pozwalająca na zapisanie wartości częstotliwości?
  4. W jaki sposób można wczytać liczbę z terminala do programu w C?
  5. Jak wygląda składnia instrukcji warunkowej if?
  6. Jak wygląda składnia instrukcji pętli while?
  7. Napisz instrukcję pętli while, która będzie zwiększała wartość zmiennej dopóki nie stanie się ona większa od 99.
  8. Zapisz instrukcję, która pozwoli na sprawdzenie, czy dane wejściowe programu są poprawne (mieszczą się w zadanym przedziale).
  9. Jak wygląda warunek stopu w rozważanym zadaniu?

About this document ...

This document was generated using the LaTeX2HTML translator Version 2021.2 (Released July 1, 2021)

The command line arguments were:
latex2html -html_version 3.2,latin2,unicode -split 0 -no_navigation PProg_lab_02

The translation was initiated on 2023-10-05