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.