0 / 0 / 0
Регистрация: 17.12.2009
Сообщений: 18
1

Написать функцию, которая меняет местами первый и последний ряд матрицы

25.01.2010, 16:37. Показов 3590. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
написать функциЮ которая меняеи местами первый и последний ряд матрицы(квадратной) и находит произведение элементов главной диагонали
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2010, 16:37
Ответы с готовыми решениями:

Как написать программу, которая меняет местами первую строку и последний столбец квадратной матрицы?
Здравствуйте, мне дали задание сгенерировать квадратную матрицу, на промежутке от а до b, и...

Написать функцию, которая меняет местами значения двух целых
Нужен рабочий код по решению задачи в С++ : «Напишите функцию которая меняет местами значения двух...

Создать функцию, которая меняет местами первую и последнюю строки квадратной матрицы
Создать функцию, которая меняет местами первую и последнюю строки квадратной матрицы и находит...

Написать функцию которая в заданом числе меняет местами два бита с задаными номерами
Сижу на экзамене очень сильно нужна помощь: задание - написать функцию которая в заданом числе...

20
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
25.01.2010, 17:20 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <conio.h>
#define H 3
#define W 3
long swapUmn(int *matrix,int h,int w);
void main(){
int matrix[H][W] = {
    {1,2,3}, 
    {4,5,6},
    {7,8,9}
    };
 
printf("transform\n");
long prDiag = swapUmn(&matrix[0][0],H,W);  //трансформируем, и получаем произведени элемнетов диагонали
 
//выводим результат
for(int i=0;i<H;i++){
    for(int j=0;j<W;j++){
printf(" "); printf("%d",matrix[i][j]);
    }
printf("\n");
}
printf("\n");
//выводим произведение элементов диагонали
printf("%d",prDiag);
printf("\n");
getch();
}
long swapUmn(int *matrix,int h,int w){
int i = 0;      //первая строка
int j = h-1;    //последня строка
int s = 0;      //индекс столбца
//Обмен последней строки и первой
for(;s<w;s++){
int tmp = matrix[i*w+s];
matrix[i*w+s] = matrix[j*w+s];
matrix[j*w+s]=tmp;
}
 
//Находим произведение элементов диагонали
int pr = 1;
for(int q = 0,k=0;q<h||k<w;q++,k++)pr*=matrix[q*w+k];
return pr;
}
1
0 / 0 / 0
Регистрация: 17.12.2009
Сообщений: 18
25.01.2010, 17:41  [ТС] 3
тут все круто но надо только в С
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
25.01.2010, 17:47 4
И так вроде на C, а что не компилируется.
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
25.01.2010, 18:48 5
И так вроде на C, а что не компилируется.
Это не C.
C++
1
for(int i=0;i<H;i++){
0
0 / 0 / 0
Регистрация: 17.12.2009
Сообщений: 18
25.01.2010, 18:53  [ТС] 6
это С.
0
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
25.01.2010, 18:54 7
Вы еще опрос создайте, С это или не С.
0
Быдлокодер
512 / 298 / 85
Регистрация: 22.11.2009
Сообщений: 892
25.01.2010, 18:55 8
Это не С, умник
С это
C
1
2
int i;
for (i=0;i<N;i++)
0
0 / 0 / 0
Регистрация: 17.12.2009
Сообщений: 18
25.01.2010, 19:46  [ТС] 9
в С тип переменной может объявляться в цикле
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
26.01.2010, 10:48 10
2udwik тебе умные люди говорят что это не C.
Чего ты упираешься ?
в С тип переменной может объявляться в цикле
Внутри тела цикла может.
А вот внутри for ( ; ; ) не может.
0
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
26.01.2010, 13:02 11
Специально для умных людей выдержка из стандарта С99 (красным выделено)
Миниатюры
Написать функцию, которая меняет местами первый и последний ряд матрицы  
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
27.01.2010, 07:50 12
выдержка из стандарта С99
По предыдущему стандарту не может.
Microsoft Visual Studio 2005/2008 не поддерживает C99.
И ?
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
27.01.2010, 08:25 13
Цитата Сообщение от odip Посмотреть сообщение
По предыдущему стандарту не может.
Ключевое слово "предыдущий". Язык развивается, а не стоит на месте.
Цитата Сообщение от odip Посмотреть сообщение
Microsoft Visual Studio 2005/2008 не поддерживает C99.
Поддержка стандарта со стороны производителей IDE не является особенностью языка.
Цитата Сообщение от odip Посмотреть сообщение
И ?
Это СИ.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.01.2010, 09:45 14
Цитата Сообщение от udwik Посмотреть сообщение
в С тип переменной может объявляться в цикле
В C++. А в C, насколько мне известно, нельзя.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
27.01.2010, 10:52 15
Цитата Сообщение от Gravity Посмотреть сообщение
Специально для умных людей выдержка из стандарта С99
Вы это разработчикам MS VS отправьте, а то они, видимо, не в курсе

Цитата Сообщение от taras atavin Посмотреть сообщение
А в C, насколько мне известно, нельзя.
В ANSI C 89 действительно нельзя, в ANSI C 99 можно, но этот стандарт не всеми компиляторами поддерживается. Кстати, кроме объявления переменных в заголовке for( ;; ) в С 99 есть много действительно полезных вещей. Откровенно не понимаю, почему мелкомягкие его вот уж больше 10 лет игнорируют...

Добавлено через 16 минут
для разнообразия:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
    
void swapRows(int **a, int **b){
    int *t;
    t = *a;
    *a = *b;
    *b = t;
}
 
long mulDiagonal(int **matr, int size){
    int mul = 1, i;
    for ( i = 0; i < size; ++i )
        mul *= matr[i][i];
    return mul;
}
 
#define ROW 5
 
int main(void){
    int **matr, i, j;
    
    srand(time(NULL));
    
    if ( ( matr = (int**)calloc(ROW, sizeof(int*)) ) == NULL )
        exit(1);
    for ( i = 0; i < ROW; ++i )
        if ( ( matr[i] = (int*)calloc(ROW, sizeof(int)) ) == NULL )
            exit(1);
    
    printf("\nMatrix:\n");
    for ( i = 0; i < ROW; ++i )
        for ( j = 0; j < ROW; ++j )
            printf( ( j < ROW - 1 ) ? "%2d " : "%2d\n", ( matr[i][j] = rand() % 10 ) );
    printf("\nSwap first and last rows:\n");
    swapRows(matr, matr + ROW - 1);
    for ( i = 0; i < ROW; ++i )
        for ( j = 0; j < ROW; ++j )
            printf( ( j < ROW - 1 ) ? "%2d " : "%2d\n", matr[i][j] );
            
    printf("\nMultiply of master diagonal = %ld\n", mulDiagonal(matr, ROW));
            
    for ( i = 0; i < ROW; ++i )
        free(matr[i]);
    free(matr);
    
    exit(0);
}
0
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
27.01.2010, 16:16 16
1)функция меняет любые стобцы матрицы, ей нужно передать указатель на массив, его размерность, и номера столбцов которые надо поменять:
C++
1
2
3
4
5
6
7
8
9
int** SwapRow(int** Matrix,unsigned int count_row, unsigned int count_col, unsigned int x, unsigned int y){
     unsigned int buf=0;
     for (int i=0; i<count_row; i++){
         buf=Matrix[i][x];
         Matrix[i][x]=Matrix[i][y];
         Matrix[i][y]=buf;
     }
     return Matrix;
}
2) произведение- оно и в африке произведение)
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
27.01.2010, 19:34 17
Да причем тут поддержка стандарта со стороны компиляторов?
Вопрос стоял следующим образом - допустима ли конструкция вида:
C++
1
for(int i = 0; i < n; ++i)
в языке Си.
Согласно последнему стандарту языка Си C99, ответ однозначен - да, допустима, см. пост Gravity #11.
Но такую конструкцию лучше не использовать т.к. не все компиляторы поддерживают стандарт C99.

Цитата Сообщение от udwik Посмотреть сообщение
это С.

Это ошибочно !
odip, как раз таки это верно. А править чужие посты из-за того, что мнение автора поста не совпадает с Вашим - ни как нельзя назвать поступком "умного" человека.
1
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
28.01.2010, 07:40 18
Поддержка стандарта со стороны производителей IDE не является особенностью языка.
При чем тут язык ?
Ты что сферическим компилятором компилируешь ?
В Visual Studio 2005/2008 ты эту конструкцию использовать не сможешь.
А тогда толку тебе от нее ?

Добавлено через 3 минуты
Вопрос стоял следующим образом - допустима ли конструкция вида ... в языке Си.
Вопрос поставлен не совсем корректно.
Язык C имеет несколько стандартов.
Согласно последнему стандарту языка Си C99, ответ однозначен - да, допустима
А согласно стандарту C89 и более старым конструкция недопустима.

Так о чем теперь будем спорить ?
Как трактовать неправильно заданный вопрос ?


Добавлено через 1 минуту
odip, как раз таки это верно. А править чужие посты из-за того, что мнение автора поста не совпадает с Вашим - ни как нельзя назвать поступком "умного" человека.
C точки зрения C89 это неверно.

Добавлено через 1 минуту
В ANSI C 89 действительно нельзя, в ANSI C 99 можно, но этот стандарт не всеми компиляторами поддерживается. Кстати, кроме объявления переменных в заголовке for( ;; ) в С 99 есть много действительно полезных вещей. Откровенно не понимаю, почему мелкомягкие его вот уж больше 10 лет игнорируют...
В новом Visual Studio 2010 вроде обещали поддержку C99.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
28.01.2010, 09:00 19
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Да причем тут поддержка стандарта со стороны компиляторов?
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
в языке Си.
Согласно последнему стандарту языка Си C99, ответ однозначен - да, допустима, см. пост Gravity #11.
Но такую конструкцию лучше не использовать т.к. не все компиляторы поддерживают стандарт C99.

Не по теме:

Тот же %#@ только в профиль... ;)

0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
28.01.2010, 19:47 20
Есть стандарт языка, а есть его поддержка со стороны компиляторов.
Давайте разделять эти понятия.

Стандарт диктует язык или разработчики компиляторов?

Давайте опираться именно на стандарт(ы), если мы говорим о возможностях языка как такового.
0
28.01.2010, 19:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2010, 19:47
Помогаю со студенческими работами здесь

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

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

Класс "Строка" содержащий метод, который меняет местами первый и последний символы строки
Написать программу чтобы первый и последний символы строки менялись местами. На экран выводился...

Поменять местами первый и последний столбец матрицы
Поменять местами первый и последний столбец матрицы


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru