Задаци: Филтрирање серије бројева¶
Алгоритми и програми у програмском језику C: Филтрирање серије бројева.
Бројеви дељиви са 3¶
Прочитај текст задатка.
Потребно је исписати само оне учитане бројеве који су дељиви са 3. Учитавање \(n\) бројева постижемо коришћењем петље.
У овом задатку је природно да се користи петља for
, мада је могуће користити
и while
. У телу петље учитавамо текући број и коришћењем наредбе гранања
проверавамо да ли је дељив са 3. Проверу дељивости вршимо упоређивањем остатка
при дељењу са 3 и нуле. Ако број јесте дељив са 3, исписујемо га.
Овај задатак је класичан пример тзв. алгоритма филтрирања серије тј. издвајања елемената који задовољавају неки дати услов. У општем случају у петљи пролазимо кроз елементе серије, наредбом гранања проверавамо да ли текући елемент задовољава задати услов, и ако задовољава у телу наредбе гранања га обрађујемо на одговарајући начин.
Предложено решење задатка
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int n, x;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &x);
if (x % 3 == 0)
printf("%d\n", x);
}
return 0;
}
Бројање гласова за омиљеног глумца¶
Прочитај текст задатка.
Потребно је избројати колико елемената серије задовољава неки дати услов (у овом случају услов је да су једнаки броју \(x\)). Уобичајени начин да се то уради је да се уведе бројач елемената који иницијализујемо на нулу, да у петљи учитавамо један по један елемент серије и да ако елемент задовољава тражени услов увећавамо бројач за један.
Предложено решење задатка
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int x, y, n;
scanf("%d%d", &x, &n);
int g = 0;
for (int i = 0; i < n; i++)
{
scanf("%d", &y);
if (x == y)
g++;
}
printf("%d", g);
return 0;
}
Просек одличних¶
Прочитај текст задатка.
Како број ученика није унапред фиксиран, у решењу је потребно употребити петљу у којој се учитавају и обрађују просеци појединачних ученика. Међу свим учитаним елементима серије потребно је анализирати само оне који задовољавају дати услов.
Просек просечних оцена одличних ученика одређујемо тако што збир просечних оцена одличних ученика поделимо бројем одличних ученика. У овом задатку не рачуна се просек свих учитаних просечних оцена ученика, већ само оних који су одлични, тј. пре израчунавања просека серија се филтрира на основу услова да је просечна оцена већа или једнака \(4.5\).
Користимо променљиве у којима редом чувамо збир просека и број одличних
ученика. На почетку обе променљиве постављамо на 0, јер у почетку још нисмо
учитали ни један просек ученика. Затим у петљи редом читамо просеке ученика и
ако је ученик одличан (ако је текући просек већи од 4,5) додајемо његову
просечну оцену збиру просека одличних док број одличних ученика увећавамо за 1.
Кад смо прочитали просечне оцене свих ученика одељења, након петље, проверавамо
да ли је број одличних ученика једнак нули и ако јесте приказујемо -
, a иначе
одређујемо просечну вредност просека одличних ученика дељењем вредности збира и
броја одличних.
Предложено решење задатка
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int n;
scanf("%d", &n);
double zo = 0.0, p, po;
int bo = 0;
for (int i = 0; i < n; i++)
{
scanf("%lf", &p);
if (p >= 4.5)
{
zo += p;
bo++;
}
}
if (bo != 0)
{
po = zo / bo;
printf("%.2lf", po);
}
else
printf("-");
return 0;
}
Категорије џудиста¶
Прочитај текст задатка.
Основу задатка чини разврставање џудиста по категоријама (што можемо урадити
гранањем на основу припадности интервалима, конструкцијом else-if
). Увешћемо
три бројачке променљиве, сваку иницијализовати на нулу и повећавати за 1 сваки
пут када наиђемо на џудисту у одговарајућој категорији. Дакле, разврставамо
серију бројева на три подсерије и израчунавамо број елемената сваке од три
подсерије.
Предложено решење задатка
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int d50 = 0, o51d75 = 0, o76 = 0, n, t;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &t);
if (t <= 50)
d50++;
else if (t <= 75)
o51d75++;
else
o76++;
}
printf("%d\n%d\n%d", d50, o51d75, o76);
return 0;
}