Функции. массивах A(10) и B(10) все элементы предшествующие первому нулевому элементу заменить на 0,5

Ruslan777

Доброе время суток...собственно вопрос таков:Даны два массива A(10), B(10). В массивах A(10) и B(10) все элементы предшествующие первому нулевому элементу заменить на 0,5...Заранее Большое человеческое спасибо
9 ответов

Ruslan777

#include <iostream>
#include <iomanip>
 
void foo(****** * arr,const int size){
    size_t index=0;
    for(int i=0;i<size;++i)
        if(arr[i]==0.0){
            index=i;
            break;
        }
    for(int i=0;i<index;++i)
        arr[i]=0.5;
}
 
void print_arr(****** * arr,const int size){
    for(int i=0;i<size;++i)
        std::cout<<std::setw(4)<<std::fixed<<std::setprecision(1)<<arr[i];
    std::cout<<std::endl;
}
 
 
int main(){
    const int A_size=10;
    const int B_size=10;
    ****** A[A_size]={1.8,4.4,5.3,3.7,8.0,0.1,0.0,5.6,4.3,3.9};
    ****** B[B_size]={2.3,4.4,0.0,3.7,8.0,0.1,0.0,5.6,4.3,3.9};
    std::cout<<"Source:\n";
    print_arr(A,A_size);
    print_arr(B,B_size);
 
    foo(A,A_size);
    foo(B,B_size);
 
    std::cout<<"\nResult:\n";
    print_arr(A,A_size);
    print_arr(B,B_size);
}


Ruslan777

#include <iostream>
#include <cstddef>
#include <array>
#include <random>
#include <algorithm>
#include <iterator>
 
int main()
{
    const std::size_t N = 10;
    std::array<******, N> A, B;
    std::mt19937 gen { std::random_device()() };
    std::uniform_int_distribution<int> uid(-3, 3);
    auto print_arr = [](const std::array<******, N> &a)
    {
        std::copy(a.begin(), a.end(), std::ostream_iterator<******>(std::cout, " ") );
        std::cout << std::endl;
    };
    std::generate(A.begin(), A.begin() + N, [&uid, &gen] { return uid(gen); } );
    std::generate(B.begin(), B.begin() + N, [&uid, &gen] { return uid(gen); } );
    std::cout << "Before:\n";
    print_arr(A);
    print_arr(B);
    auto itA = std::find(A.begin(), A.begin() + N, 0),
         itB = std::find(B.begin(), B.begin() + N, 0);
    std::fill(A.begin(), itA, 0.5);
    std::fill(B.begin(), itB, 0.5);
    std::cout << "After:\n";
    print_arr(A);
    print_arr(B);
}


Ruslan777

Croessmah в функции
void foo(****** * arr,const int size){
    size_t index=0;
    for(int i=0;i<size;++i)
        if(arr[i]==0.0){
            index=i;
            break;
        }
    for(int i=0;i<index;++i)
        arr[i]=0.5;
}
все таки правильно будет
void foo(****** * arr,const int size)
{
int index=0;
        for(int i=0;i<size;++i)
        if(arr[i]==0)
        {
            index=i;
            //break;
        }
    for(int i=0;i<index;++i)
        arr[i]=0.5;
}
или я не прав?


Ruslan777

Genn55, вы не правы. В вашем случае находит индекс последнего нулевого элемента.


Ruslan777

Я имел в виду вот эту строку
size_t index=0;
мой компиллятор на нее ругается а так нет
int index=0;
а в этой строке моя опечатка не сделал предварительного просмотра
//break;


Ruslan777

Genn55, требуется хедер cstddef, хотя само по себе использование soze_t лишь в одном месте довольно странно. Но, в данной задаче не критично, разве что варнинги будут глаз мазолить.


Ruslan777

Подключил.Все равно ругается,а точнее предупреждает \main.cpp||In function 'void foo(*******, int)':| \main.cpp|12|warning: comparison between signed and unsigned integer expressions| ||=== Build finished: 0 errors, 1 warnings ===|


Ruslan777

Genn55, ну так я и говорю
Но, в данной задаче не критично, разве что варнинги будут глаз мазолить.


Ruslan777

Ну и Бог с ней.