IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Двумерный массив на С++, Проверка на правильность написания кода
Екатерина
сообщение 13.06.2011 19:41
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Женский
Реальное имя: Екатерина

Репутация: -  0  +


Всем добрый вечер!
Есть задание к лабораторной работе
Написать функцию, для поиска максимального элемента в указанной строке двумерного массива. Сдвинуть в двумерном массиве все строки циклически вправо на количество элементов равное максимальному элементу в этой строке.
Могу я попросить специалистов проверить правильность написания кода?
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#define SIZE_ARRAY 10 //размер массива
#define MAX_INTEGER 10 //максимально допустимое число
int myarray[SIZE_ARRAY][SIZE_ARRAY]; // масив с которым работаем
int _tmain(int argc, _TCHAR* argv[])
{
int NeedString=0; //необходимая строка - строка с которой работаем
int max = 0; //с помощью этой переменной определяем максимальный элемент в строке
printf("Array:\n");

for (int i = 0; i < SIZE_ARRAY; i++) //заполняем массив случайными числами и одновременно выводим его на экран
{
for (int ii = 0; ii < SIZE_ARRAY; ii++)
{
myarray[i][ii] = rand()%MAX_INTEGER;
printf("%3d ", myarray[i][ii]);
};
printf("\n");
}
printf("Vvedi nomer stroki: "); //запрашиваем необходимую строку у пользователя..
scanf("%d", &NeedString);
while (NeedString <= 0 || NeedString > SIZE_ARRAY) //проверяем
{
printf("Vvedi v diapazone ot 1 do %d: ", SIZE_ARRAY);
scanf("%d", &NeedString);
printf("\n");
}
NeedString--;

for (int i = 0; i < SIZE_ARRAY; i++) //ищем максимальное число в строке
{
if (myarray[NeedString][i] > max) max = myarray[NeedString][i];
};
printf("Max integer in string is %d\n", max); //и выводим его на экран
printf("Sdvig %d strok na %d element vpravo\n", NeedString+1, max);
for (int i = 0; i < max; i++) //сдвигаем на нужное число элементов
{
int save = myarray[NeedString][SIZE_ARRAY-1];
printf("%d: ", i+1);
for (int ii = SIZE_ARRAY-1; ii > 0; ii--)
{
myarray[NeedString][ii] = myarray[NeedString][ii-1];
};
myarray[NeedString][0] = save;
for (int i = 0; i < SIZE_ARRAY; i++) printf("%3d ", myarray[NeedString][i]);
printf("\n");
};

scanf("%d", &NeedString);
return 0;
}


Слегка терзают смутные сомнения...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
IUnknown
сообщение 14.06.2011 9:07
Сообщение #2


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Цитата
Но тут уже зависит от компилятора.Если борландовский,то <...> Если микрософтовский,то <...>
А если использовать "плюсы" - то им по барабану, какой у тебя компилятор, майкрософтовский, борландовский, или от Интела, а может вообще Cameau, или GCC... Используй то, что определено в пространстве имен std, и проблемы разных компиляторов сразу куда-то улетучиваются.

В общем, если интересно, как это может выглядеть - вот так:
#include <vector>
#include <iterator>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>

int my_rand()
{
return std::rand() % 10;
}

int main()
{
size_t size = 10;
std::vector< std::vector<int> > mx(size, std::vector<int>(size, 0));
std::srand(std::time(0));
for(size_t i = 0; i < size; i++)
{
// Заполняем строки случайными значениями
std::generate(mx[i].begin(), mx[i].end(), my_rand);
// Покажем, что получилось
copy(mx[i].begin(), mx[i].end(), std::ostream_iterator<int>(std::cout, " "));
// Заодно сразу здесь выведем максимальный элемент
std::cout << " , max = " << *max_element(mx[i].begin(), mx[i].end()) << std::endl;
// И сдвинем циклически вправо на значение макс. элемента
std::rotate(mx[i].begin(), mx[i].end() - *max_element(mx[i].begin(), mx[i].end()),
mx[i].end());
}
std::cout << std::endl;

// Ну, и, разумеется, покажем, что получилось в результате:
for(size_t i = 0; i < 10; i++)
{
copy(mx[i].begin(), mx[i].end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
}
std::cin.get();
return 0;
}


Сообщение отредактировано: IUnknown - 14.06.2011 9:08
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Екатерина   Двумерный массив на С++   13.06.2011 19:41
Krjuger   Ну лично у меня был массив 10х10 а потом выводитс...   13.06.2011 20:27
Krjuger   В общем когда ответиш на мои вопросы,я постараюсь ...   13.06.2011 21:04
Екатерина   Ну я всё-таки склонна думать что сдвигать цикличес...   13.06.2011 21:59
IUnknown   Екатерина, это не С++, это чистый С... На С++ эта ...   13.06.2011 22:22
Krjuger   Ну собственно я немного переделал ваше. #include ...   13.06.2011 23:01
IUnknown   А если использовать "плюсы" - то им по б...   14.06.2011 9:07
Екатерина   СПАСИБО!!! Программа вроде работает ка...   14.06.2011 11:41
Krjuger   А вы их и не пройдете,принципы работы с вектором т...   14.06.2011 12:31
IUnknown   Просто заменить _tmain на main может быть недостат...   14.06.2011 13:39
Екатерина   Ой... не то сморозила.   14.06.2011 16:50
Екатерина   Всё замечательно работает! Спасибо! Замена...   14.06.2011 17:14
Krjuger   Да не, все его создают обычным образом просто наст...   14.06.2011 17:56
IUnknown   Чем быстрее ты научишься ЧИТАТЬ, а не просматриват...   14.06.2011 18:00


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 16.08.2025 0:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"