Untitled

 avatar
unknown
c_cpp
a month ago
2.8 kB
2
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>
#include <string>
#include <iostream>

const int N1 = 5;
const int N2 = 5;

void fill_array(int* arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        arr[i] = rand() % 100 - 50;
    }
}

int* find_last_negative(int* arr, int size)
{
    int* last_negative = NULL;
    for (int i = 0; i < size; i++)
    {
        if (arr[i] < 0)
        {
            last_negative = &arr[i];
        }
    }
    return last_negative;
}

double find_avg(int* start, int* end)
{
    double sum = 0;
    int count = 0;
    for (int* ptr = start; ptr <= end; ptr++)
    {
        sum += *ptr;
        count++;
    }
    return (count > 0) ? sum / count : 0;
}

void print_array(int* arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main()
{
    setlocale(LC_ALL, "RU");
    srand(time(NULL));
    int A[N1], B[N2];

    fill_array(A, N1);
    fill_array(B, N2);

    int* last_neg_A = find_last_negative(A, N1);
    int* last_neg_B = find_last_negative(B, N2);

    double avg_A = (last_neg_A != NULL) ? find_avg(last_neg_A + 1, &A[N1 - 1]) : 0;
    double avg_B = (last_neg_B != NULL) ? find_avg(last_neg_B + 1, &B[N2 - 1]) : 0;

    int choice;

    printf("select an action:\n");
    printf("1. show arrays A and B\n");
    printf("2. show the last negative elements in arrays A and B\n");
    printf("3. show avg value of the second part of arrays A and B\n");
    printf("0. exit\n");

    while (1)
    {
        printf("enter the action number: ");
        scanf_s("%d", &choice);

        switch (choice)
        {
        case 1:
            printf("array A: ");
            print_array(A, N1);
            printf("array B: ");
            print_array(B, N2);
            break;
        case 2:
        {
            std::string mes_A = "the last negative element in the array is A: ";
            std::string mes_B = "the last negative element in the array is B: ";

            std::cout << (last_neg_A ? mes_A + std::to_string(*last_neg_A)
                : "there are no negative elements in array A.") << std::endl;

            std::cout << (last_neg_B ? mes_B + std::to_string(*last_neg_B)
                : "there are no negative elements in array B.") << std::endl;
            break;
        }
        case 3:
            printf("avg value of the second part of the array A: %.2f\n", avg_A);
            printf("avg value of the second part of the array B: %.2f\n", avg_B);
            break;
        case 0:
            printf("exiting\n");
            return 0;
        default:
            printf("wrong choice, try again..\n");
        }
    }
    return 0;
}
Editor is loading...
Leave a Comment