Структурно програмирање

Аудиториска вежба 8 - Низи


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

1.1. Декларација на низа

    tip ime_na_niza[GOLEMINA];
    
    int a[10];
    float x[99];
    char c[5];

1.2. Пристап до елемент од низа

    ime_na_niza[indeks_na_element];
    
    int a[10]; // декрарација на низа со 10 цели броеви
    a[0] = 1; // доделување вредност 1 на првиот елемент
    cout << a[9] << endl; // печатење на вредноста на последниот елемент

2. Задачи

2.1. Задача 1

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

#include<iostream>
using namespace std;

int main() {
    int n1, n2, element, i;
    int a[100], b[100];

    cout << "Size fo the first array: " << endl;;
    cin >> n1;

    cout << "Size fo the second array: " << endl;
    cin >> n2;

    if (n1 != n2) {
        cout << "Arrays are not equal!" << endl;
    } else {
        cout << "Elements of the first array:" << endl;
        for (i = 0; i < n1; i++) {
            cout << "a[" << i << "] = " << endl;
            cin >> a[i];
        }

        cout << "Elements of the second array:" << endl;
        for (i = 0; i < n2; i++) {
            cout << "b[" << i << "] = " << endl;
            cin >> b[i];
        }

        // check if arrays are equal:
        for (i = 0; i < n1; i++) {
            if (a[i] != b[i]) {
                break;
            }
        }

        if (i == n1) {
            cout << "Arrays are equal!" << endl;
        } else {
            cout << "Arrays are not equal!" << endl;
        }
    }

    return 0;
}

2.2. Задача 2

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

Пример:

За низата: 3 2 7 6 2 5 1 На екран ќе се испечати:

    Sum even: 10
    Sum odd: 16
    Rel: 0.75
#include<iostream>
using namespace std;

int main() {
    int n, a[100], n_odd = 0, n_even = 0, sum_odd = 0, sum_even = 0;

    cin >> n;

    for (int i = 0; i < n; i++){
        cin >> a[i];
    }

    for (int i = 0; i < n; i++) {
        if (a[i] % 2) {
            n_odd++;
            sum_odd += a[i];
        } else {
            n_even++;
            sum_even += a[i];
        }
    }

    cout << "Sum even: " << sum_even << endl;
    cout << "Sum odd: " << sum_odd << endl;
    cout << "Rel: " << (float)n_even / n_odd << endl;

    return 0;
}

2.3. Задача 3

Да се напише програма која ќе го пресмета скаларниот производ на два вектори со по n координати. Бројот на координати n, како и координатите на векторите се внесуваат од стандарден влез. Резултатот да се испечати на екран.

#include<iostream>
using namespace std;

int main() {
    int a[100], b[100], n, scalar = 0;

    cin >> n;

    for (int i = 0; i < n; i++){
        cin >> a[i];
    }
    for (int i = 0; i < n; i++){
        cin >> b[i];
    }
    for (int i = 0; i < n; i++){
        scalar += a[i] * b[i];
    }
    cout << "The scalar product is: " << scalar << endl;

    return 0;
}

2.4. Задача 4

Да се напише програма која ќе провери дали дадена низа од n елементи која се чита од стандарден влез е строго растечка, строго опаѓачка или ниту строго растечка ниту строго опаѓачка. Резултатот да се испечати на екран.

#include<iostream>
using namespace std;

int main() {
    int n, element, a[100];
    short rastecka = 1, opagacka = 1;

    cin >> n;

    for (int i = 0; i < n; i++){
        cin >> a[i];
    }

    for (int i = 0; i < n - 1; i++) {
        if (a[i] >= a[i + 1]) {
            rastecka = 0;
            break;
        }
    }

    for (int i = 0; i < n - 1; i++) {
        if (a[i] <= a[i + 1]) {
            opagacka = 0;
            break;
        }
    }

    if (!opagacka && !rastecka) {
        cout << "Nizata ne e nitu rastechka nitu opagjachka" << endl;
    } else if (opagacka) {
        cout << "Nizata e opagjachka" << endl;
    } else if (rastecka) {
        cout << "Nizata e rastechka" << endl;
    }

    return 0;
}

2.5. Задача 5

Да се напише програма за ротирање на елементите на една низа за едно место во десно. На крај, да се испечати на екран ротираната низа. Елементите од низата се читаат од стандарден влез.

#include<iostream>
using namespace std;

int main() {
    int n, temp;
    int a[100];

    cout << "Golemina na niza: ";
    cin >> n;

    for(int i = 0; i < n; i++) {
        cin >> a[i];
    }

    temp = a[n-1];

    for(int i = n - 1; i > 0; i--) {
        a[i] = a[i-1];
    }

    a[0] = temp;

    for(int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }

    return 0;
}

2.6. Задача 6

Да се напише програма за ротирање на елементите на една низа за m местa во десно. На крај, да се испечати на екран ротираната низа. Елементите од низата и бројот на ротирања се читаат од стандарден влез.

#include<iostream>
using namespace std;

int main() {
    int n, temp, m;
    int a[100];

    cout << "Golemina na niza: ";
    cin >> n;

    cout << "Broj na rotiranja: ";
    cin >> m;

    for(int i = 0; i < n; i++) {
        cin >> a[i];
    }

    for(int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    cout << endl;

    for(int j = 0; j < m; j++) {
        temp = a[n-1];
        for(int i = n - 1; i > 0; i--) {
            a[i] = a[i-1];
        }
        a[0] = temp;
    }

    for(int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }

    return 0;
}

2.7. Задача 7

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

#include<iostream>
using namespace std;

int main() {
    int a[100], n, j, k, izbrisani = 0;

    cin >> n;

    for (int i = 0; i < n; i++){
        cin >> a[i];
    }
    for (int i = 0; i < n - izbrisani; i++) {
        for (int j = i + 1; j < n - izbrisani; j++) {
            if (a[i] == a[j]) {
                for (int k = j; k < n - 1 - izbrisani; k++) {
                    a[k] = a[k + 1];
                }
                izbrisani++;
                --j;
            }
        }
    }

    n -= izbrisani;

    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }

    return 0;
}

2.8. Задача 8

Од стандарден влез се читаат едноцифрени броеви, се додека не се прочита нешто што не е број. Да се испечати на екран статистика колку пати се јавува секоја цифра меѓу прочитаните броеви.

//
// Created by Stefan Andonov on 27.11.24.
//


#include<iostream>

using namespace std;

int main() {

    int digit;

    int counter [10] = {0};

    while (cin>>digit){
        counter[digit]++;
    }

    for (int i=0;i<10;i++){
        cout << i << " -> " << counter[i] << endl;
    }
    return 0;
}