Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
udwik
0 / 0 / 0
Регистрация: 17.12.2009
Сообщений: 18
1

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

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

написать функциЮ которая меняеи местами первый и последний ряд матрицы(квадратной) и находит произведение элементов главной диагонали
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2010, 16:37
Ответы с готовыми решениями:

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

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

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

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

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

20
Genius Ignat
1241 / 779 / 108
Регистрация: 16.09.2009
Сообщений: 2,014
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
udwik
0 / 0 / 0
Регистрация: 17.12.2009
Сообщений: 18
25.01.2010, 17:41  [ТС] 3
тут все круто но надо только в С
0
Genius Ignat
1241 / 779 / 108
Регистрация: 16.09.2009
Сообщений: 2,014
25.01.2010, 17:47 4
И так вроде на C, а что не компилируется.
0
odip
Эксперт С++
7162 / 3221 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
25.01.2010, 18:48 5
И так вроде на C, а что не компилируется.
Это не C.
C++
1
for(int i=0;i<H;i++){
0
udwik
0 / 0 / 0
Регистрация: 17.12.2009
Сообщений: 18
25.01.2010, 18:53  [ТС] 6
это С.
0
Gravity
569 / 563 / 64
Регистрация: 29.01.2009
Сообщений: 1,274
25.01.2010, 18:54 7
Вы еще опрос создайте, С это или не С.
0
Darky
Быдлокодер
508 / 295 / 84
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
25.01.2010, 18:55 8
Это не С, умник
С это
C
1
2
int i;
for (i=0;i<N;i++)
0
udwik
0 / 0 / 0
Регистрация: 17.12.2009
Сообщений: 18
25.01.2010, 19:46  [ТС] 9
в С тип переменной может объявляться в цикле
0
odip
Эксперт С++
7162 / 3221 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
26.01.2010, 10:48 10
2udwik тебе умные люди говорят что это не C.
Чего ты упираешься ?
в С тип переменной может объявляться в цикле
Внутри тела цикла может.
А вот внутри for ( ; ; ) не может.
0
Gravity
569 / 563 / 64
Регистрация: 29.01.2009
Сообщений: 1,274
26.01.2010, 13:02 11
Специально для умных людей выдержка из стандарта С99 (красным выделено)
0
Миниатюры
Написать функцию, которая меняет местами первый и последний ряд матрицы  
odip
Эксперт С++
7162 / 3221 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
27.01.2010, 07:50 12
выдержка из стандарта С99
По предыдущему стандарту не может.
Microsoft Visual Studio 2005/2008 не поддерживает C99.
И ?
0
CyBOSSeR
Эксперт С++
2310 / 1683 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
27.01.2010, 08:25 13
Цитата Сообщение от odip Посмотреть сообщение
По предыдущему стандарту не может.
Ключевое слово "предыдущий". Язык развивается, а не стоит на месте.
Цитата Сообщение от odip Посмотреть сообщение
Microsoft Visual Studio 2005/2008 не поддерживает C99.
Поддержка стандарта со стороны производителей IDE не является особенностью языка.
Цитата Сообщение от odip Посмотреть сообщение
И ?
Это СИ.
0
taras atavin
4204 / 1767 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
27.01.2010, 09:45 14
Цитата Сообщение от udwik Посмотреть сообщение
в С тип переменной может объявляться в цикле
В C++. А в C, насколько мне известно, нельзя.
0
easybudda
Модератор
Эксперт CЭксперт С++
10120 / 6027 / 1511
Регистрация: 25.07.2009
Сообщений: 11,422
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
PointsEqual
ниначмуроФ
841 / 525 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
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
CyBOSSeR
Эксперт С++
2310 / 1683 / 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
odip
Эксперт С++
7162 / 3221 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
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
easybudda
Модератор
Эксперт CЭксперт С++
10120 / 6027 / 1511
Регистрация: 25.07.2009
Сообщений: 11,422
28.01.2010, 09:00 19
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Да причем тут поддержка стандарта со стороны компиляторов?
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
в языке Си.
Согласно последнему стандарту языка Си C99, ответ однозначен - да, допустима, см. пост Gravity #11.
Но такую конструкцию лучше не использовать т.к. не все компиляторы поддерживают стандарт C99.

Не по теме:

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

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

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

Давайте опираться именно на стандарт(ы), если мы говорим о возможностях языка как такового.
0
28.01.2010, 19:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2010, 19:47

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

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

Поменять местами первый и последний ряды матрицы
Разработать матрицу X(6,6) Поменять местами первый и последний ряды. заранее...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru