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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2009, 17:14   #1
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
Смех Помогите переделать прогу (С++)

Задача: Вводим n(количество создаваемых нами строк), вводим строки ручками, потом нужно чтобы после каждой четной строки программа вставляла одну строку(естественно заполняем ее ручками). Потом выводим уже измененный массив.
У меня есть похожая реализации задачи(спасибо Sazary ) но там динамический массив не строк а матрицы:
Код:
#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;
}
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 25.04.2009, 17:25   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ну так, вроде. Проверьте:
Код:
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <conio.h>
using namespace std;

string* matr_create(int m)
{
 string *M = new string[m];
 int i,j;
 for(i=0;i<m;i++)
  {
   cout<<"Enter string "<<i<<": "<<endl;
   getline(cin,M[i],'\n');
  }
 return M;
}
//------------
void matr_print(int m, string *M)
{
 int i;
 cout<<endl;
 for(i=0;i<m;i++)
  cout<<M[i]<<endl;
}
//---------------
string *matr_new(int &m, string *M)
{
 int i,j,k,l,nr;
 string *tmp;
 nr = m + (int)(m/2);
 tmp = new string[nr];

 for(k=0,i=0,l=0;i<nr;i++)
  {
   if(k==2)
    {
     k=-1;
     cout<<"Enter string: \n";
     getline(cin,tmp[i],'\n');
    }
   else
    {
     tmp[i] = M[l];
     l++;
    }
    k++;
  }
delete[] M;
m = nr;
return tmp;
}
//================
int main()
{
 int M,newr;
 string *matr;
 cout<<"Enter M: ";
 cin>>M;

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); break;
   case 2: matr_print(M,matr); break;
   case 3: matr = matr_new(M,matr);break;
   case 4: matr_print(M,matr);break;
  }
}
while (k!=0);


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

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

где то ошибка (( смотрите...
Изображения
Тип файла: jpg capture_04252009_162919.jpg (13.8 Кб, 123 просмотров)
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 25.04.2009, 17:40   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

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

string* matr_create(int m)
{
 string *M = new string[m];
 int i,j;
 getline(cin,M[0]);  // временное решение проблемы
 for(i=0;i<m;i++)
  {
   cout<<"Enter string "<<i<<": "<<endl;
   getline(cin,M[i],'\n');
  }
 return M;
}
//------------
void matr_print(int m, string *M)
{
 int i;
 cout<<endl;
 for(i=0;i<m;i++)
  cout<<M[i]<<endl;
}
//---------------
string *matr_new(int &m, string *M)
{
 int i,j,k,l,nr;
 string *tmp;
 nr = m + (int)(m/2);
 tmp = new string[nr];
 for(k=0,i=0,l=0;i<nr;i++)
  {
   if(k==2)
    {
     k=-1;
     cout<<"Enter string: \n";
     getline(cin,tmp[i],'\n');
    }
   else
    {
     tmp[i] = M[l];
     l++;
    }
    k++;
  }
delete[] M;
m = nr;
return tmp;
}
//================
int main()
{
 int M,newr;
 string *matr;
 cout<<"Enter M: ";
 cin>>M;

int k;
	do
{
cout<<"-------------\n";
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";
k = getch();
switch (k)
  {
   case '1': matr = matr_create(M); break;
   case '2': matr_print(M,matr); break;
   case '3': matr = matr_new(M,matr);break;
   case '4': matr_print(M,matr);break;
  }
}
while (k!='0');


 delete[] matr;
	return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

И на этом спасибо))
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 25.04.2009, 18:12   #6
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Код:
 for(i=0;i<m;i++)
  {
   cout<<"Enter string "<<i<<": "<<endl;
   getline(cin,M[i],'\n');
  }
переделайте так
Код:
for(i=0;i<m;i++)
	{
		cout<<"Enter string "<<i<<": ";
		_flushall(); getline(cin,M[i]);
	}
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 25.04.2009, 18:16   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Код:
for(i=0;i<m;i++)
	{
		cout<<"Enter string "<<i<<": ";
		_flushall(); getline(cin,M[i]);
	}
Проверил - достаточно вызвать его один раз перед циклом.

ISergeyN не подскажете, почему возникает такая проблема? Откуда в буфере символ перевода строки (я ведь правильно понял причину?)?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 25.04.2009, 18:20   #8
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Вот эта тайна к сожалению мне не извесна.
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 25.04.2009, 18:53   #9
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

а что делает _flushall() ??
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 25.04.2009, 18:57   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
а что делает _flushall() ??
В двух словах - сбрасывает буферы ввода и вывода.
Цитата:
Функция flushall сбрасывает все буфера, связанные с открытыми входными потоками, и записывает в соответствующие файлы все буфера, относящиеся к открытым выходным потокам. Любые операции чтения, следующие за функцией flushall будут читать новые данные для входных файлов в буферы.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите переделать прогу из Паскаля в Делфи! Toxass Общие вопросы Delphi 28 27.09.2009 15:36
переделать прогу daur3n Помощь студентам 2 10.03.2009 13:34
помогите переделать прогу +Hitman+ Паскаль, Turbo Pascal, PascalABC.NET 4 17.11.2008 23:26
Немогу переделать(переписать) прогу!!!! metamfetamin Помощь студентам 0 25.11.2007 14:27