Перейти к содержанию
Обновление форума
Опубликовано
comment_2221295

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

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

 

 

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

 

Экзаменационный билет №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]

 

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

  • Ответов 52
  • Просмотры 4,5 тыс
  • Создана
  • Последний ответ

Топ авторов темы

Изображения в теме

Рекомендуемые сообщения

Опубликовано
comment_2221315

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

 

#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;
}

 

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

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

Опубликовано
  • Автор
comment_2221329

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

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

Изменено пользователем Lunatofob (смотреть историю редактирования)

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

 

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

Опубликовано
comment_2221344

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

 

#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 перегнать. Если препод спрашивать будет - прикидывайся табуреткой и говори "что за типлэйт такой знать не знаю, из инета скачал штоб матрицу красиво отформатировать" -)

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

Опубликовано
  • Автор
comment_2221361

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

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

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

 

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

Опубликовано
comment_2221404

#include <string>

#include <sstream>

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

Изменено пользователем MAKCMX (смотреть историю редактирования)

Опубликовано
comment_2221411

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

#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;}

Опубликовано
comment_2221423

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

 

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

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

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

Опубликовано
comment_2221717
#include <conio.h>

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

 

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

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

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

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

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

:lol:

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

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

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

Опубликовано
comment_2221780
А что ему сделается?

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

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

Изменено пользователем niiro dzyaki (смотреть историю редактирования)

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

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

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

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

Изменено пользователем Shinsaku-To (смотреть историю редактирования)

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

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

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

 

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

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

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

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

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

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

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

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

Изменено пользователем Shinsaku-To (смотреть историю редактирования)

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

Опубликовано
comment_2221818
Кстати, если склероз мне таки не изменяет, то к coniо.h printf отношения не имеет

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

 

 

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

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

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

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

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

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

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

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

 

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

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

 

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

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

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

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

 

#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 [奇跡を信じて団 ]
Опубликовано
comment_2221922
draw_matrix(matrix_out, dim-1);

 

return 0;

}

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

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

solemn voice, unyielding lips

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

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

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

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

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

Изменено пользователем Shinsaku-To (смотреть историю редактирования)

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

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

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

 

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

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

 

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

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

 

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

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

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

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

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

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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

Последние посетители 0

  • Ни одного зарегистрированного пользователя не просматривает данную страницу

Важная информация

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

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.