1 2 3 4 5 6 7 8 9 10 |
int A[10]; // Десять элементов, и все элементы типа int struct MyStruct { int A; char C[10]; }; MyStruct obj1[10]; //Десять элементов типа MyStruct //При этом каждый из этих десяти элементов состоит из двух элементов определенных внутри структуры |
1 |
MyStruct obj1[10]; //Массив из десяти структур. Или просто массив структур. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//Borland C++ 3.1 Массив структур Листинг #1 #include <string.h> #include <iostream.h> struct MyStruct { int A; char C[10]; }; MyStruct obj1[10]; //Десять элементов типа MyStruct //При этом каждый из этих десяти элементов состоит из двух элементов определенных внутри структуры int main() { obj1[0].A=100; //Первый элемент массива переменная int A strcpy(obj1[0].C,"12345"); //Первый элемент массива переменная char C[10] } |
1 2 3 4 5 6 7 8 |
MyStruct *obj1; //obj1 есть указатель на MyStruct; int N; //N есть число элементов массива cin>>N; //Присваивание в N значения obj1=new MyStruct[N]; //Динамическое выделение памяти под массив структур из N элементов //Некоторый код delete []obj1; //Освобождение памяти |
Шаг1. Пишем просто пустую программу. Самую обычную
1 2 3 |
int main(){ } |
Шаг2. Добавляем в программу структуру. Называем её каким-нибудь понятным именем.
1 2 3 4 5 6 7 |
struct Shop { }; int main(){ } |
Шаг3. Описываем внутренне строение структуры.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
struct Shop { char name[20]; //Название продукта float cena; //Цена продукта int count; //количество купленного char prodav[30]; //Продавец char pokup[30]; //Покупатель int Date[3]; //Дата продажи }; int main(){ } |
Шаг4. Создаём переменную, тип которой наша структура
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/*ОПИСЫВАЕМАЯ СТРУКТУРА*/ struct Shop { char name[20]; //Название продукта float cena; //Цена продукта int count; //количество купленного char prodav[30]; //Продавец char pokup[30]; //Покупатель int Date[3]; //Дата продажи }; /*ГЛАВНАЯ ФУНКЦИЯ*/ int main(){ int N; cout << "Введи N: "; cin >> N; Shop *M1 = new Shop[10]; //Выделение памяти под массив структур, ради 10 структур delete []M1; //Освобождение памяти cin.get(); //Ожидание нажатия клавиши } |
1 |
void GetData(Shop* M, int N){} //Функция для приёма массива типа Shop, принимаеи сам массив структур и число его элементов |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
//Borland C++ 3.1 Массив структур Листинг #2 #include <stdlib.h> #include <iostream.h> /*ОПИСЫВАЕМАЯ СТРУКТУРА*/ struct Shop { char Name[30]; float Cena; char Prodav[30]; char Pokup[30]; int Date[3]; }; /*ФУНКЦИЯ ОБЕСПЕЧИВАЕТ ВЫВОД ДАННЫХ НА ЭКРАН*/ void ShowData(Shop *M,int N) { for (int i=0;i<N;i++) { cout <<M[i].Name << endl; cout <<M[i].Cena << endl; cout <<M[i].Prodav << endl; cout <<M[i].Pokup << endl; cout <<M[i].Date[0] << "." << M[i].Date[1] << "." << M[i].Date[2] << endl << endl; //количество купленного не выводим, сейчас не нужно, хотя хотите - выводите. } } /*ФУНКЦИЯ ЗАНОСИТ ДАННЫЕ В СТРУКТУРУ*/ void GetData(Shop *M,int N) { cin.ignore(); for (int i=0;i<N;i++) { cout << "\n"; cout << "НАЗВАНИЕ: "; cin.getline(M[i].Name,30); cout << "ЦЕНА: "; cin >> M[i].Cena; cin.ignore(); cout << "Количество: "; cin >> M[i].Cena; cin.ignore(); cout << "ПРОДАВЕЦ: "; cin.getline(M[i].Prodav,30); cout << "ПОКУПАТЕЛЬ: "; cin.getline(M[i].Pokup,30); cout << "ДАТА "; cin >> M[i].Date[0]; cin.ignore(); cin >> M[i].Date[1]; cin.ignore(); cin >> M[i].Date[2]; cin.ignore(); } } /*ГЛАВНАЯ ФУНКЦИЯ*/ int main() { setlocale(LC_ALL,""); system("CLS"); int N; cout << "Введите N: "; cin >> N; Shop *M = new Shop[N]; GetData(M,N); //Ввод данных в массив структур ShowData(M,N); //Вывод массива структур на экран delete []M; system("PAUSE"); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
//IDE CodeBlocks Массив структур Листинг #2 #include <iostream> #include <windows.h> #include <iomanip> #include <cstring> using namespace std; /*ОПИСЫВАЕМАЯ СТРУКТУРА*/ struct Shop { char Name[70]; float Cena; int count; char Prodav[50]; char Pokup[50]; char Date[11]; }; /*ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ, ИЩУТ МАКСИМАЛЬНЫЕ СТРОКИ ДЛЯ КАЖДОЙ КОЛОНКИ*/ int get_max_caption(Shop* M, int N){ int maximum = strlen(M[0].Name); int temp; for (int i=1; i<N; i++){ temp = strlen(M[i].Name); if (temp > maximum) maximum = temp; } return maximum; } int get_max_prodav(Shop* M, int N){ int maximum = strlen(M[0].Prodav); int temp; for (int i=1; i<N; i++){ temp = strlen(M[i].Prodav); if (temp > maximum) maximum = temp; } return maximum; } int get_max_pokup(Shop* M, int N){ int maximum = strlen(M[0].Pokup); int temp; for (int i=1; i<N; i++){ temp = strlen(M[i].Pokup); if (temp > maximum) maximum = temp; } return maximum; } /*КОНЕЦ ВСПОМОГАТЕЛЬНЫХ ФУНКЦИЙ*/ /*ФУНКЦИЯ ОБЕСПЕЧИВАЕТ ВЫВОД ДАННЫХ НА ЭКРАН*/ void ShowData(Shop *M, int N) { cout << "\n\n"; cout << "INFORMATION\n"; struct ColumnWidth{ //Вспомогательная структура поможет обрабатывать промежуточные данные int Name; int Prodav; int Pokup; } ColumnWidth; int temp; //Переменная для хранения подходящей ширины /*ПОДСЧЁТ НУЖНОЙ ШИРИНЫ КОЛОНКАМ*/ ColumnWidth.Name = strlen("НАЗВАНИЕ") + 1; temp = get_max_caption(M,N) + 1; if (ColumnWidth.Name < temp) ColumnWidth.Name = temp; ColumnWidth.Prodav = strlen("ПРОДАВЕЦ") + 1; temp = get_max_prodav(M,N) + 1; if (ColumnWidth.Prodav < temp) ColumnWidth.Prodav = temp; ColumnWidth.Pokup = strlen("ПОКУПАТЕЛЬ") + 1; temp = get_max_pokup(M,N) + 1; if (ColumnWidth.Pokup < temp) ColumnWidth.Pokup = temp; /*КОНЕЦ РАСЧЁТА*/ /*ЯЧЕЙКИ-ЗАГОЛОВКИ*/ cout << "НАЗВАНИЕ" << setw(ColumnWidth.Name - strlen("НАЗВАНИЕ")) << '|'; cout << setw(10) << "ЦЕНА" << '|'; cout << "КОЛИЧЕСТВО" << setw(10 - strlen("КОЛИЧЕСТВО")) << '|'; cout << setw(ColumnWidth.Prodav) << "ПРОДАВЕЦ" << '|'; cout << setw(ColumnWidth.Pokup) << "ПОКУПАТЕЛЬ" << '|'; cout << setw(15) << "ДАТА" << '|'; /*КОНЕЦ ЯЧЕЕК-ЗАГОЛОВКОВ*/ cout << '\n'; /*ВЫВОДИМ МАССИВ СТРУКТУР ПОСТРОЧНО*/ for (int i=0; i<N; i++){ cout << M[i].Name << setw(ColumnWidth.Name - strlen(M[i].Name) ) << '|'; cout.width(10); (cout << setprecision(2) << fixed << M[i].Cena << '|').width(10); (cout << setprecision(2) << fixed << M[i].count << '|').width(10); cout << setw(ColumnWidth.Prodav) << M[i].Prodav << '|'; cout << setw(ColumnWidth.Pokup) << M[i].Pokup << '|'; cout << setw(15) << M[i].Date << '|'; cout << '\n'; } /*КОНЕЦ ПОСТРОЧНОГО ВЫВОДА*/ cout << '\n'; } /*ФУНКЦИЯ ЗАНОСИТ ДАННЫЕ В СТРУКТУРУ*/ void GetData(Shop *M,int N) { for (int i=0;i<N;i++) { cout << "\n"; cout << "НАЗВАНИЕ: "; cin.getline(M[i].Name,sizeof(M[i].Name)); cout << "ЦЕНА: "; cin >> M[i].Cena; cin.ignore(); cout << "Количество: "; cin >> M[i].count; cin.ignore(); cout << "ПРОДАВЕЦ: "; cin.getline(M[i].Prodav,sizeof(M[i].Prodav)); cout << "ПОКУПАТЕЛЬ: "; cin.getline(M[i].Pokup,sizeof(M[i].Pokup)); cout << "ДАТА "; cin >> M[i].Date; cin.ignore(); } } /*ГЛАВНАЯ ФУНКЦИЯ*/ int main() { setlocale(LC_ALL,""); SetConsoleOutputCP(1251); SetConsoleCP(1251); system("CLS"); int N; cout << "Введите N: "; (cin >> N).ignore(); Shop *M = new Shop[N]; GetData(M,N); //Ввод данных в массив структур ShowData(M,N); //Вывод массива структур на экран delete []M; system("PAUSE"); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
//Borland C++ 3.1 Массив структур Листинг #2 #include <iostream.h> #include <windows.h> #include <iomanip.h> //setw, setprecission #include <string.h> //strlen #include <conio.h> //clrscr /*ОПИСЫВАЕМАЯ СТРУКТУРА*/ struct Shop { char Name[70]; float Cena; int count; char Prodav[50]; char Pokup[50]; char Date[11]; }; /*ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ, ИЩУТ МАКСИМАЛЬНЫЕ СТРОКИ ДЛЯ КАЖДОЙ КОЛОНКИ*/ int get_max_caption(Shop* M, int N){ int maximum = strlen(M[0].Name); int temp; for (int i=1; i<N; i++){ temp = strlen(M[i].Name); if (temp > maximum) maximum = temp; } return maximum; } int get_max_prodav(Shop* M, int N){ int maximum = strlen(M[0].Prodav); int temp; for (int i=1; i<N; i++){ temp = strlen(M[i].Prodav); if (temp > maximum) maximum = temp; } return maximum; } int get_max_pokup(Shop* M, int N){ int maximum = strlen(M[0].Pokup); int temp; for (int i=1; i<N; i++){ temp = strlen(M[i].Pokup); if (temp > maximum) maximum = temp; } return maximum; } /*КОНЕЦ ВСПОМОГАТЕЛЬНЫХ ФУНКЦИЙ*/ /*ФУНКЦИЯ ОБЕСПЕЧИВАЕТ ВЫВОД ДАННЫХ НА ЭКРАН*/ void ShowData(Shop *M, int N) { cout << "\n\n"; cout << "INFORMATION\n"; struct ColumnWidth{ //Вспомогательная структура поможет обрабатывать промежуточные данные int Name; int Prodav; int Pokup; } ColumnWidth; int temp; //Переменная для хранения подходящей ширины /*ПОДСЧЁТ НУЖНОЙ ШИРИНЫ КОЛОНКАМ*/ ColumnWidth.Name = strlen("НАЗВАНИЕ") + 1; temp = get_max_caption(M,N) + 1; if (ColumnWidth.Name < temp) ColumnWidth.Name = temp; ColumnWidth.Prodav = strlen("ПРОДАВЕЦ") + 1; temp = get_max_prodav(M,N) + 1; if (ColumnWidth.Prodav < temp) ColumnWidth.Prodav = temp; ColumnWidth.Pokup = strlen("ПОКУПАТЕЛЬ") + 1; temp = get_max_pokup(M,N) + 1; if (ColumnWidth.Pokup < temp) ColumnWidth.Pokup = temp; /*КОНЕЦ РАСЧЁТА*/ /*ЯЧЕЙКИ-ЗАГОЛОВКИ*/ cout << "НАЗВАНИЕ" << setw(ColumnWidth.Name - strlen("НАЗВАНИЕ")) << '|'; cout << setw(10) << "ЦЕНА" << '|'; cout << "КОЛИЧЕСТВО" << setw(10 - strlen("КОЛИЧЕСТВО")) << '|'; cout << setw(ColumnWidth.Prodav) << "ПРОДАВЕЦ" << '|'; cout << setw(ColumnWidth.Pokup) << "ПОКУПАТЕЛЬ" << '|'; cout << setw(15) << "ДАТА" << '|'; /*КОНЕЦ ЯЧЕЕК-ЗАГОЛОВКОВ*/ cout << '\n'; /*ВЫВОДИМ МАССИВ СТРУКТУР ПОСТРОЧНО*/ for (int i=0; i<N; i++){ cout << M[i].Name << setw(ColumnWidth.Name - strlen(M[i].Name) ) << '|'; cout.width(10); (cout << setprecision(2) << M[i].Cena << '|').width(10); (cout << setprecision(2) << M[i].count << '|').width(10); cout << setw(ColumnWidth.Prodav) << M[i].Prodav << '|'; cout << setw(ColumnWidth.Pokup) << M[i].Pokup << '|'; cout << setw(15) << M[i].Date << '|'; cout << '\n'; } /*КОНЕЦ ПОСТРОЧНОГО ВЫВОДА*/ cout << '\n'; } /*ФУНКЦИЯ ЗАНОСИТ ДАННЫЕ В СТРУКТУРУ*/ void GetData(Shop *M,int N) { for (int i=0;i<N;i++) { cout << "\n"; cout << "НАЗВАНИЕ: "; cin.getline(M[i].Name,sizeof(M[i].Name)); cout << "ЦЕНА: "; cin >> M[i].Cena; cin.ignore(); cout << "Количество: "; cin >> M[i].count; cin.ignore(); cout << "ПРОДАВЕЦ: "; cin.getline(M[i].Prodav,sizeof(M[i].Prodav)); cout << "ПОКУПАТЕЛЬ: "; cin.getline(M[i].Pokup,sizeof(M[i].Pokup)); cout << "ДАТА "; cin >> M[i].Date; cin.ignore(); } } /*ГЛАВНАЯ ФУНКЦИЯ*/ int main() { clrscr(); int N; cout << "Введите N: "; (cin >> N).ignore(); Shop *M = new Shop[N]; GetData(M,N); //Ввод данных в массив структур ShowData(M,N); //Вывод массива структур на экран delete []M; getch(); } |
Лучший сайт, среди всех, где описываются структуры! Спасибо огромное за урок!
можно так:
struct Shop_str
{
char Name[30];
int Cena;
char Prodav[30];
char Pokup[30];
int Date[3];
}Shop, *PShop;
…
…
Shop.Cena = 3.62;
Огромное спасибо за урок.Все стало понятно.Но в CODE::DLOCK эта фишка cout<<"r�33[70C"; не работает.Если переписать
и добавить хедер
работает. В Visual Studio тоже должно бы работать. Может быть и не все так красиво,но это же пример.
Большое человеческое спасибо за предоставленную информацию по массивам (лучше и подробней описано даже, чем в учебнике)
Извиняюсь, опечатался, по структурам*
Спасибо, наиболее понятные примеры и объяснения по массивам структур.
😡 😡
ребят помогите пожалуйста. нужно, описать и протестировать структуру, в вести массив элементов этой структуры размером n для слудующих элементов: номер груза, наименование груза, объем груза, цена груза
СУКПЗДЦ!!!
Огромное спасибо за пример!!!! очень помог)
С указнием размера массива структур все понятно. А вот, если не знаешь его размер, т.е. сколько нужно будет вводить элементов — здесь проблема. Если речь идет об обычных типах данных, то можно организовать заполнения массива со строки или сразу с помощью вектора, но как впихнуть элементы структуры в вектор, я пока не знаю.
А что прямо-так в вектор надо? Можно и без вектора.
Я вопрос вообще не понял.
Если это вопрос про как создавать массив структур если не знаешь заранее количество элементов в структуре, то
Ну а с языком сами разбирайтесь.
Создать структуру товар(для усложнения использовать динамические поля для строк).
Каждый товар должен иметь не менее 8 полей.Заполнить массив десятью товарами.
Реализовать поиск в массиве по названию, по вхождению слов в описание и по диапазону цены товара.
Помогите Пожайлуста Разобратся Немогу На языке C++ Решыте очень буду Благодарна!!!!
помогите пожалуйста написать программу, которая определяет самый дорогой диск
sooqa slozna
Автор красава, разжевал больше некуда))) Если кому не доходит, значит бросайте это дело — не ваше ОНО!!!
харош
Как сохранить это в файл?
Не знаю, что имеется в виду под "это", поэтому просто показываю на маленьком коде в виде записи в текстовый файл (но лучше если уметь записывать в бинарный).