|
|
|
Полезно |
Пакет за пълно възстановяване със зъбни импланти в рамките 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 |
|
|
преди: 10 години, 1 месец hash: e1b398defa |
|
1. Ако имаш нужда да ти я обясняват ред по ред се обезсмисля нуждата да ти я опростяват, или да ти я пишат на ново (каквото и да имаш в предвид под това "на ново").
|
преди: 10 години, 1 месец hash: 6231d1f1c3 |
|
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 |
|
3. Всъщност това май не е С, а С понеже използват new внесто malloc, но това няма значение. Всичко казано по-горе остава в сила.
|
преди: 10 години, 1 месец hash: ce77dcf1c4 |
|
4. това програма на паскал ли е ?
|
преди: 10 години, 1 месец hash: 8322b09663 |
|
5. Тази тема сигурно е някакъв майтап честно. Това да не ви е форум по информатика за решаване на домашно?
|
...
преди: 10 години, 1 месец hash: 628839d6a4 |
|
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 |
|
7. Аз съм 2 и 3. Програмата е на С плюс плюс. В C ги няма операторите new и delete.
|
преди: 10 години, 1 месец hash: 1ed28b924a |
|
8. до 7 от 6. Написах "С плюс плюс" в горния си пост, но поради незнайно каква причина плюсовете ги няма в поста ми.
|
|
|
Коментари очaкващи одобрение: няма |
... |
|
|
|