Skip to content
View in the app

A better way to browse. Learn more.

АнимеФорум

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Помогаем товарищам в учебе и работе.

И так, тем создана для помощи студентам при здачи сессии, пишите сюда свои задачи, что нужно найти, и что не понятно, думаю добрые люди не откажут и помогут.

Лично я помогу все, у кого проблемы по дисциплинам: Менеджмент, Долгосрочное планирование, Краткосрочное планирование, Бухгалтерский учет, Финансы и кредит, ДОУ. (кому нужна помощь пишите)

 

 

Ну а теперь вопрос к програмистам, как решить вот эту задачу, точнее решение есть, но нужно его подкорректировать =)

 

Экзаменационный билет №4

По курсу «Программирование на языке высокого уровня»

 

 

1.Указатели. Указатели и массивы.

2. Наследование классов.

Задача.

Дана действительная квадратная матрица порядка n. Найти в ней наибольший по модулю элемент. Получить из нее квадратную матрицу порядка n-1путем выбрасывания из исходной матрицы строки и столбца, на пересечении которых стоит наибольший элемент.

 

 

#include <iostream.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

float newmass(float D[][10],int k);

void main()

{clrscr();

float A[10][10],max;

int i,n,j;

do

{cout<<"chislo elementov matrici<10=";

cin>>n;

}

while(n>=10&&n<0);

for(i=0;i<n;i++)

for(j=0;j<n;j++)

{cout<<"Vvedite element matrici A["<<i<<"]"<<"["<<j<<"]=";

scanf("%f",&A[j]);

}

for(i=0;i<n;i++)

{for(j=0;j<n;j++)

 

printf("%3.1f",A[j]);

 

printf("\n");

}

max=newmass(A,n);

printf("max elemenet po modulu%3.1f",max);

getch();

}

float newmass(float D[][10],int k)

{int i,j,indexi,indexj;

float B[9][9],maxd=D[0][0];

indexi=0;indexj=0;

int i1,j1;

for(i=0;i<k;i++)

{for(j=0;j<k;j++)

{if(fabs(D[j])>fabs(maxd))

{maxd=D[j];

indexi=i;

indexj=j;

}}}

 

for(i=0;i<k;i++)

{i1=i;

if(i>indexi)

i1=i-1;

else if(i==indexi)

continue;

for(i=0;i<k;i++)

{j1=j;

if(j>indexj)

j1=j-1;

else if(j==indexj)

continue;

B[i1][j1]=D[j];

}

}

printf("new mass\n");

for(i=0;i<(k-1);i++)

for(j=0;j<(k-1);j++)

{printf("%3.1f",B[j]);

}

printf("\n");

return maxd;

}

 

 

Помоги ближнему и будет тебе счастье =)

[Airsoft theDrot, Styer AUG A2 - 150 ms][bleach team][Hellsing]

 

Породать внутри себя монстра легко, а вот избавится от него в будущем... Лично мне не удалось =)

  • Replies 52
  • Views 5.5k
  • Created
  • Last Reply

Top Posters In This Topic

Posted Images

Featured Replies

В каком смысле подкорректировать? Код работает. Оформлен только криво.

 

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>

float newmass(float D[][10],int k);

void main()
{
clrscr();
float A[10][10],max;
int i,n,j;
do
{
	cout<<"chislo elementov matrici<10=";
	cin>>n;
}
while(n>=10&&n<0);
for(i=0;i<n;i++)
	for(j=0;j<n;j++)
	{
		cout<<"Vvedite element matrici A["<<i<<"]"<<"["<<j<<"]=";
		scanf("%f",&A[i][j]);
	}
for(i=0;i<n;i++)
{
	for(j=0;j<n;j++)

	printf("%3.1f",A[i][j]);

	printf("\n");
}
max=newmass(A,n);

printf("max elemenet po modulu%3.1f",max);
getch();
}

float newmass(float D[][10],int k)
{
int i,j,indexi,indexj;
float B[9][9],maxd=D[0][0];
indexi=0;indexj=0;
int i1,j1;
for(i=0;i<k;i++)
{
	for(j=0;j<k;j++)
	{
		if(fabs(D[i][j])>fabs(maxd))
		{
			maxd=D[i][j];
			indexi=i;
			indexj=j;
		}
	}
}

for(i=0;i<k;i++)
{
	i1=i;
	if(i>indexi)
	i1=i-1;
	else if(i==indexi) continue;
	for(i=0;i<k;i++)
	{
		j1=j;
		if(j>indexj) j1=j-1;
		else if(j==indexj) continue;
		B[i1][j1]=D[i][j];
	}
}

printf("new mass\n");
for(i=0;i<(k-1);i++)
	for(j=0;j<(k-1);j++)
	{
		printf("%3.1f",B[i][j]);
	}
printf("\n");
return maxd;
}

 

А, новую матрицу не рисует похоже. Да и старую кривовато выводит.

Если долго всматриваться в бездну, можно неплохо провести время.

  • Author

Вот это и надо исправить, как исправить, что бы он корректно старую матрицу выводил и новую рисовал.

Только вот как это сделать мне неизвестно.

Edited by Lunatofob (see edit history)

[Airsoft theDrot, Styer AUG A2 - 150 ms][bleach team][Hellsing]

 

Породать внутри себя монстра легко, а вот избавится от него в будущем... Лично мне не удалось =)

Где-то так получилось:

 

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string>
#include <sstream>

template <typename T>
std::string toString(T val)
{
std::ostringstream oss;
oss<< val;
return oss.str();
}

void main()
{
clrscr();
float A[10][10];
int i,n,j;
do
{
	cout<<"chislo elementov matrici<10=";
	cin>>n;
}
while(n>=10&&n<0);
for(i=0;i<n;i++)
	for(j=0;j<n;j++)
	{
		cout<<"Vvedite element matrici A["<<i<<"]"<<"["<<j<<"]=";
		scanf("%f",&A[i][j]);
	}

//Вычисляем самое длинное число в матрице
//чтобы нормально вывело
string s;
int max_len = 0;

cout << endl;
for( i=0; i<n; i++ )
{
	for( j=0; j<n; j++ )
	{
		s = toString(A[i][j]);
		if( s.length() > max_len ) max_len = s.length();
	}
}

//Выводиv. gotoxy нужен для отступов в матрице, используем max_len
for( i=0; i<n; i++ )
{
	for( j=0; j<n; j++ )
	{
		gotoxy(j*(max_len+2),wherey());
		cout << A[i][j] << " ";
	}
	cout << endl;
}

//Получаем значение максимального элемента матрицы.
//Если несколько одинаковых - берём первый попавшийся

float max = 0;
float max_i, max_j;
for( i=0; i<n; i++ )
{
	for( j=0; j<n; j++ )
	{
		if( fabs( A[i][j] ) > max )
		{
			max = A[i][j];
			max_i = i;
			max_j = j;
		}
	}
}
//Нашли максимальный и его позицию.
//Копируем в новую матрицу всё кроме строки и столбца
//с максимумом

float new_matrix[9][9];
int ni,nj;
ni = 0; nj = 0;

for( i=0; i<n; i++ )
{
	nj = 0;
	if( i == max_i ) continue;
	for( j=0; j<n; j++ )
	{
		if( j == max_j ) continue;
		new_matrix[ni][nj] = A[i][j];
		nj++;
	}

	ni++;
}

cout << endl;

for( i=0; i < n-1; i++ )
{
	for( j=0; j < n-1; j++ )
	{
		gotoxy(j*(max_len+2),wherey());
		cout << new_matrix[i][j] << " ";
	}
	cout << endl;
}


printf("max elemenet po modulu%3.1f",max);
getch();
}

 

Хренота сразу под инклюдами нужна, чтобы float в string перегнать. Если препод спрашивать будет - прикидывайся табуреткой и говори "что за типлэйт такой знать не знаю, из инета скачал штоб матрицу красиво отформатировать" -)

Если долго всматриваться в бездну, можно неплохо провести время.

  • Author

Большое тебе спасибо! от меня и МАКСМХ`а =) он на програмиста учиться, я экономист =)))

Еще раз Большое спасибо!

[Airsoft theDrot, Styer AUG A2 - 150 ms][bleach team][Hellsing]

 

Породать внутри себя монстра легко, а вот избавится от него в будущем... Лично мне не удалось =)

#include <string>

#include <sstream>

Борланд который в инсте, не распознает эти библиотеки =( нужно как то без нних

Edited by MAKCMX (see edit history)

во все всем спс вро разобрался по идее так:

#include <math.h>

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

float newmass(float D[][10],int k);

void main()

{clrscr();

float A[10][10],max;

int i,n,j;

do

{cout<<"chislo elementov matrici < 10 = ";

cin>>n;}

while(n>=10 && n<0);

for (i=0;i<n;i++)

for (j=0;j<n;j++)

{cout <<"Vvedite element matrici A["<<i<<"]"<<"["<<j<<"]=";

scanf("%f",&A[j]);}

for (i=0;i<n;i++)

{for(j=0;j<n;j++)

{printf("%3.1f ",A[j]);}

printf("\n");}

max=newmass(A,n);

printf("max element po modulu %3.1f",max);

getch();}

float newmass(float D[][10],int k)

{int i,j,indexi,indexj;

float B[9][9],maxd=D[0][0];

indexi=0;indexj=0;

int i1,j1;

for (i=0;i<k;i++)

{ for(j=0;j<k;j++)

{ if(fabs(D[j])>fabs(maxd))

{ maxd=D[j];

indexi=i;

indexj=j;

}}}

for (i=0;i<k;i++)

{ i1=i;

if (i>indexi)

i1=i-1;

else if(i==indexi)

continue;

for(j=0;j<k;j++)

{j1=j;

if (j>indexj)

j1=j-1;

else if(j==indexj)

continue;

B[i1][j1]=D[j]; }}

printf("new mass \n");

for (i=0;i<(k-1);i++)

{for(j=0;j<(k-1);j++)

{printf("%3.1f ",B[j]);}

printf("\n");}

return maxd;}

Угу, работает. Но в этом случае, если числа разной длины, то матрица разъезжается, плюс идёт округление до десятых, которое непонятно зачем. Если выводить через cout << никакого округления не будет. И какой смысл в выносе сборки нового массива в отдельную функцию?

 

Борланд который в инсте, не распознает эти библиотеки =( нужно как то без нних

Странно ^_^ Они по идее стандартные.

Если долго всматриваться в бездну, можно неплохо провести время.

Странно huh.gif Они по идее стандартные.

Борланд - это же, вроде, старая IDE, нет?

 

Алсо, рад вас видеть.

All the ponies in this town are CRAZY!
да пофиг, главное что работает, а к мелочам надеюсь препод придраться не будет.
#include <conio.h>

Мать моя женщина ... Оно еще живо?

 

Они по идее стандартные.

Возможно, поведение в отношении наличия .h другое, не по стандарту.

[ Last Exile ] [ Моран жив! ] [ Fallout ] [ Админы ] [ Дядьки ] Teams [奇跡を信じて団 ]
Борланд - это же, вроде, старая IDE, нет?

Борланд - это разная IDE. Точнее, это фирма, и она до сих пор жива -) Я тоже этот хреноту сейчас на Борланд Билдере писал, шестом емнип. Есть новее.

Алсо, рад вас видеть.

:lol:

Мать моя женщина ... Оно еще живо?

А что ему сделается? :D

Если долго всматриваться в бездну, можно неплохо провести время.

А что ему сделается?

Да вроде как ДОС-стайл сейчас не в моде... Не менее странно наличие плюсового iostream'а с сишным conio.h

И что уж совсем непонятно - так то, что все это на Билдере, с его формочками.

Edited by niiro dzyaki (see edit history)

[ Last Exile ] [ Моран жив! ] [ Fallout ] [ Админы ] [ Дядьки ] Teams [奇跡を信じて団 ]

Console Wizard - и фпирёд. Учат-то обычно на консоли, с формочками не заморачиваются.

Не менее странно наличие плюсового iostream'а с сишным conio.h

Ну дык С++ жеж включает C со всеми потрохами. Можно пользоваться.

Edited by Shinsaku-To (see edit history)

Если долго всматриваться в бездну, можно неплохо провести время.

Console Wizard - и фпирёд. Учат-то обычно на консоли

Ну так и учили бы нормально, через стримы, что бы логику конвееризации понимать. А conio.h - это уровень интерфейса, а не программной логики. Смысл учить консольному интерфейсу в наше время мне глубоко неясен. Я понимаю еще на *nix'ах, где без иксов машина - нормальное явление, и консольный GUI имеет место быть, но там опять же curses/ncurses.

 

Ну дык С++ жеж включает C со всеми потрохами. Можно пользоваться.

А нужно ли? Вот и получилась неудобоваримая солянка из cout'ов и printf'ов.

[ Last Exile ] [ Моран жив! ] [ Fallout ] [ Админы ] [ Дядьки ] Teams [奇跡を信じて団 ]
Смысл учить консольному интерфейсу в наше время мне глубоко неясен.

Смысл в том, что ему и учить не надо - студент уже его понимает на основе Pascal.

В любом случае, какой-то интерфейс знать надо, а визуальный только отвлекает новичка от собственно программирования.

А нужно ли? Вот и получилась неудобоваримая солянка из cout'ов и printf'ов.

Может и не нужно. Тяга к printf у преподов меня самого всегда удивляла. -)

Кстати, если склероз мне таки не изменяет, то к coniо.h printf отношения не имеет. conio это очень удобный в консоли getch() и, в данном случае, gotoxy(int,int) и wherey(), чтобы по экрану для отрисовки матрицы ездить.

Edited by Shinsaku-To (see edit history)

Если долго всматриваться в бездну, можно неплохо провести время.

Кстати, если склероз мне таки не изменяет, то к coniо.h printf отношения не имеет

printf - это из stdio, что тоже тут нафиг не сдалось. Как и gotoxy (форматировать и cout умеет).

 

 

В любом случае, какой-то интерфейс знать надо, а визуальный только отвлекает новичка от собственно программирования.
студент уже его понимает на основе Pascal.

Это уже как бы не новичок, значит. А кинуть TStringGrid на форму и по Cells циферки распихать особого труда не надо. Зато сразу "красива, как в Экселе", +100 к ЧСВ.

[ Last Exile ] [ Моран жив! ] [ Fallout ] [ Админы ] [ Дядьки ] Teams [奇跡を信じて団 ]
Это уже как бы не новичок, значит.

Как бы обучение - его надо последовательно строить. Когда народ подгребает к С++ - значит, что на очереди ООП. Следовательно, нужно переходить именно к ООП, не отвлекаясь особо на другие темы. Значит - сишный синтаксис переживали, знакомый интерфейс вспомнили - и вперёд на штурм классов и прочего полиморфизма. Далее - для работы с формами и кидания ТСтрингГридов ООП уже понимать надо. Можно, конечно, и без понимания кинуть - но это не есть гуд. Уж коли готовят профессионала, то надо, чтобы он осознавал происходящие процессы.

Отсюда последовательность изучения и вырисовывается.

Если долго всматриваться в бездну, можно неплохо провести время.

Следовательно, нужно переходить именно к ООП, не отвлекаясь особо на другие темы.

Во-во. Т.е. стримы и операторы, а не gotoxy c printf'ами.

 

Значит - сишный синтаксис переживали, знакомый интерфейс вспомнили - и вперёд на штурм классов и прочего полиморфизма.

Ага, в результате в мозгу каша от использования двух парадигм. Один из плюсов Борланда (он же главный минус, такая диалектика) - это то, что ООП можно использовать, не понимая.

 

Уж коли готовят профессионала, то надо, чтобы он осознавал происходящие процессы.

Вообще-то, препода, принимающего подобный код, я бы к подготовке профессионалов и близко не подпускал, во избежание. Для не-математического факультета и студента, кторый хочет сдать и забыть это чертово программирование, это еще прокатит, но на профильном это недопустимо. Т.е. если для топикстартера это допустимо, то MAKCMX стоит задуматься о профпригодности.

[ Last Exile ] [ Моран жив! ] [ Fallout ] [ Админы ] [ Дядьки ] Teams [奇跡を信じて団 ]

В общем, вот, православный код:

 

#include <iostream>
#include <iomanip>
#include <math>

using namespace std;

const int
 CTABLE_WIDTH=10,
 CMATRIX_DIM=10;

int input_matrix(double matrix[][CTABLE_WIDTH], int dim) {
 int x,y;

 for (x=0; x<dim; x++)
for (y=0; y<dim; y++)  {
  cout << "A[" << x << ", " << y <<"]=";
  cin >> matrix[x][y];
 }
 return 0;
}

int draw_matrix(double matrix[][CTABLE_WIDTH], int dim) {
 int x,y;

 for (x=0; x<dim; x++) {
for (y=0; y<dim; y++)
  cout << setw(CTABLE_WIDTH) << matrix[x][y];
cout << endl;
 }
 return 0;
}

int reduce_matrix(double matrix_in[][CTABLE_WIDTH], double matrix_out[][CTABLE_WIDTH], int dim, int &max_x, int &max_y) {
 int x, y, x1, y1;
 double max=0;

 for (x=0; x<dim; x++)
for (y=0; y<dim; y++)  
  if (fabs(matrix_in[x][y])>max) {
	max = fabs(matrix_in[x][y]);
	max_x = x;
	max_y = y;
  }
 
 x1=0;
 for (x=0; x<dim; x++) if (max_x!=x) {
y1=0;
for (y=0; y<dim; y++) if (max_y!=y) {
  matrix_out[x1][y1]=matrix_in[x][y];
  y1++;
}
x1++; 
 }

 return 0;
}

int main () {
 double matrix_in[CTABLE_WIDTH][CTABLE_WIDTH], matrix_out[CTABLE_WIDTH][CTABLE_WIDTH];
 int dim=0, max_x=0, max_y=0;

 cout << "Dim=";
 cin >> dim;
 if ((dim<0) || (dim>CMATRIX_DIM)) {
cerr << "ERROR: dim is out of range";
return 1;
 }
 input_matrix(matrix_in, dim);
 reduce_matrix(matrix_in, matrix_out, dim, max_x, max_y);
 cout << "deleted row: " << max_y << endl;
 cout << "deleted col: " << max_x << endl;
 cout << "result:" << endl;
 draw_matrix(matrix_out, dim-1);

 return 0;
}

[ Last Exile ] [ Моран жив! ] [ Fallout ] [ Админы ] [ Дядьки ] Teams [奇跡を信じて団 ]

niiro dzyaki

православный код:

Какой же он православный? Комментарии де?

All the ponies in this town are CRAZY!
draw_matrix(matrix_out, dim-1);

 

return 0;

}

Кстати, кстати… Если действительно не нужно гасить консоль после вывода шматрицы, можно использовать тот же getch(), только более православный: std::cin.get();

Вроде так, лет пять прошло, могу и наврать. Но насколько я помню, для студентов это было головной болью.

solemn voice, unyielding lips

Может вы тему переименуете в "коды"... а то написано сессия, а у меня глаза разбегаются от кодов... биохимики дальше Вижл Бейсика не залезают по программе)))
 team[/size][/color]

Способность индивидуума достать собеседника -- это способность индивидуума обеспечить неадекватную реакцию собеседника на любые производимые им(индивидуумом) колебания звукового характера, направленные на раздражение звуковых рецепторов собеседника.

В общем, вот, православный код:

Который выполняет мессионерскую деятельность B)

Конечно, лучше писать в хорошем стиле, но не всё сразу. Первым пунктом надо просто научиться решать задачи хоть как-нибудь, вторым - решать их по-разному, а там уже можно обратить внимание на стиль и полировать его хоть до посинения. А MAKCMX, боюсь, от твоего кода впадёт в когнитивный диссонанс. Он ещё и первый пункт (решать хоть как-нибудь), похоже, не освоил =__=

Edited by Shinsaku-To (see edit history)

Если долго всматриваться в бездну, можно неплохо провести время.

Кстати, кстати… Если действительно не нужно гасить консоль после вывода шматрицы, можно использовать тот же getch(), только более православный: std::cin.get();

А шо, в винде IDE всякие вывод разве в отдельном окне не показывают? Только исчезающая консоль, что ли?

 

Какой же он православный? Комментарии де?

Для такой задачи? Хватит кода, "грамотный код - лучший комментарий" © не помню кто

 

Первым пунктом надо просто научиться решать задачи хоть как-нибудь

На чем останавливаются и становятся индусами :)

 

а там уже можно обратить внимание на стиль и полировать его хоть до посинения

Не-не-не, Дэ^W учится всегда проще, чем переучиваться. Так что, раз уж препод - лапоть, то по книженции какой поправославнее самому заниматься, с самого начала стараясь правильно писать. Получатся будет, конечно, по первости не очень, но "опыт, сын ошибок трудных" © И идти по проторенному пути - свой hello word -> свой Notepad -> свой Тетрис -> свой quake -> свой вирус :)

 

P.S. Почему никто косяк в коде не заметил? Я не ту константу при задании размеров массивов не использую... Промахнулся при копипасте, каюсь, сколько раз умные люди говорили - копипаста зло, вон, даже ООП придумали, чтоб реюзать код без копипастирования.

P.P.S. И если уж совсем довести до уровня электролита из соплей девственницы, то элементарные операции с матрицами (поиск наибольшего, удаление строки, удаление столбца) надо вывести из тела reduce_matrix, лучше вообще в другой файл, да и main почистить.

[ Last Exile ] [ Моран жив! ] [ Fallout ] [ Админы ] [ Дядьки ] Teams [奇跡を信じて団 ]
Для такой задачи? Хватит кода, "грамотный код - лучший комментарий" © не помню кто

Плюс стотыщпицот

 

На чем останавливаются и становятся индусами ™

Аааа.. не надо про индусов.. я тут с одним индусом удаленно вынужден работать, убил бы нафик этого йога! :) По отзывам коллег - они в большинстве своем такие, работают на отъ2.71бись, косячат, ленивые до невозможности... и вроде ж не откуда-то там, а из известной корпорации, в Кремниевой, чтоб ее, долине сидит!

 

Так что, раз уж препод - лапоть, то по книженции какой поправославнее самому заниматься, с самого начала стараясь правильно писать. Получатся будет, конечно, по первости не очень, но "опыт, сын ошибок трудных" © И идти по проторенному пути - свой hello word -> свой Notepad -> свой Тетрис -> свой quake -> свой вирус

Так же подписываюсь :)

 

З.Ы. - кому вдруг чего по Java чего помочь, стучитесь) (окромя апплетов - знаю, их еще по универам впаривают, сам сталкивался :lol: надо бы преподам рассказать, что их уже лет N+1 как никто не пишет) :P

Его Святейшества Лорда Инквизитора Ордо Маллеус Аквиана Пресветлого личного тяжёлого ударного авианесущего крейсера класса "Пургатос" "Свет Гнева Его" капитан-пилот.

---------------

WARNING: expression "to_be || !to_be" is always true

---------------

уютненькая жежешечка

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Recently Browsing 0

  • No registered users viewing this page.

Important Information

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.