Последние новости

YoungCoder теперь и на Stepikе. Записывайтесь: https://vk.cc/75rISy

Чтобы записаться на курс, необходимо зарегистрироваться на Степике: https://vk.cc/75rIC4

Это моя личная ссылка-приглашение на Stepik для вас. Регистрируясь по этой ссылке, записываясь на курсы и решая задачи, Вы помогаете автору данного сайта принять участие в конкурсе платформы Stepik! Подробности конкурса здесь: https://vk.cc/75rKuS

воскресенье, 6 октября 2013 г.

Занятие 18. Передача одномерных массивов в функцию. Возвращение массива из функции.

Добрый вечер друзья. Продолжаем изучать работу с массивами и указателями.

Сегодня научимся передавать массив в функцию и возвращать массив из функции.

Прочитайте улучшенную версию этого урока "Передача аргументов в функцию".

В новой версии:

  • Ещё более доступное объяснение
  • Дополнительные материалы
  • 12 задач на программирование с автоматической проверкой решения


Итак, начнем с первого пункта. Пусть нам необходимо передать массив в функцию и там его обработать. Ну допустим вывести его элементы на экран. Тут возможны два варианта.
1. У нас статический массив.
2. У нас динамический массив.

В зависимости от этого и нужно плясать.

Первый случай. Передача в функцию статического массива. 

Для определенности будем передавать массив символов. Напишем функцию, которая принимает строку и выводит её на экран.

Листинг 18.1


void print_arr(char a[], int n){
      for (int i=0; i<n; i++)
            printf("%c",a[i]);
      printf("\n");
}


Давайте внимательно рассмотрим аргументы, которая эта функция принимает. Первый из них как раз и есть массив, который мы хотим передать. Как видите отличие от передачи обычной переменной лишь в том, что мы после имени пишем квадратные скобки. Именно они и указывают на то, что это не просто некая переменная а целый массив переменных данного типа.

В скобках, не нужно указывать размерность массива. С размерностью массива вообще все не так просто. Функции в Си не умеют самостоятельно определять размерность переданного им массива. Поэтому отдельным параметром нам необходимо передавать его размер. В нашей функции мы передаем размер массива с помощью переменной n.

Напишем самую простую программу, которая будет использовать эту функцию.

Листинг 18.2


#include <stdio.h>
#include <string.h>
void print_arr(char a[], int n){
      for (int i=0; i<n; i++)
            printf("%c",a[i]);
      printf("\n");

}
int main(){
      char arr[]="kirill";
      int t=strlen(arr);
      print_arr(arr,t);
      return 0;
}


Обратите внимание, что передача массива в функцию в этом случае, по виду, ничем не отличается от передачи обычной переменной. Мы лишь указываем его имя и все. Это только на первый взгляд так кажется. Но об этом чуть позже.

Второй случай. Передача в функцию динамического массива.

Давайте решим такую задачу. имеется текстовый файл input.txt. Пусть в нем в первой строчке записано натуральное число N не превосходящее 100. А в следующих N строках записаны некоторые вещественные числа. Пусть мы хотим посчитать среднее арифметическое всех этих чисел и вывести.

Удобно для хранения чисел завести динамический массив. Хотя, на самом деле, в этой задаче мы могли бы просто читать числа из файла и сразу вычислять их среднее значение. Но как-то я не могу придумать пока более подходящего примера.

И так напишем требуемую программу.

Листинг 18.3
#include <stdio.h>
void sa_arr(float *a, int n){
      double summ=0;
      for (int i=0; i<n; i++)
            summ+=a[i];
      printf("srednee arifmeticheskoe: %.2f\n", summ/n);
}

int main(){
      freopen("input.txt","r",stdin);
      int N;
      scanf("%d",&N);
      float *arr = new (float [N]);
      for (int i=0; i<N; i++)
            scanf("%f", &arr[i]);
      sa_arr(arr,N);
      delete []arr;
      return 0;
}


Обратите внимание на аргументы функции. Как видите, если мы передаем динамический массив, то нам нужно явно указывать на то, что функция принимает указатель на первый элемент массива. В случае одномерного массива это не критично, и вы можете объявить аргументы как и в прошлый раз, т.е.
void sa_arr(float a[], int n)
но так делать не стоит. Приучайтесь сразу передавать динамические массивы таким образом.

Теперь вернемся к нашим отличиям а так же второму вопросу.

Если вы помните, то переменные в языке Си, при передаче их в функцию передаются по значению. То есть мы передаем не сами переменные, а только их значения. И если мы в функции будем их изменять, то настоящих переменных это никак не коснется. В нашей группе в вк, даже было небольшое задание на эту тему. Да и в уроке с указателями мы разбирали, как обойти это ограничение.
Основное отличие передачи массива в функцию в том, что массивы, в отличие от переменных всегда передаются по ссылке. Т.е. в функцию передается не копия массива, а сам массив. И если внутри функции мы будем как-то изменять массив, то эти изменения останутся и после того, как функция закончит свою работу. 

Несколько изменим наше предыдущую программу. Изменим один из элементов внутри функции. И посмотрим, что будет с исходным массивом.

Листинг 18.4


#include <stdio.h>
void sa_arr(float *a, int n){
      double summ=0;
      for (int i=0; i<n; i++)
            summ+=a[i];
      printf("srednee arifmeticheskoe: %.2f\n", summ/n);
      //изменим какой-нибудь элемент массива внтури функции
      a[2]=43.2;
} 


int main(){
      freopen("D:\\input1.txt","r",stdin);
      int N;
      scanf("%d",&N);
      float *arr = new (float [N]);
      for (int i=0; i<N; i++)
            scanf("%f", &arr[i]);
      //выводим массив
      for (int i=0; i<N; i++)
            printf("%f\t",arr[i]);
      printf("\n");
      sa_arr(arr,N);    
      // снова выводим массив на экран, после вызова функции
      // внутри которой, мы изменили один его элемент
      for (int i=0; i<N; i++)
            printf("%f\t",arr[i]);
      printf("\n");
      delete []arr;
      return 0; 
}

Результат работы программы на следующем рисунке.


Как видите, изменения массива внутри функции, затронуло и исходный массив.
Эту возможность следует использовать во благо. А именно для того, чтобы возвращать массив из функции. Т.е. мы даже не будем париться над тем, чтобы возвращать массив из функции, он мы просто изменим его внутри и потом будем так же работать с в нашей программе ним.

Если же, по каким-то причинам, мы не хотим, чтобы элементы массива внутри функции менялись, то нам нужно внутри функции сделать копию переданного массива и работать уже с этой копией. Не забывайте, при использовании динамических массивов убираться за собой в памяти.


Задание для практической работы:

1. Напишите функцию, которая сортирует массив методом пузырька и выводит отсортированный массив на экран. В этом варианте программы, сделайте так, чтобы изменения не коснулись исходного массива.

2. Напишите функцию, которая ищет максимальный элемент в массиве.

3. Напишите функцию, которая принимает два массива одинаковой длинны и поэлементно перемножает их. Результат работы она записывает в элементы первого массива. Т.е. буквально она должна вернуть результат свой работы в первом массиве.
В программе, НЕ В ФУНКЦИИ, выведите результат на экран.

Если мы передаем массивы
[2,5,6]
[1,4,2]

то в результате своей работы, программа должна вывести
2 20 12

46 комментариев :

  1. Запутанные примеры:

    #include"stdio.h"
    #include"stdlib.h"
    int *mem(int); //функция выделения памяти под массив
    void input(int*,int); //функция ввода данных в массив
    void show(int*,int); //функция вывода массива на экран
    void main()
    {
    int *mas,rm;
    printf("Vvedite razmer massiva\n");
    scanf("%d",&rm);
    mas=mem(rm);
    printf("Vvod dannih v massiv\n");
    input(mas,rm);
    printf("Ishodnii massiv\n");
    show(mas,rm);
    printf("\n");
    }
    int *mem(int rm) //функция выделения памяти под массив
    {
    int *massiv;
    massiv=(int*)calloc(rm,sizeof(int)); /*выделяем участок памяти под массив*/
    return massiv;
    }
    void input(int *mas,int rm) //функция ввода данных в массив
    {
    for(int i=0;i<rm;i++)
    scanf("%d",mas+i);
    }
    void show(int *mas,int rm) //функция вывода массива на экран
    {
    for(int i=0;i<rm;i++)
    printf("%3d",*(mas+i));
    }
    (данный пример является шаблоном,к которому нас приводят)
    А смысл шаблона в том,чтобы тело main практически было пустое...
    Не мне судить,но мне воспринимается легче,когда сначала идет тело функции main ,а затем сами функции...
    Хотя..не пытался въехать,так как сонный...

    ОтветитьУдалить
    Ответы
    1. А сортировка где? А другие задания где? =)))

      Удалить
  2. Я один этот урок не хера не понял ?

    ОтветитьУдалить
  3. Задание 1
    //объявление массива неизвестной длинны
    //сортировка методом пузырьков
    #include ((stdio.h))
    #include((iostream))
    void metod_puz ( int a[],int n);
    int main()
    {
    setlocale(LC_ALL,".1251");
    int n,i=0;
    printf("Ведите размерность массива \n");
    scanf ("%d",&n);
    printf("Введите элементы массива \n");
    int *i_mass=new(int [n]);//объявляем массив неизвестной длинны
    while(i0;i--){//метод пузырей
    for (j=0;jb[j+1]){ // если порядок нарушен меняем j и j+1 элементы массива местами
    temp=b[j];
    b[j]=b[j+1];
    b[j+1]=temp;
    }
    }
    printf("Отсортированный массив -\n");
    for (i=0;i<n;i++) printf ("%d ", b[i]);// печать готового массива
    printf("\n");
    delete []b;
    }

    ОтветитьУдалить
    Ответы
    1. Что-то я не понял, что тут творится.

      Удалить
  4. чё то половина кода теряется но вроде всё работает...

    ОтветитьУдалить
  5. Задание 2
    //объявление 2-х массивов неизвестной длинны
    //перемножение элементов
    #include ((stdio.h>))
    #include((iostream))
    void vvod_mass ( int a[],int n);//ввод массивов
    void proizved_mass(int a[],int n,int b[],int c);//переножение элементов
    void pecat_mass(int a[],int n);//печать результата
    int main()
    {
    setlocale(LC_ALL,".1251");//
    int n,i=0;
    printf("Ведите размерность массива \n");
    scanf ("%d",&n);
    printf("Введите элементы 1-го массива \n");
    int *i_1mass=new(int [n]),*i_2mass=new(int [n]);//объявляем 2 массива неизвестной длинны
    vvod_mass(i_1mass,n);//ввод 1-го массива
    printf("Введите элементы 2-го массива \n");
    vvod_mass(i_2mass,n);//ввод 2-го массива
    proizved_mass(i_1mass,n,i_2mass,n);//перемножение элементов
    printf("результат перемножения элементов 2-х массивов \n");
    pecat_mass(i_1mass,n);//печать результата
    delete []i_1mass;
    delete []i_2mass;
    return(0);
    }
    void vvod_mass ( int a[],int n)
    {
    int i=0;
    while(i<n){
    printf ("\n%d-й элемент =",(++i));
    scanf ("%d",&a[i-1]);
    }
    printf ("\n");
    }
    void proizved_mass(int a[],int n,int b[],int c)//35
    {
    int i=0;
    while(i<n){a[i]*=b[i];i++;}
    }
    void pecat_mass(int a[],int n)
    {
    printf ("\n");
    int i;
    for (i=0;i<n;i++) printf ("%d ", a[i]);// печать готового массива
    printf("\n");
    }

    ОтветитьУдалить
    Ответы
    1. Плохо отображается. Я думаю вы всё проверили самостоятельно. Если работает, то отлично. Если хотите, чтобы я посмотрел, залейте код на сервис http://pastebin.com/ Если будете заливать, то выберите там подсветку синтаксиса для С. ЧТобы удобнее было смотреть. )))

      Удалить
  6. ошибся чуть-чуть это было 3-е задание

    ОтветитьУдалить
  7. #include "stdio.h"
    #include "stdlib.h"



    void puz(int *arr_1, int N)
    {
    for( int i = 0; i < N - 1; i++)
    {
    for( int j = 0; j < N; j++)
    {
    if(arr_1[j] > arr_1[j + 1])
    {
    int temp = arr_1[j];
    arr_1[j] = arr_1[j + 1];
    arr_1[j + 1] = temp;
    }
    }
    }
    for(int i = 0; i < N; i++)
    {
    printf("%d ", arr_1[i]);
    }
    printf("\n");

    }

    int main(){
    int f;
    int N;
    printf("kolv-o elementov?\n");
    scanf("%d", &N);
    int arr_1[N];
    int *arr = malloc(sizeof(int) * N);

    for(int i = 0; i < N; i++)
    {
    printf("zadaem elementi massiva\n");
    scanf("%d", &f);
    arr[i] = f;
    arr_1[i] = arr[i];
    }
    puz(arr_1, N);
    free(arr);
    return 0;
    }

    ОтветитьУдалить
    Ответы
    1. http://pastebin.com/Etn8x6g4
      тут нагляднее, вроде все работает нормально.
      получается я выделяю место для arr[] потом просто копирую из него arr_1[], но под него мне места бронировать не нужно уже?

      Удалить
    2. Очень странно, что у вас этот код работает. Хотя бы из-за этих строчек:
      int N;
      printf("kolv-o elementov?\n");
      scanf("%d", &N);
      int arr_1[N];

      Нельзя просто так считать переменную, и создать массив такой размерности. =)))
      Хм, хорошая идея для мема. =)))

      Так что неправильно. Нужно считать размерность, сделать динамический массив. Передать его в функцию, там сделать его копию и отсортировать её.

      И еще замечание. Не нужно дублировать код здесь, достаточно ссылки на pastebin. Мне нравится, что вы оформляете свой код с отступами, мне так удобно проверять. И еще, используя сервис, пишите библиотеки с угловыми скобками, там на это запрета нет. )

      Удалить
    3. http://pastebin.ru/tKyn60V9
      ну как? жду с нетерпением
      Еще раз спасибо)

      Удалить
    4. Все та же ошибка, только теперь внутри функции. А вы свои программы не запускаете, прежде чем отправлять мне? Она же не компилируется. =)

      Удалить
  8. задание 2
    http://pastebin.com/Hs3cHMcd
    #include "stdio.h"
    #include "stdlib.h"


    void maximus( int *arr, int N)
    {
    int max = 0;
    for(int i = 0; i < N; i++)
    {
    if(arr[i] > max)
    max = arr[i];
    }
    printf("max is %d\n", max);
    }

    int main()
    {
    int f;
    int n;
    printf("vvedite kolvo 4lenov\n");
    scanf("%d", &n);
    int *arr = malloc(sizeof(int) * n);

    printf("zapolnyaem massiv\n");
    for(int i = 0; i < n; i++)
    {
    scanf("%d", &f);
    arr[i] = f;

    }

    maximus(arr, n);
    free(arr);
    return 0;
    }

    ОтветитьУдалить
    Ответы
    1. int *arr = malloc(sizeof(int) * n);

      Вот так делать нельзя. Это не должно работать. Функция malloc возвращает указатель на void. Необходимо явное преобразование типов.

      Удалить
    2. http://pastebin.ru/GpBQvnVx
      наш ответ Чемберлену!=) Еще раз и очередной раз спасибо, что возюкаетесь в нашем ***коде)

      Удалить
    3. А что если я ввожу
      3
      -2
      -3
      -1

      Ответ должен быть -1, а выводит нуль. =) Дописывайте/переписывайте.

      Удалить
  9. задание 3
    http://pastebin.com/zb8nQW0R
    #include "stdio.h"
    #include "stdlib.h"


    void maximus( int *arr, int *arr_1, int N)
    {

    for( int i = 0; i < N; i++)
    {
    arr[i] = arr[i] * arr_1[i];
    }
    }

    int main()
    {
    int n;
    int f;
    int f_1;
    printf("vvedite kolv-o elementov massiva\n");
    scanf("%d", &n);
    int *arr = malloc(sizeof(int) * n);
    int *arr_1 = malloc(sizeof(int) * n);
    for(int i = 0; i < n; i++)
    {

    scanf("%d", &f);
    arr[i] = f;
    printf("pervii arr_%d - %d, \n", i, arr[i]);
    scanf("%d", &f_1);
    arr_1[i] = f_1;
    printf("vtoroi arr_1_%d - %d, \n", i, arr_1[i]);
    }
    maximus(arr, arr_1, n);

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



    free(arr);
    free(arr_1);
    return 0;
    }

    ОтветитьУдалить
    Ответы
    1. Вы совсем не соблюдаете формат входных данных.
      Опять же ошибка с выделением памяти. И обычно сначала предупреждают, что нужно ввести, а потом считывают данные. А не наоборот. =))

      Удалить
    2. http://pastebin.ru/Gh3hBY2V
      если не правильно, то не могли бы вы поконкретнее сказать что не так. хочу сразу научиться писать правильно. И большое вам спасибо)

      Удалить
    3. Работает вроде верно.
      Я хотел бы, чтобы эта программа работала так.
      Сначала я ввожу число N - размерность массива.
      Потом ввожу последовательно N элементов первого массива.
      Затем, ввожу N элементов второго массива.
      Потом программа выдает ответ.
      Окошко программы должно вот так выглядеть после выполнения программы

      3
      2 5 10
      1 2 3

      2 10 30

      Без всяких лишних слов и прочего.

      Удалить
  10. http://pastebin.ru/IaPYkcXw
    3 задание

    ОтветитьУдалить
  11. Все три задания:
    http://pastebin.ru/9dA9a0Dq

    ОтветитьУдалить
  12. 1 задание

    В теории должно работать, но online компиляторы не дают вводить данные с клавиатуры, так что не проверял.

    http://pastebin.com/embed_iframe.php?i=2PnJE2BT

    ОтветитьУдалить
    Ответы
    1. может так?
      http://pastebin.com/embed_iframe.php?i=S9Wtshvp

      Удалить
    2. 2 задание
      http://pastebin.com/embed_iframe.php?i=R4ZSQdwy

      Удалить
    3. Первая нет.
      Вторая тоже нет.
      Не правильно выделяете память в обоих случаях. Используйте массив int-ов.

      Удалить
  13. вроде бы элементароно
    //Задание 1
    #include
    #include
    #include

    using namespace std;

    void sort(int *arr,int koll)
    {
    ____int temp;
    ____for(int a=0;aarr[i+1])
    ____________{
    ________________temp=arr[i];
    ________________arr[i]=arr[i+1];
    ________________arr[i+1]=temp;
    ____________}
    ________}
    ____}
    ____for (int x=0; x<koll; x++)
    ____{
    ________cout<<"Znachenie massiva "<<x<<" = "<<arr[x]<<endl;
    ____}
    ____cout<<endl;
    }

    int main()
    {
    ____srand(time(0));
    ____int n=rand()%20+1;
    ____int *massiv = new(int [n]);
    ____for (int i=0; i<n; i++)
    ____{
    ________massiv[i]=rand()%100+1;
    ____}
    ____sort(massiv,n);
    ____for (int a_m=0;a_m<n; a_m++)
    ____{
    ________cout<<"Znachenia massiva "<<a_m<<" = "<<massiv[a_m]<<endl;
    ____}
    ____delete []massiv;
    ____return 0;
    }
    Хотя функции я и использовал ранее(те которые сам пишу....), но я только сейчас понял что посути то что создаю я для компа почти не отличается от тех что в стандартных библиотеках заданны, то есть
    по сути тот же ctrlen() или strcmp() я могу написать сам, но с другим названием....
    при чём принимаемые параметры задаю тоже я ..... Что будет если я свою функцию назову например srand()???
    ладно это чисто риторический вопрос..... когда ты будешь готов ответить я ответ уже буду знать давно....
    Создай урок про классы лучше
    а ещё лучше про графические библиотеки расскажи.....

    ОтветитьУдалить
    Ответы
    1. я не комментирую код...... смотри на имена переменных вся подноготная ясна станет

      Удалить
    2. delete только созданные через указатель удаляет.... с этим разобрался

      Удалить
  14. //Задание 2 мне кажеться я такое мог написать уроков цать назад, сразу как функции проходили.... и не очень понимаю зачем мне отягощать код всякими функциями. Есля я могу этот квест выполнить в 15 строк
    #include
    #include
    #include

    using namespace std;

    void poisk(int *arr, int n)
    {
    int temp=0, tmp, i;
    for (i=0;itemp)
    {
    temp=arr[i];
    tmp=i;
    }
    }
    cout<<"Znachenie bolhe y "<temp)
    ________{
    ____________temp=arr[i];
    ____________tmp=i;
    ________}
    ____}
    ____cout<<"Znachenie bolhe y "<<tmp+1<<" elementa massiva, i ravno\n"<<temp<<endl;
    ____for(int a=0;a<n;a++)
    ____{
    ________cout<<"Element "<<a+1<<" ="<<arr[a]<<endl;
    ____}
    }


    int main()
    {
    ____srand(time(0));
    ____int n_m=rand()%30+1;
    ____int *mass = new(int [n_m]);
    ____for(int i=0; i<n_m;i++)
    ____{
    ________mass[i]=rand()%100-50;
    ____}
    ____poisk(mass,n_m);
    ____return 0;
    }// наверное не в 15 строк а в 20

    ОтветитьУдалить
  15. спать хочу.... 3 задание фигня, завтра напишу...... заголовочные файлы по идее будет интересный урок.... а двумерные..... хоть 4 мерные массивы ещё как массивы одномерные изучал изучил.... хм создам 3 задание в 2мерном массиве) одном

    ОтветитьУдалить
    Ответы
    1. int n=rand()%20+1;
      int *mass = new(int [2][n]);
      и так далее

      Удалить
  16. хм работать должно было.... странно щас перепишу но пока вот...
    //Задание 3
    #include
    #include
    #include

    using namespace std;

    void mult(int **arr,int m,int n)
    {
    ____for (int i=0; i<n; i++)
    ____{
    ________arr[0][n]*=arr[1][n];
    ____}
    }


    int main()
    {
    ____srand(time(0));
    ____int m=2, n=5;
    ____int **mass = (new int* [m]);
    ____for (int i=0; i<m; i++)
    ____{
    ________mass[i] = new (int [n]);
    ________for (int j=0; j<n; j++)
    ________{
    ____________mass[m][n]=rand()%10+1;
    ________}
    ____}
    ____mult(mass,m,n);
    ____for(int i=0; i<n; i++)
    ____{
    ________cout<<"Element "<<n+1<<" ="<<mass[0][i]<<endl;
    ____}
    ____return 0;
    }

    ОтветитьУдалить
    Ответы
    1. хм а вот сейчас я смогу осуществить идею, и даже лучше
      //двумерный массив перемножение в функции вывод в майне
      #include iostream
      #include stdlib.h
      #include ctime

      using namespace std;

      void mult(int **arr,int *n,int *m)
      {
      ____for(int i=0; i<*m; i++)
      ____{
      ________arr[*n-2][i]*=arr[*n-1][i];
      ____}
      }

      int main()
      {
      ____srand(time(NULL));

      ____//создание
      ____int *n=new int;
      ____*n=2;//столбцы для наглядности
      ____int *m=new int;
      ____*m=5;//строки
      ____int **mass=new int*[*n];
      ____for(int i=0;i<*n;i++)
      ____{
      ________mass[i]=new int[*m];
      ____}

      ____//заполенение
      ____for (int i=0; i<*n; i++)
      ____{
      ________for (int ii=0; ii<*m; ii++)
      ________{
      ____________mass[i][ii]=rand()%10+1;
      ________}
      ____}

      ____for(int i=0; i<*m;i++)
      ____{
      ________cout<<"mass[0]["<<i<<"]"<<mass[0][i]<<"\t mass[1]["<<i<<"]"<<mass[1][i]<<endl;
      ____}
      ____//функция
      ____mult(mass,n,m);

      ____//вывод
      ____cout<<endl;//ну вы поняли зачем
      ____for(int i=0; i<*m;i++)
      ____{
      ________cout<<"Mass[0]["<<i<<"]="<<mass[0][i]<<endl;
      ____}
      ____//освобождение
      ____for(int i=0;i<*n;i++)
      ____{
      ________delete[] mass[i];
      ____}
      ____delete[] mass;
      ____delete n;
      ____delete m;
      ____return 0;
      }

      Удалить
    2. тут на самом деле параметр в функции лишний "n" который я его мог просто заменить на 0 и 1. работает только в данном случае, а случай весьма спецефический, выглядит нелепо

      Удалить
    3. не работало из за этого
      _mass[i] = new (int [n]);
      _mass[i] = new (int *[n]);//ljk;yj ,должно быть так

      Удалить
    4. не работало из за этого
      _mass[i] = new (int [n]);
      _mass[i] = new (int *[n]);//ljk;yj ,должно быть так

      Удалить
  17. Работающее решение

    //Задание 3
    #include 'iostream"
    #include 'stdlib.h"
    #include 'time.h"

    using namespace std;

    void mult(int* arr1, int* arr2,int n)
    {
    ____for (int i=0; i<n; i++)
    ____{
    ________arr1[i]*=arr2[i];
    ____}
    }


    int main()
    {
    ____srand(time(0));
    ____int n=rand()%10+1;
    ____int* mass1=new(int [n]);
    ____int* mass2=new(int [n]);
    ____for(int i=0; i<n; i++)
    ____{
    ________mass1[i]=rand()%10+1;
    ________mass2[i]=rand()%10+1;
    ____}
    ____for(int i=0; i<n; i++)
    ____{
    ________cout<<"EM1 "<<i+1<<" ="<<mass1[i]<<"\t EM2 "<<i+1<<" ="<<mass2[i]<<endl;
    ____}
    ____mult(mass1, mass2, n);
    ____for(int i=0; i<n; i++)
    ____{
    ________cout<<"Element "<<i+1<<" ="<<mass1[i]<<endl;
    ____}
    ____return 0;
    }


    ОтветитьУдалить
  18. Этот комментарий был удален автором.

    ОтветитьУдалить

Примечание. Отправлять комментарии могут только участники этого блога.