Prve vežbe programiranja sisaju

11. 10. 2024.

Ovo su prve vežbe sa uvoda u programiranje i dok sam ih samostalno radio ljutio sam se gledajući rešenja. Ispod svakog školskog rešenja se nalaze moja, moje jedino pitanje je da li je to što su moja rešenja kraća znak da su nepregledna? Jesam li propustio neke smernice koje školske primere čine kvalitetnijim kodom?

Slična stvar me je iritirala i na CS0 pripremnim predavanjima. Profesori kao da prave jako čudna rešenja, naizgled višestruko sporija.

I

/* Program koji racuna razliku dva ucitana cela broja. */
class Razlika {
	public static void main(String[] args) {
		int prvi, drugi, razlika;
		// ucitavanje prvog broja u promenljivu prvi
		System.out.print("Unesite prvi ceo broj: ");
		prvi = Svetovid.in.readInt();
		// ucitavanje drugog broja u promenljivu drugi
		System.out.print("Unesite drugi ceo broj: ");
		drugi = Svetovid.in.readInt();
		// izracunavanje razlike brojeva i smestanje rezultata
		// u promenljivu razlika
		razlika = prvi - drugi;
		// stampanje ucitanih brojeva i rezultata
		System.out.println(prvi + " - " + drugi + " = " + razlika);
	}
}

class Razlika {
	public static void main(String[] args) {
		int a = Svetovid.in.readInt("Unesite prvi ceo broj: ");
		int b = Svetovid.in.readInt("Unesite drugi ceo broj: ");
		Svetovid.out.println("Razlika ovih brojeva je " + (a-b) + ".");
	}
}

II

/* Program koji racuna obim i povrsinu kruga datog poluprecnika. */
class Krug {
	public static void main(String[] args) {
		double poluprecnik, povrsina, obim;
		// unos poluprecnika u promenljivu poluprecnik
		System.out.print("Unesite poluprecnik kruga: ");
		poluprecnik = Svetovid.in.readDouble();
		// izracunavanje povrsine i obima
		povrsina = poluprecnik * poluprecnik * Math.PI;
		obim = 2.0 * poluprecnik * Math.PI;
		// stampanje rezultata
		System.out.print("Povrsina kruga sa unetim poluprecnikom je ");
		System.out.println(povrsina + ", a njegov obim je " + obim);
	}
}

class Krug {
	public static void main(String[] args) {
		double r = Svetovid.in.readDouble("Unesite poluprecnik: ");
		Svetovid.out.println("Obim: " + Math.PI*2*r);
		Svetovid.out.println("Povrsina: " + Math.PI*r*r);
	}
}

III

/* Program koji racuna apsolutnu vrednost unetog celog broja. */
class Absolute {
	public static void main(String[] args) {
		int x, abs;
		// unos broja u promenljivu x
		System.out.print("Unesite ceo broj: ");
		x = Svetovid.in.readInt();
		// izracunavanje apsolutne vrednosti broja
		abs = x;
		if (x < 0) {
			abs = -x;
		}
		// stampanje rezultata
		System.out.println("Apsolutna vrednost broja je: " + abs);
	}
}

class Absolute {
	public static void main(String[] args) {
		int a = Svetovid.in.readInt("Unesite ceo broj: ");
		if (a < 0) {
			a = -a;
		}
		Svetovid.out.println("Apsolutna vrednost je: " + a);
	}
}

IV

/* Program koji racuna vrednost funkcije
   {
   x^2, x < 0
   f(x) = {
   42, x = 0
   { ln(x), x > 0
   */
class Funkcija {
	public static void main(String[] args) {
		double x, rez;
		// unos argumenta funkcije
		System.out.print("Unesite vrednost argumenta funkcije: ");
		x = Svetovid.in.readDouble();
		// izracunavanje
		if (x < 0) {
			rez = x * x;
		}
		else if (x == 0) {
			rez = 42;
		}
		else {
			rez = Math.log(x);
		}
		// ispis rezultata
		System.out.println("Za vrednost argumenta " + x +
				" vrednost funkcije iznosi " + rez);
	}
}

class Funkcija {
	public static void main(String[] args) {
		double x = Svetovid.in.readDouble("Unesite x: ");
		if (x < 0) {
			x = x * x;
		} else if (x == 0) {
			x = 42;
		} else {
			x = Math.log(x);
		}
		Svetovid.out.print("f(x) = " + x);
	}
}

V

/* Program koji ucitava dva broja, znak za operaciju (+: sabiranje,
 *: mnozenje, /: deljenje), primenjuje datu operaciju na ucitane
 brojeve i ispisuje rezultat izracunavanja. */
class Operacija {
	public static void main(String[] args) {
		double broj1, broj2, rezultat;
		char op;
		// unos operanada i operacije
		System.out.print("Unesite prvi broj: ");
		broj1 = Svetovid.in.readDouble();
		System.out.print("Unesite drugi broj: ");
		broj2 = Svetovid.in.readDouble();
		System.out.print("Unesite znak za operaciju (+, *, /): ");
		op = Svetovid.in.readChar();
		// izracunavanje i ispis rezultata
		if ((op == '+') || (op == '*') || (op == '/')) {
			if (op == '+') {
				rezultat = broj1 + broj2;
			}
			else if (op == '*') {
				rezultat = broj1 * broj2;
			}
			else {
				if (broj2 != 0) {
					rezultat = broj1 / broj2;
				}
				else {
					rezultat = 0;
				}
			}
			System.out.println("Rezultat je: " + rezultat);
		}
		else {
			System.out.println("Operacija nije dobro zadata.");
		}
	}
}

class Operacija {
	public static void main(String[] args) {
		double a = Svetovid.in.readDouble("Unesite prvi broj: ");
		double b = Svetovid.in.readDouble("Unesite drugi broj: ");
		char op = Svetovid.in.readChar("Unesite operaciju [+ * /]: ");
		switch (op) {
			case '+':
				Svetovid.out.println(a + " + " + b + " = " + (a+b));
				break;
			case '*':
				Svetovid.out.println(a + " * " + b + " = " + (a*b));
				break;
			case '/':
				Svetovid.out.println(a + " / " + b + " = " + (a/b));
				break;
			default:
				Svetovid.out.println("Pogresna operacija!");
		}
	}
}

VI

/* Program koji racuna vrednost x^n za dati realan broj x
   i prirodan broj n. */
class Stepen {
	public static void main(String[] args) {
		double x, rez;
		int n, i;
		// ucitavanje realnog broja u promenljivu x
		System.out.print("Unesite realan broj x: ");
		x = Svetovid.in.readDouble();
		// ucitavanje celog broja u promenljivu n
		System.out.print("Unesite prirodan broj n: ");
		n = Svetovid.in.readInt();
		// izracunavanje rezultata u promenljivoj rez
		rez = 1.0;
		for (i = 0; i < n; i++) {
			rez = rez * x;
		}
		// stampanje ucitanih brojeva i rezultata
		System.out.println(x + "^" + n + " = " + rez);
	}
}

class Stepen {
	public static void main(String[] args) {
		double x = Svetovid.in.readDouble("Unesite osnovu: ");
		int n = Svetovid.in.readInt("Unesite eksponent: ");
		double rez = 1;
		Svetovid.out.print(x + " ^ " + n + " = ");
		while (n > 0) {
			rez = rez * x;
			n--;
		}
		Svetovid.out.println(rez);
	}
}

VII

/* Program koji izracunava vrednost izraza (sume)
   1/1 + 1/2 + ... + 1/n za dati prirodan broj n. */
class Suma {
	public static void main(String[] args) {
		int n, i;
		double rez;
		// unos prirodnog broja n
		System.out.print("Unesite prirodan broj n: ");
		n = Svetovid.in.readInt();
		// izracunavanje sume
		rez = 0.0;
		for (i = 1; i <= n; i++) {
			rez = rez + 1.0 / i;
		}
		// ispis rezultata
		System.out.println("Suma 1/i, i = 1..." + n + " je " + rez);
	}
}

class Suma {
	public static void main(String[] args) {
		int n = Svetovid.in.readInt("Unesite prirodan broJ: ");
		double suma = 0;
		for (int i = 1; i <= n; i++) {
			suma += 1.0 / i;
		}
		Svetovid.out.println("Suma 1/k, k=1..." + n + " je " + suma);
	}
}