Задачи: Массивы, условие отбора элементов, операции над элементами

Тема в разделе "C/C++/C#", создана пользователем Romashkinu, 4 дек 2010.

  1. Romashkinu

    Romashkinu Гость

    Здравствуйте!
    Буду благодарен за помощь и объяснение задач на тему массивы, желательно в компиляторе Bolard C++.

    Задачи звучат следующим образом:
    1. В одномерном массиве, состоящим из n целых элементов, вычислить:
    а) количество элементов массива, равных 0;
    б) сумму элементов массива, расположенных после минимального элемента.
    2. Задан массив {Аij} размерности MxM, требуется найти m= min (max)

    Заранее спасибо. :lovecodeby:
     
  2. Romashkinu

    Romashkinu Гость

    Код (C++):
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <malloc.h>
    int main()
    {
    srand((unsigned)time(NULL));
    clrscr();
    int *arr;
    int size,i,min,sum=0,count_nul=0,imin;
    printf("Enter size of array -> ");
    scanf("%d",&size);
    arr = (int*)malloc(size*sizeof(int));
    printf("\nArray: ");
    for(i=0; i<size; i++)
    {
    arr[i]=rand()%5;
    printf("%d ",arr[i]);
    if(arr[i]==0)
    {
    count_nul++;
    }
    }
    printf("\nNumber 0-elements -> %d",count_nul);
    min=arr[0];
    for(i=0; i<size; i++)
    {
    if(arr[i]<min)
    {
    min=arr[i];
    imin=i;
    }
    }
    for(i=imin+1; i<size; i++)
    {
    sum+=arr[i];
    }
    printf("\nMin -> %d",min);
    printf("\nSum after min -> %d",sum);
    getch();
    free(arr);
    return 0;
    }
    Это код к первой задаче, только я не могу его понять.
    Объясните пожалуйста, например какую роль играет в этом коде <malloc.h>, getch();
    free(arr); - Что это?
     
  3. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    А сами смотреть не пробовали?
    вот примерно так:
    <malloc.h> - подключение заголовочного файла для ф-ций работы с динамической памятью (выделение - malloc и освобождение)
    getch(); - ожидание ввода символа (организация задержки до нажатия клавиши -для просмотра результатов работы программы)
    free(arr); - освобождение памяти
    Если неправильно, народ поправит =)
     
  4. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    это 2 функции и подключение заголовочного файла. Вас что, в гугле забанили? ©
     
  5. Romashkinu

    Romashkinu Гость

    К счастью нет :discard:
    Я пользуюсь яндексом :)
    Спасибо за объяснение :)

    А вторую задачу как решить?
     
  6. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    А это не ваш код???? Или вы в трансе пишите ? ;-))) (Прошу прощения за сарказм ;-))
     
  7. Romashkinu

    Romashkinu Гость

    Верно.
    Код не мой :)
     
  8. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Вот, другое совсем дело ;-))
    Теперь второй вопрос, вы хотите что бы этот код доработали или написали новый(точно рабочий) ? ;-)
     
  9. Romashkinu

    Romashkinu Гость

    Этот рабочий, но я думаю у меня его не примут, так как мы ещё не проходили библиотеку <malloc.h>.
    Если можно то другой рабочий код, желательно самым простейшим способом и с библиотекой Iostream на языке Bolard. :)
     
  10. Romashkinu

    Romashkinu Гость

    Новый рабочий B)
     
  11. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (C++):
    /*
    codeby.net
    Autor: DarkKnight125 (Denis Goncharov)
    */

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <locale.h>

    /*
    1. В одномерном массиве, состоящим из n целых элементов, вычислить:
    а) количество элементов массива, равных 0;
    б) сумму элементов массива, расположенных после минимального элемента.
    */

    void main(void)
    {
    setlocale(LC_ALL,".1251");
    int Arr[500]; //Массив (макс. число элементов 500)
    int ZeroCount = 0; //Счетчик нулевых эл-ов
    int Sum = 0; //Сумма эл-ов после минимального
    int i; //Не люблю так делать, но я хз на какойм именно борладновском компиляторе ты будешь компилить, так что вынесу
    int Size; //Размерность именно нашего массива
    int MinEl = 9999999; //Минимальный элемент по умолчанию его сделаем очень большим
    int MinIndex; //Индекс минимального элемента массива
    srand(time(NULL)); //Инициализируем счетчик случ. величины
    printf("Введите размерность массива : ");
    scanf("%d", &Size);
    for (i = 0; i < Size; i++)
    {
    Arr[i] = rand()%100;
    printf("Arr[%d] = %d\n",i,Arr[i]);
    //Тут сразу и найдем и мин. элемент и сумму нулевых элементов
    if (Arr[i] == 0) ZeroCount++;
    if (Arr[i] < MinEl)
    {
    MinEl = Arr[i];
    MinIndex = i;
    }
    }
    //И того на этом этапе мы знаем кол-во нулевых элементов (ZeroCount)
    //Минимальный элемент MinEl и его индекс MinIndex, осталось только посчитать сумму
    for (i = MinIndex; i < Size; i++)
    Sum+= Arr[i];

    //Результат
    printf("Кол-во нулевых элементов в массиве = %d\n",ZeroCount);
    printf("Минимальный элемент массива = %d, его позиция в массиве = %d, а сумма эл.ов с этой позиции = %d",MinEl, MinIndex, Sum);
    }
    Добавлено:
    А вот тут не понимаю задания... Найти m = min(max), если с min - мне все ясно, то что означает max - не совсем (может вы имели ввиду макс. элемент в строке или макс. элемент в столбце)? Объясните пожалуйста
     
  12. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ну вот шаблончик... Только нужно выяснить что такое именно max и записать его в массив AMax
    Код (C++):
    /*
    codeby.net
    Autor: DarkKnight125 (Denis Goncharov)
    */

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <locale.h>

    /*
    2. Задан массив {Аij} размерности MxM, требуется найти m= min (max)
    */

    void main(void)
    {
    setlocale(LC_ALL,".1251");
    int A[500][500]; //Двумерный массивМассив (макс. число элементов 500х500)
    int AMax[500]; //Одномерный массив для каких то макс. начений
    int Minimal = 99999999; //Наше что то минимальное
    int i,j; //Не люблю так делать, но я хз на какойм именно борладновском компиляторе ты будешь компилить, так что вынесу
    int Size; //Размерность именно нашего массива (как я понимаю он квадратный)

    srand(time(NULL)); //Инициализируем счетчик случ. величины
    printf("Введите размерность массива кв. двумерного массива : ");
    scanf("%d", &Size);
    for (i = 0; i < Size; i++)
    {
    for (j = 0; j< Size; j++)
    {
    A[i][j] = rand()%100 * (rand()%2?1:-1);
    printf("Arr[%d][%d] = %d\n",i,j,A[i][j]);
    }
    }

    //продолжение следует ....

    for (i = 0; i< Size; i++)
    if (AMax[i] < Minimal)
    Minimal = AMax[i];
    printf("m= min (max), где max- ХЗ что = %d",Minimal);
    }
    Добавлено: В первой задачи кстати сумму тоже можно было бы в первом же цикле найти... Но посчитал что будет чуть менее понятно...
     
  13. Romashkinu

    Romashkinu Гость

    DarkKnight125
    Спасибо за решение и объяснение первой задачи, вторую задачу видимо я неправильно переписал :(
    Потом посмотрю и ещё правильно напишу :)
     
  14. alik86

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    А что за предмет?
    min(max), насколько я помню, обозначался минимакс (минимаксный критерий принятия решения в условиях неопределённости).
     
  15. Romashkinu

    Romashkinu Гость

    Практика программирования по си :)
     
  16. Romashkinu

    Romashkinu Гость

    А вот и правильное условие 2 задачи
    [​IMG]
     
  17. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (C++):
    /*
    2. Задан массив {Аij} размерности MxM, требуется найти m= min(i) (maxj{a(i,j)})
    */

    /*
    codeby.net
    Autor: DarkKnight125 (Denis Goncharov)
    */

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <locale.h>

    /*
    2. Задан массив {Аij} размерности MxM, требуется найти m= min (max)
    */

    void main(void)
    {
    setlocale(LC_ALL,".1251");
    int A[500][500]; //Двумерный массивМассив (макс. число элементов 500х500)
    int AMax[500]; //Одномерный массив для каких то макс. начений
    int Minimal = 99999999; //Наше что то минимальное
    int i,j; //Не люблю так делать, но я хз на какойм именно борладновском компиляторе ты будешь компилить, так что вынесу
    int Size; //Размерность именно нашего массива (как я понимаю он квадратный)

    srand(time(NULL)); //Инициализируем счетчик случ. величины
    printf("Введите размерность массива кв. двумерного массива : ");
    scanf("%d", &Size);
    for (i = 0; i < Size; i++)
    {
    for (j = 0; j< Size; j++)
    {
    A[i][j] = rand()%100 * (rand()%2?1:-1);
    printf("Arr[%d][%d] = %d\n",i,j,A[i][j]);
    }
    }

    //Найдем максимальные значение в каждом столбце
    printf ("Максимальные значение столбцов : \n");
    for (i = 0; i< Size; i++)
    {
    int Maximal = -9999999; //Макс. значение в столбце (для начало присвоим ему очень маленькое)
    for (j = 0; j<Size; j++)
    if (Maximal < A[j][i])
    Maximal = A[j][i];
    AMax[i] = Maximal;
    printf("%i ",AMax[i]);
    }

    //Теперь найдем из них минимальное
    for (i = 0; i< Size; i++)
    if (AMax[i] < Minimal)
    Minimal = AMax[i];
    printf("\nМинимальное значение из макс. зн. столбцов = %d\n",Minimal);
    }
     

    Вложения:

    • minmax.jpg
      minmax.jpg
      Размер файла:
      76,7 КБ
      Просмотров:
      17
  18. Romashkinu

    Romashkinu Гость

    Огромное спасибо :what?:
     
  19. Гость

    С++ Буду благодарен за помощь.
    Дан массив А (18).
    Сформулировать новый массив с позитивных чисел выходящего массива.
     
Загрузка...

Поделиться этой страницей