Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2009, 23:17   #1
_grusha_
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 21
По умолчанию помогите исправить код в задаче

Здравствуйте.
Есть задачка: В матрице расположить строки по возрастанию( или убыванию, не столь важно) сумм их элементов. Задачка с динамическими массивами, и количество элеметов в строках НЕ ОБЯЗТЕЛЬНО одинаково.
В конце вывести счетчик какая строка поменяла свое место.

Попыхтел над кодом.. вышло вот что( :


Код:
#include "stdafx.h"
#include<stdio.h>
#include<conio.h>
#include<iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[]);
void main()
{
int i,j,n,m,k,l,min,imin,sum,x,c[100],b[100],y,vrem,op,po,pp;
char **a;
int z[100];
cout<<"vvedite kl strok = ";
cin>>m;
a = new char*[m];
for(i=0;i<m;i++)
{
cout<<endl<<i<<" dlinna = ";
cin>>n;
a[i] = new char[n];
z[i] = n;
}

printf("\n vvedite matricy:\n");
for(i=0;i<m;i++)
  for(j=0;j<z[i];j++)
    scanf(" %d",&a[i][j]);
printf("\n");
sum=0;
for(i=0;i<m;i++)
  {
	  for(j=0;j<z[i];j++)
      sum=sum+a[i][j];
    a[i][z[i]]=sum;
    sum=0;
  }
printf("\n\n");
for(i=0;i<m;i++)
 { printf("\n");
  for(j=0;j<z[i]+1;j++)
    printf(" %d",a[i][j]);
 }

printf("\n\n");
for (x=0; x<m; x++)
{
c[x]=a[x][z[x]];
}
for (y=0; y<m; y++)
{
if (c[y]<c[y+1])
{ 
	vrem=c[y];
	c[y]=c[y+1];
	c[y+1]=vrem;
}
}
for (i=0; i<m; i++)
cout<<c[i];
cout<<endl;
for (op=0; op<m; op++)
{
for (po=0; po<m;po++)
{
if (c[op]==a[po][z[po]])
{
	cout<<endl;
for (pp=0;pp<z[op];pp++)
{
	printf(" %d",a[po][pp]);;
 
}
}
}
}
Почему то работает через раз.. И никак не могу придумать как поставить счетчик...
Помогите, пожалуйста...

Ps. Начало задачи было взято вот отсюда http://programmersforum.ru/showthread.php?t=43560.

Код корявый, знаю...Поэтому обращаюсь к вам за помощью

Последний раз редактировалось _grusha_; 07.05.2009 в 23:49.
_grusha_ вне форума Ответить с цитированием
Старый 08.05.2009, 14:03   #2
_grusha_
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 21
По умолчанию

хоть подскажите что и как...
_grusha_ вне форума Ответить с цитированием
Старый 08.05.2009, 14:12   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
и количество элеметов в строках НЕ ОБЯЗТЕЛЬНО одинаково.
Что сие значит?
Цитата:
Сообщение от Википедия
Ма́трица — математический объект, записываемый в виде прямоугольной таблицы чисел
То есть количество элементов в строках должно быть одинаково. Иначе это уже не матрица.

Принцип такой:
проходите по матрице и записывайте в N-й столбец сумму соответствующей строки.
Потом просто сортируете по этому столбцу.
Цитата:
В конце вывести счетчик какая строка поменяла свое место.
Не совсем понял что за "счетчик" и как он должен выглядеть.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.05.2009, 14:21   #4
_grusha_
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 21
По умолчанию

НУ, значит это не совсем матрица, а просто строки...

"Счетчик" может даже и не счетчик... не знаю как назвать..
Просто после пограммы нужно показать какие строки поменяли свои места.

Принцип то ясен, пытался написать.. вверху код - то, что получилось...

Проблема с сортировкой и выводом.
_grusha_ вне форума Ответить с цитированием
Старый 08.05.2009, 14:31   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от _grusha_
НУ, значит это не совсем матрица, а просто строки...
В условии написано:
Цитата:
В матрице расположить строки
Значит, все-таки матрица? Или это условие в вашем вольном изложении?
Все-таки одно дело менять строки матрицы, а другое - динамического массива строк разной длины.

Скажите точно. Тут два разных подхода. Если это матрица, то оставшиеся (не ввденные) элементы заполняются нулями. Тогда все просто.
Если это массив строк, то нужно будет по новой выделять память для обменивающихся строк. Тогда перед этим нужно пройтись по строкам и составить массив из их длин. Отсортировать его и потом на этой основе делать все остальное.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.05.2009, 14:34   #6
_grusha_
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 21
По умолчанию

Изначально это было задание с матрицой и без динамический массивов.
Потом попросили написать тоже но с динамическими массивами и разным кол-вом элементов в строке... Получается что это уже не матрица, а массив строк.
_grusha_ вне форума Ответить с цитированием
Старый 08.05.2009, 15:06   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdio.h>
using namespace std;

int main()
{
int **mas;
int M,*raz,*sum,*por,**tmpmas;
int i,j,k,tmp;

cout<<"Vvedite kolichestvo strok: ";
cin>>M;
mas = new int*[M];
raz = new int[M];
por = new int[M];
sum = new int[M];

for(i=0; i<M; i++)
 {
  cout<<"Vvedite kolichestvo elementov v stroke "<<i<<": ";
  cin>>raz[i];
  mas[i] = new int[raz[i]];
  por[i] = i;
  sum[i] = 0;
  for(j=0; j<raz[i]; j++)
   {
    cout<<"Vvedite element mas["<<i<<"]["<<j<<"]: ";
    cin>>mas[i][j];
    sum[i] += mas[i][j];
   }
 }
//-----------
// выводим
cout<<"-------------------------\n\n";
for(i=0; i<M; i++)
 {
  for(j=0; j<raz[por[i]]; j++)
   {
    cout.width(4);
    cout<<mas[i][j];
   }
   cout<<endl;
 }
cout<<endl<<endl;

// сортируем массив сумм и порядков
for(i=0; i<M-1; i++)
 {
  k = i;
  for(j=i+1; j<M; j++)
   if(sum[j]<sum[k]) k = j;
  tmp = por[i];
  por[i] = por[k];
  por[k] = tmp;
  tmp = sum[i];
  sum[i] = sum[k];
  sum[k] = tmp;
 }
//--------
tmpmas = mas;
mas = NULL;
mas = new int*[M];
for(i=0; i<M; i++)
 {
  mas[i] = new int[raz[por[i]]];
  for(j=0; j<raz[por[i]]; j++)
   mas[i][j] = tmpmas[por[i]][j];
 }
for(i=0; i<M; i++)
 delete[] tmpmas[i];
delete[] tmpmas;

//------------
for(i=0; i<M; i++)
 {
  for(j=0; j<raz[por[i]]; j++)
   {
    cout.width(4);
    cout<<mas[i][j];
   }
  cout<<endl;
 }
//-----------
cout<<"Konechnyj poryadok: "<<endl;
for(i=0; i<M; i++)
 cout<<por[i]<<" ";

delete[] sum;
delete[] raz;
delete[] por;
for(i=0; i<M; i++)
 delete[] mas[i];
delete[] mas;

getch();
return 0;
}
Пример ввода:
Код:
Vvedite kolichestvo strok: 5
Vvedite kolichestvo elementov v stroke 0: 3
Vvedite element mas[0][0]: 1
Vvedite element mas[0][1]: 2
Vvedite element mas[0][2]: 3
Vvedite kolichestvo elementov v stroke 1: 4
Vvedite element mas[1][0]: 3
Vvedite element mas[1][1]: 5
Vvedite element mas[1][2]: 6
Vvedite element mas[1][3]: 7
Vvedite kolichestvo elementov v stroke 2: 2
Vvedite element mas[2][0]: 1
Vvedite element mas[2][1]: 2
Vvedite kolichestvo elementov v stroke 3: 3
Vvedite element mas[3][0]: 1
Vvedite element mas[3][1]: 4
Vvedite element mas[3][2]: 7
Vvedite kolichestvo elementov v stroke 4: 3
Vvedite element mas[4][0]: 1
Vvedite element mas[4][1]: 3
Vvedite element mas[4][2]: 4
-------------------------

   1   2   3
   3   5   6   7
   1   2
   1   4   7
   1   3   4


   1   2
   1   2   3
   1   3   4
   1   4   7
   3   5   6   7
Konechnyj poryadok:
2 0 4 3 1
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.05.2009, 19:21   #8
_grusha_
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 21
По умолчанию

спасибо большое)
Но нужен не конечный порядок, а номера строк, которые поменяли свои места.

Последний раз редактировалось _grusha_; 08.05.2009 в 19:26.
_grusha_ вне форума Ответить с цитированием
Старый 09.05.2009, 11:53   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Но нужен не конечный порядок, а номера строк, которые поменяли свои места.
Ну тогда просто пройдите по массиву por. Если por[i] != i, то элемент por[i] сменил свое место.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.05.2009, 21:51   #10
_grusha_
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 21
По умолчанию

:cry:

Уважаемый Sazary, понимаю, что это элементарщина... Но моск отказывается понять как сделать вывод этого элемента...
Помогите пожалуйста, эту задачу сдам и прощай С++...
_grusha_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить ошибку в задаче! Игорь777 Помощь студентам 4 26.04.2009 18:31
помогите исправить ошибки в задаче на С++ Wia Помощь студентам 4 14.12.2008 16:09
Помогите исправить ошибку в задаче Vladislav_87 Паскаль, Turbo Pascal, PascalABC.NET 4 04.07.2008 12:27
Помогите дописать и исправить ошибку в задаче Vladislav_87 Паскаль, Turbo Pascal, PascalABC.NET 5 30.05.2008 00:14
Помогите исправить ошибку в задаче VANOLORD Паскаль, Turbo Pascal, PascalABC.NET 9 19.05.2008 22:16