Podstawy Programowania - Ćwiczenia 9

Prowadzący: Rafał Witkowski
Temat: Debugowanie

Aby uruchomić debugera w programie należy używać poleceń z menu pod przyciskiem Run.
Podstawowe z nich to:

F8 - wykonaj program linia po linii (wykonaj kolejną linię programu)
F7 - wykonaj kolejną linię programu, chyba, że jest to procedura, wtedy wykonaj pierwszą linię procedury
F4 - wykonaj program do linii w której znajduje się kursor
Ctrl+F5 - dodaj zmienną do Watcha

Watch to okienko, w którym można podglądać wartości zmiennych wykorzystywanych w programie.

Jeśli wykonywaną linią programu jest wczytywanie danych, obsługa przełączy się do czarnego okienka DOSowego programu i będzie czekał, aż wpiszemy mu tam jakąś liczbę. Po wpisaniu obsługa przełączy się z powrotem do Dev, gdzie będzie można kontynuować debugowanie.

Zadanie 1

Poniżej podany został kod programu liczący błędnie NWD wg algorytmu Euklidesa. Zadanie polega na znalezieniu błędu w poniższym kodzie (przy pomocy debugowania), a poprawnego wysłania na sprawdzarkę (zadanie ppr25). (UWAGA! do rozwiązania zadania wystarczy zauważyć, że NWD(a,b,c,d) = NWD(a,NWD(b,NWD(c,d))).

//---------------------------------------------------------------------------

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
int d,i;
int liczba1, liczba2; // deklaracja zmiennych
int liczba[3];

scanf("%d",d);
while (d--)
{
for (int i=1 ; i<=2 ; i++) scanf("%d",&liczba[i]);
liczba1 = liczba[1];
liczba2 = liczba[2];
do
{
if (liczba1 > liczba2) liczba2 = liczba1 - liczba2;
else liczba1 = liczba2 - liczba1;
} while (liczba1 != liczba2);
printf("%d\n",liczba2);
}

  return 0;
}
//---------------------------------------------------------------------------

Uwaga!

Konstrukcja głównej pętli programu while (d--) jest jak najbardziej prawidłowa.

Zadanie 2

Poniżej podany został kod programu wyznaczający błędnie liczby pierwsze wg algorytmu Sita Eratostenesa. Zadanie polega na znalezieniu błędu w poniższym kodzie (przy pomocy debugowania), a poprawnego wysłania na sprawdzarkę (zadanie ppr28).
#include <stdio.h>

int main()
{
  char t[1000001];
  int n = 1000001;
  int i,j,x;
  for (i=1; i<n; i++) t[i] = 'T';
  for (i=2; i*i<=n; i++)
  {
    if (t[i] == 'N') continue;
    for (j=i; j<=n; j+=i) t[i] = 'N';
  }

  scanf("%d",&i);
  while (n>0)
  {
    scanf("%d",&x);
    printf("%c\n",t[x]);
    n--;
  }

  return 0;
}

Pliki

Każde z wcześniejszych zadań można rozwiązać przy użyciu sczytywania i wypisywania danych do plików. Materiły na ten temat znajdują się na platformie OLAT. Należy wybrać sobie jedno, dowolne zadanie oraz przerobić je tak, aby dane były sczytywane z pliku o określonym formacie i zapisywane do pliku o określonym formacie.