Uvod u programiranje

Maja Čić


Postupak razvoja programa



  1. Točno odrediti problem koji se želi riješiti.

    Programi se obično pišu da bi izvršili određeni zadatak, ali zadatak ne mora biti uvijek jasan sam po sebi. Potrebno je prikupiti dodatne podatke da bi se zadatak mogao točno odrediti. Jasno određivanje problema otklanja mogućnosti nesporazuma i olakšava postupak razvoja programa.

  2. Odrediti ulaze koje će program tražiti i izlaze koje će program stvarati.

    Ulazi i izlazi programa moraju biti određeni da bi se program dobro uklopio s drugim djelovima razvojnog postupka u jedinstvenu cjelinu.

  3. Rastaviti program na klase i pripadajuće metode.

    Odrediti jednu ili više klasa i njihovo djelovanje, međusobno i sa vanjskim svijetom. Za svako međudjelovanje odrediti zasebnu metodu.

  4. Razviti algoritme koji će biti primjenjeni u pojedinim metodama.

    Algoritam je opis postupka korak po korak do konačnog rješenja problema. Potrebno je pronaći logičan način za podjelu većih problema na manje sve dok se čitav zadatak ne podijeli na niz malih, jednostavnih i lako razumljivih zadataka. Nakon toga, ti mali zadaci se ponovo rastavljaju dok se ne dođe dijelova koji se mogu iskazati Java naredbama. Ovaj postupak se najčešće izvodi korištenjem pseudokoda.

  5. Prevođenje algoritma u Java naredbe.

    Ako je rastavljanje problema dobro obavljeno, ovaj korak se svodi na jednostavno zamjenjivanje pseudokoda odgovarajućim Java naredbama.

  6. Testiranje konačnog Java programa.

    Najduži i najvažniji dio razvojnog postupka. Dijelove programa je potrebno, ako je moguće, prvo testirati pojedinačno, a zatim i program u cjelini. Potrebno je provjeriti da program ispravno radi sa svim dozvoljenim vrstama ulaznih podataka. Često se događa da se program pisan i testiran samo na uobičajenom ulaznom skupu ruši ili daje netočne rezultate samo zbog korištenja različitog ulaznog skupa. Ako program sadrži grananja potrebno je provjeriti sva moguća grananja da bi se provjerilo ispravnost rada programa u svim mogućim uvjetima.





Ovako definiran postupak razvoja programa na primjeru izgleda ovako:

Zadatak: Razviti i napisati program za nalaženje korijena kvadratne jednadžbe bez obzira na vrstu.

1. Točno odrediti problem koji se želi riješiti.

Problem za ovaj zadatak je vrlo jednostavan. Potrebno je napisati program koji računa korijene kvadratne jednadžbe, bez obzira jesu li različiti realni, jednaki realni ili kompleksni.

2. Odrediti ulaze i izlaze programa.

Ulazi koje će ovaj program tražiti su koeficjenti kvadratne jednadžbe a,b i c. Jednadžba ima oblik:
ax2+bx+c=0. Izlazi iz programa će biti korijeni kvadratne jednadžbe, bez obzira na vrstu.

3. Rastaviti program na klase i pripadajuće metode.

Ovaj korak će, za početak, biti jednostavam jer jednostavni problemi mogu biti riješeni korištenjem samo jedne klase. Za ovaj problem dovoljna je jedna klasa i jedna metoda. Neka ime klase bude KvadratnaJednadzba i neka je potklasa klase Object (ako se izričito ne definira ni jedna druga superklasa, sve nove klase su podklase klase Object). Jedina metoda u ovoj klasi se, naravno, zove main.

4. Razviti algoritme koji će biti primjenjeni u pojedinim metodama.

U ovom programu biti će samo jedna metoda. Main metoda može se rastaviti na tri glavna dijela, čije uloge su ulaz, obrada i izlaz podataka:

	Učitaj ulazne podatke
	Izračunaj korijene
	Ispiši korijene

Svaki od ovih glavnih dijelova može se rastaviti na manje, detaljnije dijelove. Postoje tri načina računanja korijena, ovisno o vrijednosti diskriminante, pa je potrebno koristiti if/else strukturu. Konačni pseudokod igleda:

	Uzmi podatke a,b i c
	Izračunaj vrijednost diskriminante (b*b-4.*a*c)
	if diskriminanta>0 {
		x1=(-b+Math.sqrt(diskriminanta))/(2.*a)
		x2=(-b-Math.sqrt(diskriminanta))/(2.*a)
		Ispiši poruku da jednadžba ima dva različita realna korijena
		Ispiši korijene
	}
	else if diskriminanta==0 {
		x1=-b/(2.*a)
		Ispiši poruku da jednadžba ima dva jednaka realna korijena
		Ispiši korijene
	}
	else {
		realniDio=-b/(2.*a)
		imaginarniDio=Math.sqrt(Math.abs(diskriminanta))/(2.*a)
		Ispiši poruku da jednadžba ima dva kompleksna korijena
		Ispiši korijene
	}

5. Pretvoriti algoritam u Java naredbe.

Konačni izgled Java koda:

/*
 * Namjena:
 * Ovaj program izračunava rješenja kvadratne jednadžbe oblika:
 * a*x*x + b*x + c = 0.
 * Računa rješenja bez obzira na vrstu korijena jednadžbe.
 *
*/
public class KvadratnaJednadzba {

   // Definiranje main metode
   public static void main(String[] args) {

      // Deklariranje i definiranje varijabli
      double a;                // Koeficjent uz x**2 jednadžbe
      double b;                // Koeficjent uz x jednadžbe
      double c;                // Konstanta jednadžbe
      double diskriminanta;    // Diskriminanta jednadžbe
      double imaginarniDio;    // Imaginarni dio rješenja
      double realniDio;        // Realni dio rješenja
      double x1;               // 1. rješenje jednadžbe
      double x2;               // 2. rješenje jednadžbe

      System.out.println("Ovaj program računa rješenja kvadratne ");
      System.out.println("jednadžbe oblika:");
      System.out.println("A * X**2 + B * X + C = 0.");
      
      a=1.;
      b=2.;
      c=1.;

      // Izračunavanje diskriminante
      diskriminanta = b*b - 4. * a * c;

      // Izračunavanje rješenja, ovisno o diskriminanti
      if (diskriminanta > 0. ) {

         // Dva realna rješenja...
         x1 = ( -b + Math.sqrt(diskriminanta) ) / ( 2. * a );
         x2 = ( -b - Math.sqrt(diskriminanta) ) / ( 2. * a );
         System.out.println("Ova jednadžba ima dva realna rješenja:");
         System.out.println("X1 = " + x1 + ", X2 = " + x2);
      }

      else if (diskriminanta == 0. ) {

         // Jedno dvostruko rješenje...
         x1 = ( -b ) / ( 2. * a );
         System.out.println("Ova jednadžba ima dva identična rješenja:");
         System.out.println("X1 = X2 = " + x1);
      }

      else {

         // Kompleksna rješenja...
         realniDio = ( -b ) / ( 2. * a );
         imaginarniDio = Math.sqrt( Math.abs(diskriminanta) ) / ( 2. * a );
         System.out.println("Ova jednadžba ima kompleksna rješenja:");
         System.out.println("X1 = " + realniDio + " +i " + imaginarniDio);
         System.out.println("X2 = " + realniDio + " -i " + imaginarniDio);
      }
   }
}

6. Testiranje konačnog Java programa provedite sami na laboratorijskim vježbama.


[ prethodna stranica | Početak | sljedeća stranica ]