Matura 2012 (maj). Zadanie 2. Diamenty

Matura 2012 (maj). Zadanie 2. Diamenty

W sejfie jubilera znajduje się n diamentów wycenionych odpowiednio na d1, …, dn złotych, przy czym żadne dwa diamenty nie są w tej samej cenie. Jubiler nie ujawnia cen diamentów, co oznacza, że tylko on zna ceny d1, …, dn.
Dla zainteresowanych klientów jubiler wykonuje operację porównania cen diamentów: dla wskazanych numerów i oraz j podaje, czy diament o numerze i ma wyższą cenę, niż diament o numerze j.
Przyjmijmy następujący sposób oznaczania wyniku operacji porównania cen:
większe( i , j ) = prawda, gdy d1 > d
większe( i , j ) = fałsz, gdy d1 < d

  1. Poniżej prezentujemy pewien algorytm korzystający z operacji porównania cen:
 Krok 1. j ← 0
 Krok 2. i ← 1
 Krok 3. dopóki i < n
   jeżeli większe(i, i i + 1) to j ← j + 1
   i ← i + 1
 Krok 4. wypisz j

Uzupełnij poniższą tabelę, podając wyniki działania powyższego algorytmu po jego wykonaniu dla wskazanych danych.

n d1, …, dn Wynik algorytmu
4 5 2 1 6 2
4 2 5 1 2 1
4 1 2 3 4 0
4 4 3 2 1 3

Komentarz:
Musimy podać wartość zmiennej j. Zmienna j jest zwiększona o jeden pod warunkiem, że funkcja większe(i,j) zwróci prawdą (true). Prawda jest wtedy, kiedy element i tablicy jest większy od elementów i+1, czyli element sprawdzany jest większe od elementu następnego.

Algorytm

#include <iostream>
#define N 4
using namespace std;
int d[N] = {1,2,3,4};
bool wieksze(int i, int j) {
  if (d[i]>d[j]) return true;
  else return false;
}
int main()
{
  int j=0;
  int i=0;
  while (i<N-1) {
    if (wieksze(i,i+1)) j++;
    i++;
  }
  cout << j << endl;
  return 0;
}

 

  1. Zapisz algorytm (w postaci listy kroków, schematu blokowego lub w wybranym języku programowania), który dla podanego ciągu cen diamentów znajduje numer diamentu o najwyższej cenie. W algorytmie zastosuj operację większe porównania cen dwóch diamentów.

Specyfikacja:

Dane:

n – liczba naturalna większa od zera oznaczająca liczbę diamentów
d1, …, d– ceny diamentów o kolejnych numerach 1, 2, …, n; ceny dwóch różnych diamentów są różne

Wynik:

i – numer diamentu o najwyższej cenie

Algorytm:

#include <iostream>
#define N 4
using namespace std;
int d[N] = {2,5,1,2};
bool wieksze(int i, int maks) {
  if (d[i]>d[maks]) return true;
  else return false;
}
int main()
{
  int maks=0;
  int i=0;
  while (i<N-1) {
  if (wieksze(i,maks)) maks = i;
  i++;
 }
  cout << maks << endl;
  return 0;
}

 

Leave a Reply

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>