1. Контролни структури за избор if-else

1.1. Потсетување од предавања

if-else
if ( uslov ) {
    naredbi_za_vistinit_uslov ;
}
else {
    naredbi_za_nevistinit_uslov ;
}

1.2. Што ќе отпечати?

Пример ex4_1.c
#include <stdio.h>
int main() {
    int m = 5, n = 10;
    if (m > n)
        ++m;
    ++n;
    printf("m = %d, n = %d\n", m, n);
    return 0;
}
Излез
m = 5, n = 11

2. Задачи

2.1. Задача 1

Да се напише програма со која ќе се отпечати максимумот од два броја чии вредности се читаат од тастатура.

Решение p4_1a.c
#include <stdio.h>

int main() {
    int a, b;
    printf("Vnesi 2 broja: \n");
    scanf("%d %d", &a, &b);
    if (a > b)
        printf("Maximum: %d\n", a);
    else
        printf("Maximum: %d\n", b);
    return 0;
}
Решение в2 – без if-else p4_1b.c
#include <stdio.h>
int main() {
    int a, b;
    printf("Vnesi 2 broja: \n");
    scanf("%d %d", &a, &b);
    printf("Maximum: %d\n", (a > b) ? a : b);
    return 0;
}

2.2. Задача 2

Да се напише програма што проверува дали дадена година што се вчитува од тастатура е престапна или не и на екран печати соодветна порака.

Пример престапни години:

1976, 2000, 2004, 2008, 2012…​

Годината е престапна ако е делива со 4 но не е делива со 100 или е делива со 400.
Решение p4_2.c
#include <stdio.h>

int main() {
    int godina;
    printf ("Vnesi godina: \n");
    scanf ("%d", &godina);
    if ((godina % 4 == 0 && godina % 100 != 0) || godina % 400 == 0)
        printf("%d e prestapna.\n", godina);
    else
        printf("%d e prosta.\n", godina);
    return 0;
}

2.3. Задача 3

Од тастатура се внесуваат координати на една точка од рамнина. Да се напише програма со која ќе се испечати на кој квадрант припаѓа внесената точка.

kvadranti
Решение p4_3a.c
#include <stdio.h>

int main () {
        float x, y;
        printf("Vnesi koordinati \n");
        scanf("%f %f", &x, &y);
        if (x > 0 && y > 0)
                printf("I kvadrant.\n");
        if (x > 0 && y < 0)
                printf("IV kvadrant.\n");
        if (x < 0 && y > 0)
                printf("II kvadrant.\n");
        if (x < 0 && y < 0)
                printf("III kvadrant.\n");
        return 0;
}
kvadranti
Решение в2 p4_3b.c
#include <stdio.h>
int main () {
    float x, y;
    printf ("Vnesi koordinati \n");
    scanf ("%f %f", &x, &y);
    if (x > 0)
        if (y > 0)
            printf("I kvadrant.\n");
        else
            printf("IV kvadrant.\n");
    else if (y > 0)
        printf("II kvadrant.\n");
    else
        printf("III kvadrant.\n");
    return 0;
}
  1. Дали ваквата програма ги опфаќа сите случаи?

  2. Дали ќе испечати нешто за која било внесена точка?

Решение в3 p4_3c.c
#include <stdio.h>
int main () {
    float x, y;
    printf ("Vnesi koordinati \n");
    scanf ("%f %f", &x, &y);
    if (x > 0)
        if (y > 0)
            printf("I kvadrant.\n");
        else if (y < 0)
            printf("IV kvadrant.\n");
        else
            printf("Pozitivna X oska.\n");
    else if (x < 0)
        if (y > 0)
            printf("II kvadrant.\n");
        else if (y < 0)
            printf("III kvadrant.\n");
        else
            printf("Negativna X oska.\n");
    else
        if (y > 0)
            printf("Pozitivna Y oska.\n");
        else if (y < 0)
            printf("Negativna Y oska.\n");
        else
            printf("Koordinaten pocetok.\n");
    return 0;
}

2.4. Задача 4

Да се напише програма што за внесен број на поени од испит ќе генерира соодветна оценка според следната табела:

Поени Оценка

0-50

5

51-60

6

61-70

7

71-80

8

81-90

9

91-100

10

Решение p4_4a.c
#include <stdio.h>
int main () {
    int poeni, ocenka = 0;
    printf("Vnesi poeni: \n");
    scanf("%d", &poeni);
    if (poeni >= 0 && poeni <= 50) ocenka = 5;
    else if (poeni > 50 && poeni <= 60) ocenka = 6;
    else if (poeni > 60 && poeni <= 70) ocenka = 7;
    else if (poeni > 70 && poeni <= 80) ocenka = 8;
    else if (poeni > 80 && poeni <= 90) ocenka = 9;
    else if (poeni > 90 && poeni <= 100) ocenka = 10;
    else printf("Nevalidna vrednost na poeni!\n");
    printf("Ocenka %d\n", ocenka);
    return 0;
}
Решение в2 p4_4b.c
#include <stdio.h>

int main () {
    int poeni, ocena = 0;
    printf("Vnesi poeni: \n");
    scanf("%d", &poeni);
    if (poeni < 0 || poeni > 100)
        printf("Nevalidna vrednost za poeni!\n");
    else {
        if (poeni > 90) ocena = 10;
        else if (poeni > 80) ocena = 9;
        else if (poeni > 70) ocena = 8;
        else if (poeni > 60) ocena = 7;
        else if (poeni > 50) ocena = 6;
        else ocena = 5;
        printf("Ocena %d\n", ocena);
    }
    return 0;
}

2.5. Задача 5

Да се промени претходната програма, така што покрај оценките ќе се испечатат и знаците + и – во зависност од вредноста на последната цифра на поените:

последна цифра печати

1 - 3

-

4 - 7

prazno mesto

8 - 0

+

пример
81 = 9-
94 = 10
68 = 7+
За оценката 5 не треба да се додава + или –, а за оценката 10 не треба да се додава знакот +.
Решение p4_5.c
#include <stdio.h>

int main () {
    int poeni, ocenka = 0;
    printf("Vnesi poeni: \n");
    scanf("%d", &poeni);
    if (poeni < 0 || poeni > 100)
        printf("Nevalidna vrednost za poeni!\n");
    else {
        if (poeni > 90) ocenka = 10;
        else if (poeni > 80) ocenka = 9;
        else if (poeni > 70) ocenka = 8;
        else if (poeni > 60) ocenka = 7;
        else if (poeni > 50) ocenka = 6;
        else ocenka = 5;
        char znak = ' ';
        int pc = poeni % 10;
        if (ocenka != 5) {
            if (pc >= 1 && pc <= 3) znak = '-';
            else if (ocenka != 10 && (pc >= 8 || pc == 0))
                znak = '+';
        }
        printf("Ocenka %d%c\n", ocenka, znak);
    }
    return 0;
}

2.6. Задача 6

Од тастатура се внесуваат должини на три отсечки во произволен редослед. Да се напише програма што ќе провери дали од отсечките може да се конструира триаголник, при што ако може, да се провери дали истиот е правоаголен и да се пресмета неговата плоштина. Во спротивно, треба да се испечатат соодветни пораки.

Решение p4_6.c
#include <stdio.h>

int main() {
    float a, b, c;
    printf("Vnesi dolzini na strani: \n");
    scanf("%f %f %f", &a, &b, &c);
    if ((a + b <= c) || (a + c <= b) || (b + c <= a))
        printf("Ne moze da se konstruira triagolnik.\n");
    else {
        if (a >= b) {
            float tmp = a;
            a = b;
            b = tmp;
        }
        if (a >= c) {
            float tmp = a;
            a = c;
            c = tmp;
        }
        if (b >= c) {
            float tmp = b;
            b = c;
            c = tmp;
        } // po ova najdolgata strana kje bide vo c
        if (c * c == a * a + b * b) {
            printf("Tragolnikot e pravoagolen.\n");
            printf("Ploshtinata mu e %7.3f\n", a * b / 2);
        } else {
            printf("Tragolnikot NE e pravoagolen.\n");
        }
    }
    return 0;
}

2.7. Задача 7

Од тастатура се внесуваат должини на три отсечки во произволен редослед. Да се провери дали од дадените отсечки може да се конструра триаголник. Ако може, да се испечати дали триаголникот е разностран, рамностран или рамнокрак и да му се пресмета плоштината.

Решение p4_7.c
#include <stdio.h>
#include <math.h>
int main() {
    float a, b, c;
    printf("Vnesi dolzini na strani: \n");
    scanf("%f %f %f", &a, &b, &c);
    if ((a + b <= c) || (a + c <= b) || (b + c <= a))
        printf("Ne moze da se konstruira triagolnik.\n");
    else {
        if (a == b && b == c)
            printf("Tragolnikot e ravnostran.\n"); // equilateral
            else if (a == b || b == c || a == c)
             printf("Tragolnikot e ravnokrak.\n"); // isosceles
        else
             printf("Tragolnikot e raznostran.\n"); // scalene
            float p, s = (a + b + c) / 2;
            p = sqrt(s * (s - a) * (s - b) * (s - c));
            printf("Ploshtinata mu e %7.3f\n", p);
    }
    return 0;
}

3. За дома

3.1. Задача 1

За три внесени отсечки да се одреди дали е можно да се конструира триаголник и притоа дали триаголникот е правоаголен, остроаголен или тапоаголен.

3.2. Задача 2 *

За даден центар на кружница и нејзин радиус да се одреди низ кои квадранти минува кружницата.

4. Изворен код од примери и задачи