Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Помогите разобраться


Автор: revolmaxus 31.12.2008, 01:16
Доброго времени суток!
Помогите разобраться с заданием:
1.Ввести массив 2 на 10.
2.отобразить его на экране.
3.Поменять местами столбцы: 1 с 10м, 2 с 9м и т.д. через отдельно-созданную функцию.
Сделал сам (я чайник)так што прошу сильно не ржать:
Код

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
const int n=2, m=10;
int transmas(int mas[n][m])
{
int i,j,k;
for (j=0;j<n;j++)
    {
    for (i=0,k=m-1;i<=m/2,k>=m/2;i++,k--)
  {
  mas[j][i]=mas[j][i]+mas[j][k];
  mas[j][k]=mas[j][i]-mas[j][k];
  mas[j][i]=mas[j][i]-mas[j][k];
  }
    }
return mas[n][m];
}
int main()
{
int mas[n][m],i,j;
char answer;
             for(i=0;i<n;i++)
                         for(j=0;j<m;j++)
                        {
                         cout<<"'\n' enter "<<j+1<<" symbol of "<<i+1<<" string ";
                         cin>>mas[i][j];
                         }
cout<< "'\n' It is your mas? : ";
cout<< mas[n][m];
cout<<"answer-";
cin>>answer;
mas[n][m]=transmas(mas);
return 0;
}

Загвоздка в том, что вместо масива выводит код:0х0012ff34.
Пробовал решить многими способами ,но выводит тоже самое.
Кому не трудно- помогите разобраться.

Автор: mes 31.12.2008, 01:55
Цитата(revolmaxus @  31.12.2008,  01:16 Найти цитируемый пост)
cout<< mas[n][m];

выводит не массив, а элемент с коoрдинатами [n,m], который находится за границей Вашего массива.
чтоб вывести массив целиком добавьте цикл.


Автор: ISergeyN 31.12.2008, 02:24
Попробуй так:

Код

void outMas(const int mass[n][m])
{
    for(int i = 0 ; i<n; i++)
    {
        if(i>0) cout<<"]"<<endl;
        cout<<"[ ";
        for(int j = 0; j<m; j++)
        {
            cout<<mass[i][j]<<" ";
        }
    }
    cout<<"]"<<endl;
}



и здесь 
Цитата

int transmas(int mas[n][m]) 

замени на
Код

 int& transmas(int mas[n][m])

Автор: xvr 31.12.2008, 10:38
  •  В цикле for (i=0,k=m-1;i<=m/2,k>=m/2;i++,k--) неправильно записано условие: должно быть  for (i=0,k=m-1;i<=m/2 && k>=m/2;i++,k--)
  •  В этом же цикле условие можно записать гораздо проще - i<k
  •  Выражение mas[n][m]=transmas(mas); делает нечто непонятное (и неправильное). Массивы так не присваивают (и в С/С++ массивы вообще присвоить нельзя)
  •  В конце неплохо было бы вывести то, что получилось
  •  'Оптимизация' в обмене элементов массивов явно идет во вред: вместо того, что бы завести 1 временную переменную и сделать 3 обращения к массиву, к нему бедному обращаются аж 9 раз. И вообще, коль уж у тебя С++ то надо быть проще: std::swap(mas[j][i],mas[j][k]); (только не забудь сделать #include <algorithm>)

Автор: revolmaxus 31.12.2008, 11:27
Цитата

Попробуй так:
Код

void outMas(const int mass[n][m])
{
    for(int i = 0 ; i<n; i++)
    {
        if(i>0) cout<<"]"<<endl;
        cout<<"[ ";
        for(int j = 0; j<m; j++)
        {
            cout<<mass[i][j]<<" ";
        }
    }
    cout<<"]"<<endl;
}




и здесь Цитата

int transmas(int mas[n][m]) 


замени накод C++
1:
   int& transmas(int mas[n][m])





   

Спасибо!Попробовал, но не работает :(

Добавлено через 10 минут и 1 секунду
Цитата

 В цикле for (i=0,k=m-1;i<=m/2,k>=m/2;i++,k--) неправильно записано условие: должно быть  for (i=0,k=m-1;i<=m/2 && k>=m/2;i++,k--)

А амперсанты тут зачем, раз показал- обьесняй пожалуйта smile 
Цитата

В этом же цикле условие можно записать гораздо проще i<k

а если масив будет не парный?
Цитата

 В конце неплохо было бы вывести то, что получилось

она не полностью доделана и как я могу вывести результат есси с выводом вводимого не могу разобраться smile 
Цитата

std::swap(mas[j][i],mas[j][k]); (только не забудь сделать #include <algorithm>)

а вот за это- спасибо! smile 

Автор: revolmaxus 31.12.2008, 20:35
Ничего не помогает, все перепробовал, текст изменил, но так ничего и не работает smile 

Автор: xvr 31.12.2008, 20:57
Цитата(revolmaxus @ 31.12.2008,  11:27)
Добавлено @ 11:37
Цитата

 В цикле for (i=0,k=m-1;i<=m/2,k>=m/2;i++,k--) неправильно записано условие: должно быть  for (i=0,k=m-1;i<=m/2 && k>=m/2;i++,k--)

А амперсанты тут зачем, раз показал- обьесняй пожалуйта smile 

Условие i<=m/2,k>=m/2 вообще лишено смысла и полностью эквивалентно k>=m/2. Запятая между частями этого условия - это бинарный оператор ',' языка С (С++), он вычисляет последовательно оба своих аргумента и возвращает результат последнего. В твоем случае очевидно имелось в виду, что ОБА этих условия должна быть истинными, что и проверяет оператор && (логическое И)
Цитата

Цитата

В этом же цикле условие можно записать гораздо проще i<k

а если масив будет не парный?
Будет работать для любого массива.
Цитата

она не полностью доделана и как я могу вывести результат есси с выводом вводимого не могу разобраться smile 
А что не работает в OutMas от ISergeyN? Кстати, ты ее вообще вызывал?  smile 

Автор: revolmaxus 1.1.2009, 02:58
Всем спасибо огромное!!!
Дело было в криво поставленом дистрибутиве smile 
спасибо
ISergeyN, 
все работает, && я так и не поставил- работает как надо и без них smile 
 smile 

Автор: ISergeyN 2.1.2009, 02:31
Цитата(revolmaxus @  1.1.2009,  02:58 Найти цитируемый пост)
&& я так и не поставил- работает как надо и без них 

сам не пойму как оно работает...(в етом  случае)

Автор: xvr 5.1.2009, 12:39
Цитата(ISergeyN @ 2.1.2009,  02:31)
Цитата(revolmaxus @  1.1.2009,  02:58 Найти цитируемый пост)
&& я так и не поставил- работает как надо и без них 

сам не пойму как оно работает...(в етом  случае)

Работает только второе условие, первое игнорируется. Работать будет, так как оба условия почти эквивалентны, а то место, где они не эквивалентны, никак не влияет на результат.
Но наличие там запятой, вместо &&, говорит о том, что автор влепил что-то откуда то толком не разобравшись, и похоже без желания разбираться, что тоскливо  smile 

Автор: revolmaxus 27.1.2009, 13:44
прошу прощения smile , получил задание почти не зная языка, разбиралсо сам, просто небыло много времени, штоб во всем по отдельности устраивать "разбор полётов" smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)