Програмиране - опростяване на програма - Spodeli.net


Нещата от живота...
 
Реклама


 Начало
 Правила
 Добави история!
 Контакт
 
Споделени истории (124640)
 Любов и изневяра (30687)
 Секс и интимност (14697)
 Тинейджърски (22078)
 Семейство (6788)
 Здраве (9790)
 Спорт и красота (4787)
 На работното място (3377)
 Образование (7450)
 В чужбина (1712)
 Наркотици и алкохол (1131)
 Измислени истории (802)
 Проза, литература (1773)
 Други (19412)
 Избор на редактора (156)
 
Полезно

Пакет за пълно възстановяване със зъбни импланти в рамките 5 работни дни. Опитен екип и зъботехници, венозна седация от анестезиолог, временни и постоянни мостове - фиксирана цена

Запознай се с актуалните цени на зъбни импланти в дентална клиника Смайл Дентал Сървисес

 

  

Споделена история от Други

Програмиране - опростяване на програма
преди: 10 години, 1 месец, прочетена 1212 пъти
Дали някой може да опрости тази програма или да я обясни ред по ред, или направо да я напише наново?Ето го и заданието-В двумерен масив въведете стойности.Разменете местата на първия ред с реда ,съдържащ max елемент.Да се изведе новият масив
#include <iostream>

using namespace std;

void setArrayElements( int **arr, int rows, int cols );
void printArrayElements( int **arr, int rows, int cols );
int findMaxElementRow( int **arr, int rows, int cols );
void swapRows( int **arr, int rows, int cols, int maxRow );

int main( )
{
int rows;
int cols;

int maxRow;

cout << "Enter the number of rows: ";
cin >> rows; cin.get( );

cout<< "Enter the number of columns: ";
cin >> cols; cin.get( );

int **arr = new int*[ rows ];
for( int i = 0; i < rows; i++ )
{
arr[ i ] = new int[ cols ];
}

setArrayElements( arr, rows, cols );

maxRow = findMaxElementRow( arr, rows, cols );

swapRows( arr, rows, cols, maxRow );

printArrayElements( arr, rows, cols );

for( int i = 0; i < rows; i++ )
{
delete [ ]arr[ i ];
}
delete [ ]arr;


cout << "Press any key to exit...";
char f;
cin.get( f );

return 0;
}

void setArrayElements( int **arr, int rows, int cols )
{
for( int i = 0; i < rows; i++ )
{
cout << "Enter numbers for row " << i << ":n";
for( int j = 0; j < cols; j++ )
{
cout << "Column " << j << ": ";
cin >> arr[ i ][ j ]; cin.get( );
}

}
}

void printArrayElements( int **arr, int rows, int cols )
{
for( int i = 0; i < rows; i++ )
{
for( int j = 0; j < cols; j++ )
{
cout << arr[ i ][ j ] << "t";
}

cout << "n";
}
}

int findMaxElementRow( int **arr, int rows, int cols )
{
int maxRow = 0;
int maxCol = 0;

for( int i = 0; i < rows; i++ )
{
for( int j = 0; j < cols; j++ )
{
if( arr[ i ][ j ] > arr[ maxRow ][ maxCol ] )
{
maxRow = i;
maxCol = j;
}
}
}

return maxRow;
}

void swapRows( int **arr, int rows, int cols, int maxRow )
{
if( maxRow != 0 )
{
int temp;

for( int j = 0; j < cols; j++ )
{
temp = arr[ 0 ][ j ];
arr[ 0 ][ j ] = arr[ maxRow ][ j ];
arr[ maxRow ][ j ] = temp;
}
}
}

 
Сподели историята:
 
<< Предишна Случайна Следваща >>
 
 

Коментари

Добави Коментар!
Вземи последните коментари по RSS
 
Изпрати ми имейл, ако някой добави коментар към тази история (какво е това?)
 
Email:
  ... ... ...
Коментари на страница: Най-отгоре:

преди: 10 години, 1 месец
hash: e1b398defa
гласове:
1 2 3 4 5
  (305911 гласа)

1.   Ако имаш нужда да ти я обясняват ред по ред се обезсмисля нуждата да ти я опростяват, или да ти я пишат на ново (каквото и да имаш в предвид под това "на ново").

 
  ...
преди: 10 години, 1 месец
hash: 6231d1f1c3
гласове:
1 2 3 4 5
  (252444 гласа)

2.   Аз не мога да програмирам на С, но разбирам какво прави програмата. Не е толкова сложно да се досетиш, дори и имената на методите ти казват, за какво точно служат.

Първо въвеждаш в конзолата броя на редовете и колоните за масива. После инициализираш двумерен масив с тези размери.

int **arr = new int*[ rows ];
Тук декларираш pointer към pointer от int, което явно е начина в С да се декларира масив. После инициализираш всеки ред да бъде едномерен масив с дължина броя на колоните:
for( int i = 0; i < rows; i )
{
arr[ i ] = new int[ cols ];
}

Методът setArrayElements просто те кара да въведеш ръчно на конзолата числата за всеки ред от масива и ги съхранява в него. Ако знаеш как един работи един цикъл и как се чете и записва стойност в масив, няма какво да ти се обяснява ред по ред. А ако не знаеш това, няма някой луд да седне да ти го обяснява тук. Ще трябва да си го изясниш в училище.

Методът printArrayElements отпечатва всички елемент на масива - ред по ред и колона по колона, затова имаш nested loop, т.е един цикъл вграден във друг цикъл.

Методът findMaxElementRow намира реда, който съдържа максималния елемент. Пак елементарно итериране по ред и колона и сравняване на всеки елемент с досегашния максимален. Накрая методът връща индекса на реда съдържащ максималния елемент.

Методът swapRows разменя местата на първия ред и реда съдържащ максималния елемент. Първо се проверява, дали реда с максималния елемент е различен от първия. Ако това е така, следва един цикъл в който числата от първия ред се съхраняват в променливата temp, числата от другия ред се записват в първия ред и после числата от temp се записват в другия ред.

 
  ...
преди: 10 години, 1 месец
hash: 6231d1f1c3
гласове:
1 2 3 4 5
  (223330 гласа)

3.   Всъщност това май не е С, а С понеже използват new внесто malloc, но това няма значение. Всичко казано по-горе остава в сила.

 
  ... горе^
преди: 10 години, 1 месец
hash: ce77dcf1c4
гласове:
1 2 3 4 5
  (142012 гласа)

4.   това програма на паскал ли е ?

 
  ...
преди: 10 години, 1 месец
hash: 8322b09663
гласове:
1 2 3 4 5
  (0 гласа)

5.   Тази тема сигурно е някакъв майтап честно. Това да не ви е форум по информатика за решаване на домашно?

 
  ...


...
преди: 10 години, 1 месец
hash: 628839d6a4
гласове:
1 2 3 4 5
  (1 гласа)

6.   до 2 и 3: Програмата е на С , обаче ползва някои подходи, по-типични за С (често срещано).

до автора: Програмата не може да се опрости много, ако искаме да запазим общата структура. Най-много функциите за изпринтване на масива и за търсене на максималния елемент да се направят на една - защото с двата цикъла минаваш по един и съща начин през един и същ масив.

Друга опция за лека оптимиазация: двата цикъла да ги направиш на един цикъл, който обхожда n*m елемента (n - брой колони, m - брой редове). после изчисляването на индексите вътре в масива ще ти е for (int k = 0; k < n*m; k ) array_elemnt = array[k/n][k%n]

Но като цяло ако си на стадий някой да ти обясни какво прави програмата, то по-добре първо се фокусирай върху това.

 
  ... горе^
преди: 10 години, 1 месец
hash: fb99973124
гласове:
1 2 3 4 5
  (100228 гласа)

7.   Аз съм 2 и 3. Програмата е на С плюс плюс. В C ги няма операторите new и delete.

 
  ...
преди: 10 години, 1 месец
hash: 1ed28b924a
гласове:
1 2 3 4 5
  (2 гласа)

8.   до 7 от 6. Написах "С плюс плюс" в горния си пост, но поради незнайно каква причина плюсовете ги няма в поста ми.

 
  ...

Коментари очaкващи одобрение: няма
...

Коментари, които са написани неграмотно, с латински или главни букви няма да бъдат добавени!

1. Бъди полезен на другите с коментара си!
2. Хейтъри не се толерират!
3. Обидните квалификации не са аргумент :-)
4. Пазете мъдростта за себе си, другите имат нужда от съчувствие!

Знаете ли, че след символите запетая и точка винаги следва интервал?   [ Да ]   [ Не ]

При нас коментарите се одобряват ръчно. Въведи своя имейл адрес и ще получиш известие, когато бъде публикуван нов коментар.(какво е това?)



Copyright © 2007 Spodeli.net
eXTReMe Tracker