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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2009, 20:10   #1
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
Подмигивание Помогите доделать простую прогу на С++

1).Есть программа, она с помощью меню может сформировать рандомный массив с n елементов, вывести его, а также может удалить с массива елемент который вы укажете... Когда пользователь удалил елемент в первый раз то результат отображается нормально а когда пользователь захочет опять удалить какойто елемент то результат будет не правильным.... а именно... в конце будет появлятся ноль (((. Помогите решить проблему
Вот сама прога:
Код:
#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

int print_mas(int n, int* mas)
{
for(int i=0;i<n;i++) cout<<mas[i]<<" ";
cout << endl;
}
//========================
int del_mas(int n, int* mas)
{
int p;
    cout << "Enter number of element:";
    cin >> p;
p--;
for(;p<n;p++) mas[p]=mas[p+1];

cout << "Result:";
for(int i=0;i<n-1;i++)
  {
   cout<<mas[i]<<" ";
  }
cout<< endl;
}

int *form_mas(int n)
{
 int *mas = new int[100];
 for(int i=0;i<n;i++) mas[i]=rand()%100-50;
 return mas;
}
//================
int main()
{
    int n;
	cout<<"N:";cin>>n;

int *mas;
srand(time(NULL));
int k;
	do
{
cout<<"1. Form mas\n";    
cout<<"2. Print mas\n";
cout<<"3. Del Mas\n";
cout<<"0. Exit\n";
cin>>k;
switch (k)
  {   
   case 1: mas = form_mas(n); break;
   case 2: print_mas(n,mas); break;
   case 3: del_mas(n,mas);break;
  }
}
while (k!=0);

    system("Pause");
	return 0;
}
2). В этой задаче также похожая проблема...

1 Проблема: Программа формирует матрицу с помощью одного елемента(n) а нужно чтобы пользователь указывал размер строки и столбцов.
2 Проблема: Также эта прога может прибавлять к матрице одну строку с рандомных елементов после каждой четной строки матрицы которая уже создалась... Проблема в том что когда пользователь выберет в меню "Add to Mas" во ВТОРОЙ раз то программа уже не сможет сделать то что должна(опять же прибавлять к матрице одну строку с рандомных елементов после каждой четной строки матрицы которая уже создалась)
Вот сама прога:
Код:
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <conio.h>
using namespace std;

int** matr_create(int n)
{
 int **M = new int*[n];
 int i,j;
 for(i=0;i<n;i++)
  {
   M[i] = new int[n];
   for(j=0;j<n;j++)
    M[i][j] = rand()%100;
  }
 return M;
}
//------------
void matr_print(int m, int n, int **M)
{
 int i,j;
 cout<<endl;
 for(i=0;i<m;i++)
  {
   for(j=0;j<n;j++)
    {
     cout.width(4);
     cout<<M[i][j];
    }
   cout<<endl;
  }
 cout<<endl;
}
//---------------
int **matr_new(int n, int **M, int &nr)
{
 int i,j,k,**tmp,l;
 nr = n + (int)(n/2);
 tmp = new int*[nr];
 for(i=0;i<nr;i++)
  tmp[i] = new int[n];

 for(k=0,i=0,l=0;i<nr;i++)
  {
   if(k==2)
    {
     k=-1;
     for(j=0;j<n;j++)
      tmp[i][j] = rand()%100;
    }
   else
    {
     for(j=0;j<n;j++)
      tmp[i][j] = M[l][j];
     l++;
    }
    k++;
  }
for(i=0;i<n;i++)
 delete[] M[i];
delete[] M;
return tmp;
}
//================
int main()
{
 int N,newr;
 int **matr;
 srand(time(NULL));
 cout<<"Enter N: ";
 cin>>N;

int k;
	do
{
cout<<"1. Form Mas\n";    
cout<<"2. Print Mas\n";
cout<<"3. Add to Mas\n";
cout<<"4. Print new Mas\n";
cout<<"0. Exit\n";
cin>>k;
switch (k)
  {   
   case 1: matr = matr_create(N); break;
   case 2: matr_print(N,N,matr); break;
   case 3: matr = matr_new(N,matr,newr);break;
   case 4: matr_print(newr,N,matr);break;
  }
}
while (k!=0);


 for(int i=0;i<newr;i++)
  delete[] matr[i];
 delete[] matr;
 system("Pause");
	return 0;
}
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 22.04.2009, 20:22   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Olya90, ну так вы бы написали об этом в предыдущей теме..

Самое простое решение - подправить функцию:
Код:
int del_mas(int &n, int* mas)
{
int p;
    cout << "Enter number of element:";
    cin >> p;
p--;
for(;p<n;p++) mas[p]=mas[p+1];

cout << "Result:";
n--;
for(int i=0;i<n;i++)
  {
   cout<<mas[i]<<" ";
  }
cout<< endl;
}
Ну а вторая так:
Код:
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <conio.h>
using namespace std;

int** matr_create(int m, int n)
{
 int **M = new int*[m];
 int i,j;
 for(i=0;i<m;i++)
  {
   M[i] = new int[n];
   for(j=0;j<n;j++)
    M[i][j] = rand()%100;
  }
 return M;
}
//------------
void matr_print(int m, int n, int **M)
{
 int i,j;
 cout<<endl;
 for(i=0;i<m;i++)
  {
   for(j=0;j<n;j++)
    {
     cout.width(4);
     cout<<M[i][j];
    }
   cout<<endl;
  }
 cout<<endl;
}
//---------------
int **matr_new(int &m, int n, int **M)
{
 int i,j,k,**tmp,l,nr;
 nr = m + (int)(m/2);
 tmp = new int*[nr];
 for(i=0;i<nr;i++)
  tmp[i] = new int[n];

 for(k=0,i=0,l=0;i<nr;i++)
  {
   if(k==2)
    {
     k=-1;
     for(j=0;j<n;j++)
      tmp[i][j] = rand()%100;
    }
   else
    {
     for(j=0;j<n;j++)
      tmp[i][j] = M[l][j];
     l++;
    }
    k++;
  }
for(i=0;i<m;i++)
 delete[] M[i];
delete[] M;
m = nr;
return tmp;
}
//================
int main()
{
 int M,N,newr;
 int **matr;
 srand(time(NULL));
 cout<<"Enter M: ";
 cin>>M;
 cout<<"Enter N: ";
 cin>>N;

int k;
	do
{
cout<<"1. Form Mas\n";
cout<<"2. Print Mas\n";
cout<<"3. Add to Mas\n";
cout<<"4. Print new Mas\n";
cout<<"0. Exit\n";
cin>>k;
switch (k)
  {
   case 1: matr = matr_create(M,N); break;
   case 2: matr_print(M,N,matr); break;
   case 3: matr = matr_new(M,N,matr);break;
   case 4: matr_print(M,N,matr);break;
  }
}
while (k!=0);


 for(int i=0;i<M;i++)
  delete[] matr[i];
 delete[] matr;
 system("Pause");
	return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.04.2009, 21:09   #3
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

О класс !!)) Спасибо
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите доделать прогу на с++ Olya90 Помощь студентам 8 21.04.2009 00:14
Помогите доделать прогу LaMeRvDelphi Мультимедиа в Delphi 0 20.04.2009 20:38
Помогите доделать простую прогу на с++ Olya90 Помощь студентам 2 20.04.2009 18:33
Помогите доделать прогу Deis Паскаль, Turbo Pascal, PascalABC.NET 3 19.01.2009 22:24
Помогите написть простую прогу подсчета статистики слов, символов в тексте.. amigo90 Паскаль, Turbo Pascal, PascalABC.NET 14 07.11.2008 18:34