wtorek, 2 października 2012

Lekcja 4: Rozwiązywanie problemów za pomocą komputera


1. Algorytm - jest to skończony ciąg jasno określonych czynności niezbędnych do wykonania pewnego rodzaju zadań. Ma przeprowadzić system z pewnego stanu początkowego do pożądanego stanu końcowego. Jest to słowo powszechnie używane w informatyce, a także matematyce. Za pomocą algorytmów są tworzone m.in. programy komputerowe.


2.PROBLEM KASJERA:


a) opis problemu - często robiąc zakupy w różnego rodzaju sklepach możemy zaobserwować, iż kasjer pracujący na kasie nie ma nam jak wydać reszty. Najczęściej wynika to z tego, iż kasjer nieumiejętnie posłużył się banknotami, wydając banknoty o niskim nominale, gdy miał możliwość wydania banknotów o wysokim nominale. Aby uniknąć tego rodzaju sytuacji kasjer powinien kierować się algorytmem, polegającym na wydawaniu jak najmniejszej ilości banknotów lub monet.

b) Metody rozwiązania

- rozwiązanie za pomocą listy kroków



Opis słowny algorytmu wydawania reszty.


Dane: Kwota pieniędzy do wydania, nominały banknotów i bilonu uporządkowane malejąco

Wyniki: Ilość poszczególnych nominałów banknotów i bilonu
Krok 1: Ustalenie wartości początkowych
Krok 2: Sprawdzamy, ile razy najwyższy nominał mieści się w kwocie do wydania
Krok 3: Obliczamy resztę do wydania: poprzednia kwota - obliczona ilość * nominał
Krok 4: Przechodzimy do niższego nominału
Krok 5: Jeśli reszta do wydania = 0 [stop] w przeciwnym razie powtarzamy kroki 2 - 4

- rozwiązanie za pomocą schematów blokowych







- rozwiązanie w programie EXEL



- rozwiązanie za pomocą VBA i TURBO PASCAL listing


program Reszta; {obliczenia w petli WHILE} 

uses crt;const N: Array [1..8] of integer = (200, 100, 50, 20, 10, 5, 2, 1);var i,P,R: longint;beginclrscr;Write('Podaj reszte do wyplacenia: ');ReadLn(R);i:=1;while (R>0) do     {dopoki nie wydano calej reszty}      begin         if R>= N[i] then  {sprawdz czy mozna wydac danym nominalem}             begin                   P:= R div N[i];  {ile razy wydac dany nominal}                   R:= R - (P*N[i]);{zmniejsz reszte o wydany nominal}                   WriteLn(N[i], ' x ', P); {wypisz wynik}              end;              inc(i);         {rozpatrz kolejny nominal}      end;repeat until keypressed;end.
2. 

program wydawanie_reszty; uses crt; var reszta : longint;

begin
clrscr;
  writeln('podaj kwote: ');readln(reszta);  writeln;
  writeln(reszta div 200,'banknotow 200zl');
  reszta:=reszta mod 200;
  writeln(reszta div 100,'banknotow 100zl');
  reszta:=reszta mod 100;
  writeln(reszta div 50,'banknotow 50zl');
  reszta:=reszta mod 50;
  writeln(reszta div 20,'banknotow 20zl');
  reszta:=reszta mod 20;
  writeln(reszta div 10,'banknotow 10zl');
  reszta:=reszta mod 10;
  writeln(reszta div 5,'monet 5zl');
  reszta:=reszta mod 5;
  writeln(reszta div 2,'monet 2 zl');
  reszta:=reszta mod 2;
  writeln(reszta, ' monet 1 zl';
  repeat until keypressed;
end.beginclrscr;  writeln('podaj kwote: ');readln(reszta);  writeln;  writeln(reszta div 200,'banknotow 200zl');  reszta:=reszta mod 200;  writeln(reszta div 100,'banknotow 100zl');  reszta:=reszta mod 100;  writeln(reszta div 50,'banknotow 50zl');  reszta:=reszta mod 50;  writeln(reszta div 20,'banknotow 20zl');  reszta:=reszta mod 20;  writeln(reszta div 10,'banknotow 10zl');  reszta:=reszta mod 10;  writeln(reszta div 5,'monet 5zl');  reszta:=reszta mod 5;  writeln(reszta div 2,'monet 2 zl');  reszta:=reszta mod 2;  writeln(reszta, ' monet 1 zl';  repeat until keypressed;end.


-oraz za pomocą C++ listing 



//Wydawanie reszty, C++


#include <iostream>

#include <stdlib.h>

using namespace std;


int main(int argc, char *argv[])

{
  //tablica dostepnych nominalow
  int N[8]={200, 100, 50, 20, 10, 5, 2, 1};
  int R,P, i;

  cout << "Podaj reszte do wyplacenia: ";

  cin >> R;

  i=0;

  while (R>0)       //dopoki nie wydano calej reszty
  {
    if (R >= N[i])  //sprawdz czy mozna wydac danym nominalem
    {
      P=R / N[i];   //ile razy wydac dany nominal
      R=R-(N[i]*P); //zmniejsz reszte o wydany nominal
      cout << N[i] << " x " << P << endl; //wypisz wynik
    }
    i++;            //rozpatrz kolejny nominal
  }

  system("PAUSE");

  return 0;
}

Brak komentarzy:

Prześlij komentarz