Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> статический ----> динамический . Помогите 
V
    Опции темы
nexUS1
Дата 29.12.2009, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



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

Код

#include <iostream> 
#include <windows.h> 
#include <fstream> 
#include <cstdlib> 
#include <cstring> 
using namespace std; 
// Определение структуры 
struct sotrudnik 
{// определение полей 
    // фамилия 
    char ns[40]; 
    // должность 
    char nz[40]; 
    // год рождения 
    double ob; 
    // заработанная плата 
    char avt[30]; 
}; 
// Главная функция 
void main() 
{// Объявление массивов объектов структуры 
    sotrudnik d[3]; 
    sotrudnik dt[4]; 
 // Объявление потока записи информации в файл 
    ofstream f; 
 // Объявление необходимых строк 
    char str0[30], str1[80], str2[80], str3[80], str4[80], str5[80], s[80], str[80]; 
     
    CharToOemA("Введите путь к файлу \n",str); 
    cout<<str; 
    cin>>s; 
 // связывание потока записи с файлом 
    f.open(s); 
 // проверка успешности открытия файла 
    if(f.fail())   {cout<<"\n oshibka otkritiya faila"; 
                    exit(1); 
                   } 

CharToOemA(" Введите информацию о сотруднике ",str1); 
    CharToOemA("\n фамилия: ",str2); 
    CharToOemA("\n год рождения : ",str3); 
    CharToOemA("\n должность: ",str4); 
    CharToOemA("\n заработанная плата: ",str5); 
    CharToOemA("-й сотрудник ",str0); 
int i;     
    for(i=0;i<3;i++) 
      {cout<<"\n"<<i+1; 
       cout<<str0; 
       cout<<str1; 
       cout<<str2; 
       cin>>d[i].ns; 
       cout<<str3; 
       cin>>d[i].ob; 
       cout<<str4; 
       cin>>d[i].nz; 
       cout<<str5; 
       cin>>d[i].avt; 
       cout<<"\n \n"; 
      } 
CharToOemA(" Введенная информация о сотрудниках ",str1); 
f<<str1; 
    for(i=0;i<3;i++) 
      {f<<"\n"<<i+1; 
       f<<str0; 
       f<<str2; 
       f<<d[i].ns; 
       f<<str3; 
       f<<d[i].ob; 
       f<<str4; 
       f<<d[i].nz; 
       f<<str5; 
       f<<d[i].avt; 
       f<<"\n \n"; 
      } 
// Удаление элемента из массива по названию 
       char p1[40], *p2[40],*p3[40];   
       CharToOemA("\n Ввести фамилию удаляемого сотрудника: ",str); 
       cout<<str; 
       cin>>p1; 
       for(i=0;i<3;i++) 
       {*p2=d[i].ns; 
       *p3=p1; 
       int t; 
         t=strcmp(*p3,*p2); 
       if(t==0)  
       {d[i]=d[i+1];  
       CharToOemA("\nУдаляем  ",str); 
       CharToOemA("  сотрудник  \n",str1); 
       cout<<str<<i+1<<str1;} 
       else {CharToOemA("-й не указанный сотрудник \n",str); 
       cout<<i+1<<str;       } 
      } 

CharToOemA("\n Список после удаления выбранного элемента \n",str); 
    f<<str; 
    for(i=0;i<2;i++) 
      {f<<"\n"<<i+1; 
       f<<str0; 
       f<<str2; 
       f<<d[i].ns; 
       f<<str3; 
       f<<d[i].ob; 
       f<<str4; 
       f<<d[i].nz; 
       f<<str5; 
       f<<d[i].avt; 
       f<<"\n \n"; 
      } 

cout<<"\n\n"; 
int k; 
// Добавление новых элементов в список 
    CharToOemA("\n Добавление новых элементов \n",str); 
    cout<<str; 
    CharToOemA("\n Ввести количество элементов: ",str); 
    cout<<str; 
    cin>>k; 
    for(i=0;i<2;i++) 
      {dt[i]=d[i]; 
      } 
    for(i=2;i<2+k;i++) 
      {cout<<"\n"<<i+1; 
       cout<<str1; 
       cout<<str2; 
       cin>>dt[i].ns; 
       cout<<str3; 
       cin>>dt[i].ob; 
       cout<<str4; 
       cin>>dt[i].nz; 
       cout<<str5; 
       cin>>dt[i].avt; 
       cout<<"\n \n"; 
      } 

 CharToOemA("\n Список после добавления новых элементов \n",str); 
    f<<str; 
    for(i=0;i<2+k;i++) 
      {f<<"\n"<<i+1; 
       f<<str0; 
       f<<str2; 
       f<<dt[i].ns; 
       f<<str3; 
       f<<dt[i].ob; 
       f<<str4; 
       f<<dt[i].nz; 
       f<<str5; 
       f<<dt[i].avt; 
       f<<"\n \n"; 
      } 
// Закрытие файла 
    f.close(); 
    cout<<endl; 
} 

PM MAIL   Вверх
Luyan
Дата 29.12.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 3.12.2008

Репутация: 2
Всего: 7



Цитата(nexUS1 @  29.12.2009,  19:43 Найти цитируемый пост)
Есть программа, нужно статический массив заменить на динамический. Как будет выглядеть?

один? какой из двух?
Код

void main() 
{// Объявление массивов объектов структуры 
    sotrudnik* d = new sotrudnik [3]; 
    sotrudnik* dt = new sotrudnik [4]; 
     //..
    // Закрытие файла 
    f.close(); 
    cout<<endl;
    delete [] d;
    delete [] dt;
}

PM   Вверх
nexUS1
Дата 29.12.2009, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



Может я не правильно выразился, но надо чтобы было
char * .................
.....
выделение места




Т.е. заменить статическую функцию на динамическую
PM MAIL   Вверх
Luyan
Дата 29.12.2009, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 3.12.2008

Репутация: 2
Всего: 7



Цитата(nexUS1 @  29.12.2009,  19:56 Найти цитируемый пост)
Может я не правильно выразился, но надо чтобы было
char * .................
.....
выделение места

строку назовите.


Цитата(nexUS1 @  29.12.2009,  19:56 Найти цитируемый пост)
Т.е. заменить статическую функцию на динамическую 

вы уверены в слове "функцию"?
PM   Вверх
nexUS1
Дата 29.12.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



Цитата(nexUS1 @  29.12.2009,  19:43 Найти цитируемый пост)
Есть программа, нужно статический массив заменить на динамический. Как будет выглядеть?

один? какой из двух?
Код

void main() 
{// Объявление массивов объектов структуры 
    sotrudnik* d = new sotrudnik [3]; 
    sotrudnik* dt = new sotrudnik [4]; 
     //..
    // Закрытие файла 
    f.close(); 
    cout<<endl;
    delete [] d;
    delete [] dt;
}



sotrudnik d[3];


вот пример, но у меня программа подруга построена

Код

#include <windows.h>
#include <iostream>
#include <string.h>
using namespace std;
//************ объявление структуры ************ 
struct ORDER
{
    char PLAT[10];
    char POL[10];
    double SUMMA;
};
//************ функция для ввода ************
ORDER* vvod(int n)
{
    char s[50],s1[50],s2[50],s3[50],s4[50];
    CharToOemA("\n Введите информацию о элементе №",s);
    CharToOemA("\n Введите расчетный счёт плательщика:",s1);
    CharToOemA(" Введите расчетный счёт получателя:",s2);
    CharToOemA(" Введите перечисляемую сумму в рублях:",s3);
    CharToOemA("\n !!!НЕ ХВАТАЕТ ОПЕРАТИВНОЙ ПАМЯТИ!!!",s4);
    ORDER* t;
    t=new ORDER [n];
    if(t==NULL)
        {
            cout<<s4;
            exit(1);
        }
    for(int i=0;i<n;i++)
        {
            cout<<s<<i+1;
            cout<<s1;
            cin>>t[i].PLAT;
            cout<<s2;
            cin>>t[i].POL;
            cout<<s3;
            cin>>t[i].SUMMA;
        }
    return t;
}
//************ функция для вывода ************
void vivod(ORDER* t,int n)
{
    char s[50],s1[50],s2[50],s3[50];
    CharToOemA("\n       Информацию о элементе №",s);
    CharToOemA("\n Расчетный счёт плательщика:",s1);
    CharToOemA("\n Расчетный счёт получателя:",s2);
    CharToOemA("\n Перечисляемая сумму в рублях:",s3);
    for(int i=0;i<n;i++)
        {
            cout<<s<<i+1;
            cout<<s1<<t[i].PLAT;
            cout<<s2<<t[i].POL;
            cout<<s3<<t[i].SUMMA<<endl;
        }
}




//************ функция для сортировки ************
void sort(ORDER* t,int n)
{
    ORDER temp;
    for(int i=0;i<n-1;i++)
        {
            for(int j=i+1;j<n;j++)
                if(strcmp(t[i].PLAT,t[j].PLAT)>0)
                    {
                        temp=t[i];
                        t[i]=t[j];
                        t[j]=temp;
                    }
        }
}
//************ функция для вывода запрашиваемого элемента ************
void OutPut(ORDER* t,int n)
{
    ORDER temp;
    char s[100],s1[100],s2[100];
    CharToOemA("\n Введите расчетный счёт плательщика для поиска и вывода суммы,снятой со счёта: \n",s);
    CharToOemA("\n Сумма снятая с расчётного счёта плательщика :",s1);
    CharToOemA("\n !!!Поиск результатов не дал.Повторите попыку!!! \n",s2);
    for(int i=0;i<n;i--)
    {
        cout<<s;
        cin>>temp.PLAT;
        int j,k=0;
        for(j=0;j<n;j++)
            if(stricmp(temp.PLAT,t[j].PLAT)==0)
                {
                    cout<<s1<<t[j].SUMMA;
                    break;
                }
            else 
                k++;
            if(k==n)
                cout<<s2;
    }
}
//*******************************************
//************* ГЛАВНАЯ ФУНКЦИЯ *************
//*******************************************
void main()
{
    //объявление  переменных 
    char s[50],s1[50];
    int n;
    CharToOemA("\n Введите количество записей",s);
    CharToOemA("\n Отсортированные элементы: \n",s1);
    cout<<s;
    cin>>n;
    ORDER* ob;
    ob=vvod(n);
    vivod(ob,n);
    sort(ob,n);
    cout<<s1;
    vivod(ob,n);
    OutPut(ob,n);
}


PM MAIL   Вверх
bsa
Дата 29.12.2009, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



nexUS1, чтобы не городить огород с CharToOemA, достаточно просто использовать setlocale(LC_ALL, ""); в начале программы - после этого русские буквы будут отображать корректно.
А остальное тебе уже Luyan показал как сделать.
PM   Вверх
nexUS1
Дата 29.12.2009, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



а выделение памяти?
PM MAIL   Вверх
Luyan
Дата 29.12.2009, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 3.12.2008

Репутация: 2
Всего: 7



Цитата(nexUS1 @  29.12.2009,  22:28 Найти цитируемый пост)
а выделение памяти? 

а в первом посте я что сделал?
может так понятнее будет:
Код

int n = 3;
sotrudnik* d = new sotrudnik [n]; // выделяю память
//можно и так:
// sotrudnik* d;
// d = new sotrudnik [n];
delete [] d; // освобождаю выделенную память

nexUS1, что не понятно?
PM   Вверх
nexUS1
Дата 29.12.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



а куда это вставить?
PM MAIL   Вверх
Luyan
Дата 29.12.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 3.12.2008

Репутация: 2
Всего: 7



Цитата(nexUS1 @  29.12.2009,  22:53 Найти цитируемый пост)
а куда это вставить? 

Код

#include <iostream> 
#include <windows.h> 
#include <fstream> 
#include <cstdlib> 
#include <cstring> 
using namespace std; 
// Определение структуры 
struct sotrudnik 
{// определение полей 
    // фамилия 
    char ns[40]; 
    // должность 
    char nz[40]; 
    // год рождения 
    double ob; 
    // заработанная плата 
    char avt[30]; 
}; 
// Главная функция 
void main() 
{// Объявление массивов объектов структуры
    int n = 3;
    sotrudnik* d = new sotrudnik [n]; 
    sotrudnik dt[4]; 
 // Объявление потока записи информации в файл 
    ofstream f; 
 // Объявление необходимых строк 
    char str0[30], str1[80], str2[80], str3[80], str4[80], str5[80], s[80], str[80]; 
     
    CharToOemA("Введите путь к файлу \n",str); 
    cout<<str; 
    cin>>s; 
 // связывание потока записи с файлом 
    f.open(s); 
 // проверка успешности открытия файла 
    if(f.fail())   {cout<<"\n oshibka otkritiya faila"; 
                    exit(1); 
                   } 
CharToOemA(" Введите информацию о сотруднике ",str1); 
    CharToOemA("\n фамилия: ",str2); 
    CharToOemA("\n год рождения : ",str3); 
    CharToOemA("\n должность: ",str4); 
    CharToOemA("\n заработанная плата: ",str5); 
    CharToOemA("-й сотрудник ",str0); 
int i;     
    for(i=0;i<3;i++) 
      {cout<<"\n"<<i+1; 
       cout<<str0; 
       cout<<str1; 
       cout<<str2; 
       cin>>d[i].ns; 
       cout<<str3; 
       cin>>d[i].ob; 
       cout<<str4; 
       cin>>d[i].nz; 
       cout<<str5; 
       cin>>d[i].avt; 
       cout<<"\n \n"; 
      } 
CharToOemA(" Введенная информация о сотрудниках ",str1); 
f<<str1; 
    for(i=0;i<3;i++) 
      {f<<"\n"<<i+1; 
       f<<str0; 
       f<<str2; 
       f<<d[i].ns; 
       f<<str3; 
       f<<d[i].ob; 
       f<<str4; 
       f<<d[i].nz; 
       f<<str5; 
       f<<d[i].avt; 
       f<<"\n \n"; 
      } 
// Удаление элемента из массива по названию 
       char p1[40], *p2[40],*p3[40];   
       CharToOemA("\n Ввести фамилию удаляемого сотрудника: ",str); 
       cout<<str; 
       cin>>p1; 
       for(i=0;i<3;i++) 
       {*p2=d[i].ns; 
       *p3=p1; 
       int t; 
         t=strcmp(*p3,*p2); 
       if(t==0)  
       {d[i]=d[i+1];  
       CharToOemA("\nУдаляем  ",str); 
       CharToOemA("  сотрудник  \n",str1); 
       cout<<str<<i+1<<str1;} 
       else {CharToOemA("-й не указанный сотрудник \n",str); 
       cout<<i+1<<str;       } 
      } 
CharToOemA("\n Список после удаления выбранного элемента \n",str); 
    f<<str; 
    for(i=0;i<2;i++) 
      {f<<"\n"<<i+1; 
       f<<str0; 
       f<<str2; 
       f<<d[i].ns; 
       f<<str3; 
       f<<d[i].ob; 
       f<<str4; 
       f<<d[i].nz; 
       f<<str5; 
       f<<d[i].avt; 
       f<<"\n \n"; 
      } 
cout<<"\n\n"; 
int k; 
// Добавление новых элементов в список 
    CharToOemA("\n Добавление новых элементов \n",str); 
    cout<<str; 
    CharToOemA("\n Ввести количество элементов: ",str); 
    cout<<str; 
    cin>>k; 
    for(i=0;i<2;i++) 
      {dt[i]=d[i]; 
      } 
    for(i=2;i<2+k;i++) 
      {cout<<"\n"<<i+1; 
       cout<<str1; 
       cout<<str2; 
       cin>>dt[i].ns; 
       cout<<str3; 
       cin>>dt[i].ob; 
       cout<<str4; 
       cin>>dt[i].nz; 
       cout<<str5; 
       cin>>dt[i].avt; 
       cout<<"\n \n"; 
      } 
 CharToOemA("\n Список после добавления новых элементов \n",str); 
    f<<str; 
    for(i=0;i<2+k;i++) 
      {f<<"\n"<<i+1; 
       f<<str0; 
       f<<str2; 
       f<<dt[i].ns; 
       f<<str3; 
       f<<dt[i].ob; 
       f<<str4; 
       f<<dt[i].nz; 
       f<<str5; 
       f<<dt[i].avt; 
       f<<"\n \n"; 
      } 
// Закрытие файла 
    f.close(); 
    cout<<endl;
    delete [] d;
} 


PM   Вверх
nexUS1
Дата 30.12.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



Luyan большое спасибо

поставьте этому человеку + за меня, помог
PM MAIL   Вверх
bsa
Дата 30.12.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196




M
bsa
nexUS1, если ответ на вопрос получен, то пометь тему решенной

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0609 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.