Cvičenie č. 4 - Jednoduché úlohy v Pascale

Úlohy

Podmienky, reálne čísla

Kvadratická rovnica

Napíšte program, ktorý si zo štandardného vstupu postupne načíta parametre \(a,b,c\) kvadratickej rovnice v tvare \( ax^2 + bx + c = 0\) a vráti všetky jej koreňe. Ošetrite všetky možnosti, tj. rovnica má:

  • 2 reálne korene
  • 1 réalny koreň
  • 2 komplexné korene

Ak si nespomínate na riešenie kvadratickej rovnice, tak si pomôžte wikipediou.

Pomôcka: Pre odmocninu použite funkciu sqrt()

Riešenie

program KvadratickaRovnica;

var
	a, b, c, d: Double;

begin
	write('a = ');
	readln(a);
	write('b = ');
	readln(b);
	write('c = ');
	readln(c);

	d := b*b - 4*a*c;

	if d > 0 then begin
		d := sqrt(d) / (2 * a);
		b := -b / (2 * a);
		writeln('2 realne korene: ', b + d, b - d);
	end else if (d = 0) then begin
		writeln('jeden realny koren: ', -b / (2*a));
	end else begin
		d := sqrt(-d) / (2 * a);
		b := -b / (2 * a);
		writeln('2 komplexne zdruzene korene: ',
                         b, '+', d, 'i ', b, '-', d, 'i');
	end;

	readln;
end.

Cykly a polia

Kladné čísla

Napíšte program, ktorý na vstup dostane ľubovoľne dlhú postupnosť celých čísel. Túto postupnosť úplne rovnako vypíše, ale len do prvého záporného čísla na ktoré narazí (to už nevypíše).

Príklad

Vstup:

1 2 42 5 2 1 -1 3 41 421 1

Výstup:

1 2 42 5 2 1

Riešenie

program kladneCisla;

var a : integer;

begin
  read(a);
  while (a > 0) do
    begin
      write(a, ' ');
      read(a);
    end;
  writeln();
end.

Delitelia v intervale

Napíšte program, ktorý dostane na vstup na prvom riadku 3 celé čísla: dolný limit, horný limit a deliteľ. Predpokladajte, že vždy platí dolný limit < horný limit. Program následne vypíše na jeden riadok všetký celé čísla z intervalu [dolný limit, horný limit], ktoré sú deliteľné deliteľom.

Príklad

Vstup:

1 100 5

Výstup:

5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100

Riešenie

program delitelia;

var a, b, d, i : integer;

begin
  readln(a, b, d);
  for i:=a to b do
  if (i mod d = 0) then
    write(i, ' ');
  writeln();
end.

Otočenie vstupu

Napíšte program, ktorý dostane na vstup (všetko na jednom riadku) celé číslo n a po ňom ďaľších n celých čísel. Program následne vypíše túto postupnosť n čísel v opačnom poradí.

Príklad

Vstup:

5 1 2 3 4 5

Výstup:

5 4 3 2 1

Riešenie

program otocenieVstupu;

var n, i : integer;
    cisla : array[1..1000] of integer;

begin
  read(n);
  for i:=1 to n do
    read(cisla[i]);
  for i:=n downto 1 do
    write(cisla[i], ' ');
  writeln();
end.

Deliteľnosť

Test prvočíselnosti

Napíšte algoritmus, ktorý dostane na vstup jedno číslo, a vráti yes ak sa jedná o prvočíslo, a no inak.

Príklad 1.

Vstup:

16

Výstup:

no

Príklad 2.

Vstup:

13

Výstup:

yes

Riešenie

program testPrvociselnosti;

var x,i : integer;
    prvocislo : boolean;

begin
  read(x);
  prvocislo:=true;
  for i:=2 to trunc(sqrt(x)) do
    if (x mod i = 0) then
      begin
        prvocislo := false;
        break;
      end;
  if (prvocislo) then
    writeln('yes')
  else
    writeln('no');
end.

Domáce úlohy

V CodEx-e nájdete svoje 2 povinné domáce úlohy: Maximum v posloupnosti (výskyty) a PPPPP 2.6 Všechna prvočísla.

Poznámka: Na vyriešenie druhej úlohy (Všechna prvočísla) použite algoritmus Eratostenovo sito, ktorý je pekne popísaný na Wikipedii.

Termín odovzdania: 1. 11. 2016 (23:59)