TEEMA: Vektorid

Harjutus 1:   Fibonacci arvud: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,...

F[1] = 1; F[2] = 1;
F[3] = 2 = 1+1 = F[1]+F[2];
F[4] = 3 = 2+1 = F[2]+F[3];
jne.
alates n = 3:    F[n]=F[n-2]+F[n-1]

Koosta programm, mis täidab vektori Fibonacci arvudega.
Täienda programmi järgmiselt:
  • Kasutaja sisestab järgmised täisarvulised väärtused:
  • arv1 (väiksem kui massiivi mõõde! Lisa kontroll!)
  • arv2 (väiksem kui massiivi mõõde! Lisa kontroll!)
  • Väljastatakse loodud Fibonacci rea elemendid indeksitega arv1 kuni arv2, leida väljastatud arvude summa.

Võimalik lahendus



Harjutus 2:
  Analüüsi ja käivita näide:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main (void)
{
  int salajane, katse;

  /* juhuslike arvude generaatori initsialiseerimine */
  srand ( time(NULL) );

  /* juhusliku väärtuse genereerimine vahemikust 1..10 */
  salajane = rand() % 10 + 1;

   /* do..while tsükkel kestab kuni kasutaja arvab ära juhusliku numbri */ 
  do
  {
    printf ("Arva ära number (1 kuni 10): ");
    scanf ("%d",&katse);
    if (salajane<katse)
    {
        printf ("Salajane number on väiksem!\n");
    }   
    else if (salajane>katse)
    {
        printf("Salajane number on suurem!\n");
    }   
  } while (salajane!=katse);

  printf ("Palju onne! Arvasid ära, õige number oli %d!\n",salajane);
 
  return 0;
}

Muuda näidet nii, et salajane number genereeritakse vahemikus 50 kuni 59

Võimalik lahendus



Harjutus 3:   Analüüsi ja käivita näide:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* määrame elementide arvu loodavas vektoris*/
#define N 25

/* määrame maksimaalse võimaliku juhuarvu väärtuse*/
#define MAX_VALUE 100

int main(void)
{
    int i;           /*tsükliloendur*/
    int arvud[N];    /*täisarvude vektor*/
   
    srand(time(NULL));

    /* täidame vektori juhuslike arvudega*/
    for(i=0; i<N; i++)
    {
        /*genereerime juhusliku väärtuse vahemikust 0..MAX_VALUE */
        arvud[i]=rand()%MAX_VALUE+1;
    }
   
    /*väljastame vektori*/
    printf ("Juhuslike arvudega täidetud vektor on:\n");
    for(i=0; i<N; i++)
    {
        printf("%d ",arvud[i]);
    }
       
    printf("\n");
   
    return 0;
}   

Muuda näidet nii, et:

•    Elementide arv vektoris on 15
•    Juhuslikud väärtused genereeritakse vahemikus 1..1000
•    Loodud vektor väljastatakse verikaalselt koos elementide järjekorranumbritega.

Programmi töö näide:

Juhuslike arvudega täidetud vektor:
Jrk nr.   Number
  1        66
  2        89
  3        57
  4        41
  5        75
  …
 15        23



Võimalik lahendus


Harjutus 4:
  

Üks võimalik mullsortimise (Bubble Sort) pseudokood on selline:

 for i := 1 to N-1 do{
   for j := 0 to N-i do {
        if A[j] > A[j+1]

  
            temp := A[j],
               A[j] := A[j+1],
               A[j+1] := temp

   }

}       

 Koosta programm, mis järjestab etteantud 15 elemendist koosnevat vektorit.
Lihtsuse mõttes  algväärtusta vektori elemendid programmi alguses.

Katseta nii kasvavat kui kahanevat järjestamist



Võimalik lahendus

Harjutus 5:
  Genereeri juhulike väärtustega täidetud vektor pikkusega 30.
Vektoris olevad väärtused on vahemikus 1..55

Leia ja väljasta:
  • Vektori elementide summa
  • Vektori elementide keskmine (summa/elementide arv)
  • Vektori suurim element ja selle järjekorranumber
  • Vektori vähim element ja selle järjekorranumber
  • Elemendid, mis on suuremad kui keskmine väärtus
  • Elemendid, mis on väiksemad kui keskmine väärtus

Programmi töö näide:


23 55 55 3 24 31 29 19 44 41

Arvude summa on: 324
Arvude keskmine on: 32.40

Suurim arv on: 55
Väikseim arv on: 3

Suuremad kui keskmine on:  55 55 44 41
Väiksemad kui keskmine on: 23 3 24 31 29 19


Võimalik lahendus


Harjutus 6:  Eksamil on 4 ülesannet, millest kaks esimest annavad 20 punkti ning kaks
viimast kumbki 30 punkti. Leida eksamil saadud punktide arvule vastav hinne.
NB! Kasuta hinnete salvestamiseks MASSIIVI

Näiteks:
int hinded[4] – 4-elemendileine hindeid siseldav massiiv
int sum – muutuja, mis sisaldab punktide summat
int hinded[5] – 5-elemendiline hinnete massiiv, viimane element on punktide summa

Hinnete skaala on järgmine:
91..100 hinne 5
81..90 hinne 4
71..80 hinne 3
61..70 hinne 2
51..60 hinne 1
0..50 hinne 0

Näide: tudeng saab esimese ülesande eest 15p, teise ülesande ees 18p, kolmanda
ülesane eest 24p, neljanda ülesande eest 22p. Kokku on tal 79p ehk hinne 3.

Võimalik lahendus



Harjutus 7:   Kasutaja sisestab õhutemperatuuri näidu nädala igal päeval kell 12.00
Andmete salvestamiseks kasutatakse 7-elemendilist massiivi double tüüpi
arvudega (0 vastab ESMASPÄEVale, 1 vastab TEISIPÄEVale jne.).

Leida:
  • Maksimaalne temperatuur sel nädalal (kasuta abimuutujat)
  • Milline päev oli kõige soojem
  • Minimaalne temperatuur sel nädalal (kasuta abimuutujat)
  • Milline päev oli kõige külmem
  • Keskmine õhutemperatuur sel nädalal

Võimalik lahendus





TEEMA: Maatriksid



Harjutus 8:
 Koosta programm, mis loob korrutustabeli. Realiseeri oma programmis järgmised võimalused:

  • Kasutaja käest küsitakse, milliste mõõtmetega korrutustabelit ta  näha soovib
  • Kasutaja sisestab soovitud korrutustabeli mõõtmed
  • Kasutajale väljastatakse soovitud mõõtmetega korrutustabel
  • Soovi korral lisa korrutustabeli mõõtmete sisestamise juurde kontroll, et selle mõõtmed ei tohi ületada 10x10 (võid selle realiseerida näiteks while või do...while tsükli abil)

Võimalik lahendus



Harjutus 9:   Käivita näide:

#include <stdio.h>

/*defineerime tudengite arvu ning hinnatavate ainete arvu*/
#define TUDENGEID 5
#define EKSAMEID 6


int main(void)
{
int tudengiteTulemused[TUDENGEID][EKSAMEID]={{54, 71, 59, 90, 62, 56},
{69, 83, 96, 90, 70, 79},
{90, 91, 71, 89, 55, 97},
{78, 82, 97, 87, 90, 97},
{98, 91, 73, 86, 76, 98}};


int i,j; /*tsüklimuutujad*/

/*tudengite hinnete väljastamine*/
/*tabeli päis*/
printf("%13s","EKSAMID: | ");
for(i=0; i<EKSAMEID; i++)
{
printf(" [%d]",i);
}
/*reavahetus*/
printf("\n");

for(i=0; i<TUDENGEID; i++)
{
printf("%7s %d: | ","TUDENG", i+1);
for(j=0; j<EKSAMEID; j++)
{
printf("%4d", tudengiteTulemused[i][j]);
}
/*reavahetus*/
printf("\n");
}
/*reavahetus*/
printf("\n");

return 0;
}
Programm failina

On antud tudengite hindeid kajastav tabel. Iga rida vastab mingile konkreetsele tudengile. Veergudes on tudengi hinded erinevates ainetes. Realiseeri programmis järgmised võimalused:
  • Kasutaja käest küsitakse tudengi numbrit. Vastava tudengi hinded väljastatakse ekraanile (NB! Ära unusta, et inimeste jaoks on esimene tudeng indeksiga 1, mitte 0)
  • Programm leiab madalaima hinde ja väljastab selle
  • Programm leiab kõrgeima hinde ja väljastab selle
  • Programm leiab iga tudengi keskmuse hinde ja väljastab selle

Võimalik lahendus


TEEMA: Struktuurid


Harjutus 10:
  Koosta programm mis teeb järgmist:

  • Deklareerib etteantud struktuuri
  • Küsib kasutaja käest, mitme inimese andmeid soovitakse sisestada
  • Küsib vastava arvu kordi isikute andmeid
  • Väljastab kasutaja poolt sisestatud andmed ekraanile igal real andmed ühe inimese kohta

Programmis deklareeritav struktuur:

 eesnimi (string, pikkus 21)
 perekonnanimi (string, pikkus 21)
 sugu (M/N; string, pikkus 2)
 sünniaasta (täisarv)

Võimalik lahendus



Harjutus 11:   Koosta programm mis teeb järgmist:

  • Kasutaja käest küsitakse inimeste andmed  (NB! Struktuur; andmete salvestamiseks kasutatakse struktuuride massiivi)
  • Andmete sisestamisell arvutatakse iga inimese vanus ning salvestatakse vastavale struktuuri väljale
  • Andmed väljastatakse ekraanile
  • Leitakse kõige vanem inimene ning väljastatakse tema
  • andmed
Programmis deklareeritav struktuur:

 eesnimi (string, pikkus 21)
 perekonnanimi (string, pikkus 21)
 sugu (M/N; string, pikkus 2)
 sünniaasta (täisarv)
 vanus (täisarv)


Võimalik lahendus


Harjutus 12:  Koostada programm, mis töötab järgmiselt:
  • Küsib kasutaja käest töötajate arvu
  • Küsib kasutaja käest töötajate nimed ning nende põhipalga
  • Küsib kasutaja käest boonuse suurust protsentides
  •  Arvutab iga töötaja boonuse (boonus=palk*boonuseprotsent) ning täispalga (täispalk = palk+boonus)
  • Väljastab palkade tabeli koos boonuste ning täispalgaga ekraanile
Programmis deklareeritav struktuur:

 eesnimi (string, pikkus 21)
 palk (reaalarv)
 boonus (reaalarv)
 täispalk (reaalarv)
 vanus (täisarv)


Programmi töö näide:


Sisesta boonuse protsent: 25

Töötajate palgad:

Nimi  Põhipalk  Boonus     Täispalk
======================================
Juuli     500      125.00    625.00
Maali     450      112.50    562.50
Peeter    550      137.50    687.50
Ats       575      143.75    718.75
Juku      600      150.00    750.00


Võimalik lahendus