Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   C++ Turbo 3.0 Задача с массивом! (http://forum.oszone.net/showthread.php?t=189200)

ValeraRU 24-10-2010 05:35 1525912

C++ Turbo 3.0 Задача с массивом!
 
Здравствуйте,нужна помощь,в общем на лаб. по программированию сейчас идут задачи с массивом,в связи с нехваткой знаний обращаюсь к вам за помощью) помогите чем сможете
вот задача(пример)
Код:

/*
Подключние рабочих библиотек:
    <stdio.h> - библиотека ввода/вывода
*/
#include <stdio.h>

int main(int argc, char* argv[])
{
    /* Именованная константа, определяющая количество элементов массива */
    const    MAX_ELEMENTS = 8;

    /* Объявление и инициализация переменных */
    float    m[MAX_ELEMENTS];
    float    sum = 0;
    float    result = 1;
    int      iMax, iMin;

    /* Запрашиваем ввод данных с клавиатуры */
    for (int i = 0; i < MAX_ELEMENTS; i++)
    {
        printf("m[%d] = ", i);
        scanf("%f", &m[i]);
    }

/* Принимаем индексы максимального и минимального массива равными 0 */
    iMin = iMax = 0;
    for (i = 0; i < MAX_ELEMENTS; i++)
    {
        /* Вычисляем сумму отрицательных элементов массива */
        if (m[i] < 0) sum += m[i];

        /* Находим индексы максимального и минимального элементов массива */
        if (m[i] > m[iMax]) iMax = i;
        if (m[i] < m[iMin]) iMin = i;
    }

    /* Находим произведение элементов массива, находящихся между минимальным и максимальными элементами */
    for (i = ((iMax < iMin) ? iMax : iMin);
        i <= ((iMax > iMin) ? iMax : iMin);
        result *= m[i++]);

    /* Выводим на экран результат вычислений */
    printf("\nСумма отрицательных элементов = %.2f\n", sum);
    printf("Результат = %.2f\n\n", result);

    /* Сортировка элементов массива по возрастанию */
    for (i = 0; i < MAX_ELEMENTS; i++)
    {
        for (int j = i + 1; j < MAX_ELEMENTS; j++)
        {
            if (m[i] > m[j])
            {
                result = m[i];
                m[i] = m[j];
                m[j] = result;
            }
        }
    }

    /* Вывод на экран отсортированного по возрастанию массива */
    printf("Отсортированный массив:\n");
    for (i = 0; i < MAX_ELEMENTS; printf("%.2f ", m[i++]));

    return 0;
}

Результат выполнения программы:
m[0] = 3
m[1] = 7
m[2] = -4
m[3] = 8
m[4] = -1
m[5] = 9
m[6] = 0
m[7] = 7

Сумма отрицательных элементов = -5.00
Результат = 288.00

Отсортированный массив:
-4.00 -1.00 0.00 3.00 7.00 7.00 8.00 9.00

вот условие(моей задачи)
Код:

В одномерном массиве, состоящем из п вещественных элементов, вычислить:
1)        сумму положительных элементов массива;
2)        произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами.
Упорядочить элементы массива по убыванию.

и вот что я написал
Код:

#include <stdio.h>
#include <math.h>
int main(int argc, char* argv[])
{
    const    MAX_ELEMENTS = 80;
    float    m[MAX_ELEMENTS];
    float    sum = 0;
    float    result = 1;
    int      iMax, iMin,n;
      FILE *in=fopen("1.txt","r");
    fscanf(in,"%d", &n);
    for (int i = 0; i < n; i++)
    {
      //        printf("m[%d] = ", i);
        fscanf(in,"%f", &m[i]);
    }
    iMin = iMax = 0;
    for (i = 0; i < MAX_ELEMENTS; i++)
    {
        if (m[i] > 0) sum += m[i];
        if (m[i] > m[iMax]) iMax = i;
        if (m[i] < m[iMin]) iMin = i;
    }
    for ( i = ((iMax < iMin) ? iMax : iMin);
        i <= ((iMax > iMin) ? iMax : iMin);
        result *= m[i++]);
    printf("\n summa polojitelinih 4isel  = %.2f\n", sum);
    printf("rezultat = %.2f\n\n", result);
    for (i = 0; i > MAX_ELEMENTS; i--)
    {
        for (int j = i - 1; j < MAX_ELEMENTS; j--)
        {
            if (m[i] < m[j])
            {
                result = m[i];
                m[i] = m[j];
                m[j] = result;
            }
        }
    }
    printf("otsortirovanii massiv:\n");
  for (i = 0; i < MAX_ELEMENTS; printf("%.2f ", m[i++]));
    return 0;
}

помогите доработать =(
очень надо!

и вот вторая задача
пример:

Код:

ДВУМЕРНЫЕ МАССИВЫ

Пример задания:        Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом. Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.

Пример решения задачи:

#include <stdio.h>

int main(int argc, char* argv[])
{
    /* Объявляем и инициализируем матрицу 8х8 */
    int    matrix[8][8] = {
                          { 2, 7, 2, 7, 1, 4, 0, 3 },
                          { 1, 0, 7, 6, 0, -8, 3, 5 },
                          { 2, 7, 1, 8, 1, 4, 9, 3 },
                          { 9, 2, 8, 5, 2, 0, 0, 6 },
                          { 7, 1, 1, 3, 9, 3, 9, 1 },
                          { 8, 2, 4, 9, 1, -6, 4, 9 },
                          { 0, 3, 9, 0, 9, 4, 8, 8 },
                          { 1, 8, 3, 2, 8, 2, 8, 0 }
                          };
    int    i, j, iSumm; /* Счетчик и переменная для хранения суммы */
    bool    bFlag;          /* Флаг */

    /*----------------------------------------------*/
    /*    П Е Р В А Я  Ч А С Т Ь  З А Д А Н И Я  */
    /*----------------------------------------------*/
    printf("k = ");
    for (i = 0; i < 8; i++)
    {
        /* Присваиваем Флагу исходное значение */
        bFlag = true;
        for (j = 0; j < 8; j++)
        {
            /* Сравниваем элемент i-й строки j-го столбца с элементом j-й строки i-го столбца. В случае их несоответствия присваиваем Флагу значение Ложь и прерываем цикл по j конструкцией break */
            if (matrix[i][j] != matrix[j][i])
            {
                bFlag = false;
                break;
            }
        }
        /* В случае сохранения флагом исходного значения выводим на экран номер соответствующей строки */
        if (bFlag) printf("%d ", i);
    }

    /*----------------------------------------------*/
    /*    В Т О Р А Я  Ч А С Т Ь  З А Д А Н И Я  */
    /*----------------------------------------------*/
    printf("\n\n");
    for (i = 0; i < 8; i++)
    {
        /* Присваиваем переменным исходные значения */
        bFlag = false;
        iSumm = 0;
        for (j = 0; j < 8; j++)
        {
            /* При нахождение хотя бы одного отрицательного элемента присваиваем Флагу значение Истина, обозначающее необходимость вывода Суммы на экран */
            if (matrix[i][j] < 0) bFlag = true;

          /* Суммируем значения элементов i-й строки */
            iSumm += matrix[i][j];
        }
        /* В случае нахождения в строке хотя бы одного отрицательного элемента выводим на экран сумму элементов i-й строки */
        if (bFlag) printf("Сумма элементов строки #%d = %d\n", i, iSumm);
    }

    return 0;
}

Результат выполнения программы:
k = 2 6

Сумма элементов строки #1 = 14
Сумма элементов строки #5 = 31

что надо сделать мне :
Цитата:

Осуществить циклический сдвиг элементов квадратной матрицы размерности МхN вправо на k элементов таким образом: элементы 1-й строки сдвигаются в последний столбец сверху вниз, из него - в последнюю строку справа налево, из нее - в первый столбец снизу вверх, из него - в первую строку; для остальных элементов - аналогично.
ребята очень нужно,заранее благодарю

ValeraRU 24-10-2010 23:14 1526579

Ребята срочно =(


Время: 10:52.

Время: 10:52.
© OSzone.net 2001-