Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2011, 20:32   #1
Анннютик
Пользователь
 
Регистрация: 02.08.2011
Сообщений: 18
По умолчанию Массивы

Подскажите ,пожалуйста, где здесь ошибка:

Код:
#include <stdio.h>
#define SIZE 4
int main()
{
	int matrix[SIZE][SIZE] ={ {2,2,2,2},
						{3,3,3,3},
						{1,1,1,1},
						{4,4,4,4}};
	int PP = 0;
	int X, Y;
	int Y2;
	for (Y = 0; Y < SIZE; Y++)
	{
		for (X = 0; X < SIZE; X++)
			printf("%d ", matrix[X][Y]);
		puts("");
	}
PP = matrix[0][0];
	for (Y = 0; Y < SIZE; Y++)
		for (X = 0; X < SIZE; X++)
			if (matrix[X][Y] > PP) PP = matrix[X][Y];

	printf("введите m\n");
	scanf("%d",&Y2)
	for (X = 0; X <SIZE ; X++)
	{
PP = matrix[X][Y];
matrix[X][Y] = matrix[X][Y2];
	matrix[X][Y2] = PP
	printf("%d", PP);}
	return 0;
}
А вот сама задача:
Задана квадратная матрица. Переставить строку с максимальным элементом на главной
диагонали со строкой с заданным номером m .

Последний раз редактировалось Stilet; 05.08.2011 в 20:59.
Анннютик вне форума Ответить с цитированием
Старый 05.08.2011, 20:54   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Вы максимум ищите не по главной диагонали, а вообще
p51x вне форума Ответить с цитированием
Старый 05.08.2011, 21:08   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Уже кое-что. Есть пропущенные ';' в двух отмеченных строках:
Код:
#include <stdio.h>
#define SIZE 4

int main() {
    int matrix[SIZE][SIZE] ={ {2,2,2,2},
    {3,3,3,3},
    {1,1,1,1},
    {4,4,4,4}};
    int PP = 0;
    int X, Y;
    int Y2;
    for (Y = 0; Y < SIZE; Y++) {
        for (X = 0; X < SIZE; X++)
            printf("%d ", matrix[X][Y]);
        puts("");
    }
    PP = matrix[0][0];
    for (Y = 0; Y < SIZE; Y++)
        for (X = 0; X < SIZE; X++)
            if (matrix[X][Y] > PP) 
                PP = matrix[X][Y];

    printf("введите m\n");
    scanf("%d",&Y2);
    for (X = 0; X <SIZE ; X++) {
        PP = matrix[X][Y];
        matrix[X][Y] = matrix[X][Y2];
        matrix[X][Y2] = PP;
        printf("%d", PP);
    }
    return 0;
}
P.S. Чем компилируете? Неужели компилятор не выдаёт ошибок? Просто перед тем, как выкладывать код над ним, хотя бы немного, надо поработать!

Последний раз редактировалось 8Observer8; 05.08.2011 в 21:17.
8Observer8 вне форума Ответить с цитированием
Старый 05.08.2011, 23:22   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Мой вариант такой:
Код:
#include <stdio.h>
#include <locale.h>
#include <conio.h>

#define SIZE 4

/* переставляет строку с максимальным элементом на главной
диагонали со строкой с заданной пользователем */
int main() {
    setlocale(LC_ALL, "Russian");

    printf("Переставляет строку с максимальным элементом на главной \
диагонали со строкой заданной пользователем\n\n");

    // инициализация элементов матрицы
    int matrix[SIZE][SIZE] = {  {2,2,2,2},
                                {3,3,3,3},
                                {1,1,1,1},
                                {4,4,4,4}};

    // вывод матрицы
    int row, col;
    for (row = 0; row < SIZE; row++) {
        for (col = 0; col < SIZE; col++)
            printf("%d ", matrix[row][col]);
        puts("");
    }

    // поиск максимального элемента на главной диагонали
    col = SIZE-1;
    int element, numMaxRow, max = 0;
    for (row = 0; row < SIZE; row++) {
        element = matrix[row][col];
        // сохраняем значение максимального элемента и его номер строки
        if (element > max) {
            max = element;
            numMaxRow = row;
        }
        col--;
    }

    // сохраняем строку с максимальным элементом на главной диагонали
    int tempArr[SIZE];
    for (int i = 0; i < SIZE; i++) {
        tempArr[i] = matrix[numMaxRow][i];
    }

    // получаем от пользователя номер строки
    printf("\nВведите номер строки:\n> ");
    int userRow;
    scanf("%d",&userRow);

    // копируем указанную пользователем строку на место строки с
    // максимальным элементом на главной диагонали
    for (col = 0; col < SIZE; col++) {
        matrix[numMaxRow][col] = matrix[userRow][col];
    }

    // копируем сохранённую строку максимальным элементом на главной
    // диагонали на место строки указанной пользователем
    for (int i = 0; i < SIZE; i++) {
        matrix[userRow][i] = tempArr[i];
    }

    // вывод матрицы
    for (row = 0; row < SIZE; row++) {
        for (col = 0; col < SIZE; col++)
            printf("%d ", matrix[row][col]);
        puts("");
    }

    _getch();
    return 0;
}

Последний раз редактировалось 8Observer8; 05.08.2011 в 23:25. Причина: Орфография
8Observer8 вне форума Ответить с цитированием
Старый 05.08.2011, 23:33   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
element = matrix[row][col];
И это главная диагональ?
p51x вне форума Ответить с цитированием
Старый 05.08.2011, 23:38   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

p51x, я проверил, что не так?
8Observer8 вне форума Ответить с цитированием
Старый 06.08.2011, 00:17   #7
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

это побочная диагональ.

memswap тут написать хорошо бы.. из 3-х строк
onewho вне форума Ответить с цитированием
Старый 06.08.2011, 08:56   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

p51x, onewho, спасибо! Сейчас нашёл таки книгу "Линейная алгебра и геометрия" и ужаснулся!

onewho, memswap - нет в стандартной библиотеки. Может она по-другому называется?

Исправленный код:
Код:
#include <stdio.h>
#include <locale.h>
#include <conio.h>

#define SIZE 4

/* переставляет строку с максимальным элементом на главной
диагонали со строкой с заданной пользователем */
int main() {
    setlocale(LC_ALL, "Russian");

    printf("Переставляет строку с максимальным элементом на главной \
диагонали со строкой заданной пользователем\n\n");

    // инициализация элементов матрицы
    int matrix[SIZE][SIZE] = {  {2,2,2,10},
                                {3,3,3,3},
                                {1,1,5,1},
                                {4,4,4,4}};

    // вывод матрицы
    int row, col;
    for (row = 0; row < SIZE; row++) {
        for (col = 0; col < SIZE; col++)
            printf("%d ", matrix[row][col]);
        puts("");
    }

    // поиск максимального элемента на главной диагонали
    col = 0;
    int element, numMaxRow, max = 0;
    for (row = 0; row < SIZE; row++) {
        element = matrix[row][col];
        // сохраняем значение максимального элемента и его номер строки
        if (element > max) {
            max = element;
            numMaxRow = row;
        }
        col++;
    }

    // сохраняем строку с максимальным элементом на главной диагонали
    int tempArr[SIZE];
    for (int i = 0; i < SIZE; i++) {
        tempArr[i] = matrix[numMaxRow][i];
    }

    // Получаем от пользователя номер строки
    printf("\nВведите номер строки:\n> ");
    int userRow;
    scanf("%d",&userRow);
    puts("");

    // копируем указанную пользователем строку на место строки с
    // максимальным элементом на главной диагонали
    for (col = 0; col < SIZE; col++) {
        matrix[numMaxRow][col] = matrix[userRow][col];
    }

    // копируем сохранённую строку максимальным элементом на главной
    // диагонали на место строки указанной пользователем
    for (int i = 0; i < SIZE; i++) {
        matrix[userRow][i] = tempArr[i];
    }

    // вывод матрицы
    for (row = 0; row < SIZE; row++) {
        for (col = 0; col < SIZE; col++)
            printf("%d ", matrix[row][col]);
        puts("");
    }

    _getch();
    return 0;
}
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
указатели на массивы и массивы указателей blacktener Общие вопросы C/C++ 16 13.06.2011 20:45
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09
С++, Массивы, динамические массивы. -Sunshine- Помощь студентам 1 19.04.2010 02:17
Массивы hewlett Помощь студентам 2 12.04.2010 16:06
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12