Задаци: Релацијски оператори

Алгоритми и програми у програмском језику C: Релацијски оператори.

Јабуке

Прочитај текст задатка.

Задатак решавамо тако што проверимо да ли је број јабука које је убрао Пера већи од броја јабука који је убрао Мика. Ако јесте испишемо DA, а у супротном испишемо NE.

Један начин да се реализује гранање у програму је да се употреби наредба if-else.

Предложено решење задатка (1)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int p, m;
    scanf("%d%d", &p, &m);
    if (p > m)
        printf("DA");
    else
        printf("NE");
    return 0;
}

Гранање се у овом случају може реализовати и помоћу условног израза. Условни израз се реализује применом оператора ?:.

Предложено решење задатка (2)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int p, m;
    scanf("%d%d", &p, &m);
    printf(p > m ? "DA" : "NE");
    return 0;
}

Збир година браће и сестре

Прочитај текст задатка.

Пера, Мика и Лаза су рођени исте године, па имају једнак број година. Обележимо са \(x\) број година сваког од браће. Ана је за 3 године старија од своје браће па је њен број година \(x+3\). Према томе збир њихових година је \(3\cdot x+(x+3)=4\cdot x+3\). Потребно је проверити да ли унети број \(n\) може бити збир њихових година тј. потребно је проверити да ли за неки ненегативан цео број \(x\) (број година је ненегативан цео број) важи једнакост \(4\cdot x+3=n\). Решење једначине је \(x=\frac{n-3}{4}\), то је ненегативан цео број акко је \(n-3\) дељиво са 4 (није потребно проверавати да ли је \(n-3\geq 0\) јер за природан број \(n\) ако је \(n-3<0\) онда \(n-3\) није дељиво са 4).

Проверу дељивости можемо извршити тако што израчунамо целобројни остатак при дељењу (оператором %) и проверимо да ли је једнак нули.

Гранање можемо извршити наредбом гранања if-else.

Предложено решење задатка (1)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int n;
    scanf("%d", &n);
    if ((n - 3) % 4 == 0)
        printf("da");
    else
        printf("ne");
    return 0;
}

Гранање се у овом случају може реализовати и помоћу условног израза. Условни израз се реализује применом оператора ?:.

Предложено решење задатка (2)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int n;
    scanf("%d", &n);
    printf((n - 3) % 4 == 0 ? "da" : "ne");
    return 0;
}

Теме правоугаоника

Прочитај текст задатка.

Уочимо да када су странице правоугаоника паралелне координатним осама, његов леви пар темена има исту апсцису (\(x\)-координату) и десни пар темена има исту апсцису. Аналогно важи да горњи пар темена правоугаоника има исту ординату (\(y\)-координату) и доњи пар темена има исту ординату. Према томе, када провером једнакости установимо да два темена имају исту \(x\)-координату, тражено теме припада другом пару са истом \(x\)-координатом, па исписујемо \(x\)-координату темена које није учествовало у провери. На исти начин долазимо до непознате \(y\)-координате.

Предложено решење задатка

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int x1, y1, x2, y2, x3, y3, x4, y4;
    scanf("%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &x3, &y3);
    if (x1 == x2)
        x4 = x3;
    if (x1 == x3)
        x4 = x2;
    if (x2 == x3)
        x4 = x1;
    if (y1 == y2)
        y4 = y3;
    if (y1 == y3)
        y4 = y2;
    if (y2 == y3)
        y4 = y1;
    printf("%d %d", x4, y4);
    return 0;
}

Једнакостранични троугао датог обима

Прочитај текст задатка.

Израчунамо обим троугла датих страница коришћењем формуле \(obim=a+b+c\). Обележимо са \(x\) страницу траженог једнакостраничног који има исти обим као дати троугао. Обим тог једнакостраничног троугла је \(3\cdot x\) што по услову задатка износи \(obim\). Према томе добијамо једначину \(3\cdot x=obim\) чијим решавањем добијамо \(x=\frac{obim}{3}\). Страница једнакостраничног троугла, по услову задатака, треба да има целобројну дужину а то је испуњено ако је \(obim\) дељив са 3, што се може лако проверити тако што се провери да ли је остатак при дељењу тог броја са 3 једнак нули. Гранање можемо остварити наредбом if-else.

Предложено решење задатка

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    int obim = a + b + c;
    if (obim % 3 == 0)
        printf("da %d", obim / 3);
    else
        printf("ne");
    return 0;
}