Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Структури та об’єднання
Підготував: студент групи СП-11 Ніщик Сергій Ігорович Варіант №21
Тернопіль, 2015 Мета: одержати навички в написанні програм з використанням структур; зрозуміти механізм обміну інформацією між структурами; навчитись передавати структури в якості параметрів функції; одержати навички роботи зі змінними типу структури; вивчити механізм передачі параметрів у функцію по посиланню через вказівник.
1. Написати програму, яка повинна включати функції для: виведення шапки таблиці; виведення даних одного рядка таблиці; введення і виведення даних масиву структур, визначення суми значень елементів одного стовпця масиву структур; зміну місцями двох елементів масиву записів, наприклад першого і останнього рядка; відомості виводити у відсортованому вигляді згідно заданого поля.
Продажа програмних продуктів Назва Фірма - виробник Вартість Об’єм, Мб Кількість на складі
//лістинг програми #include<iostream> #include<stdlib.h> #include<time.h> #include<conio.h> #include<string.h> #include<iomanip> using namespace std; char firms[][10]={"Microsoft", "IMESC", "IBM", "Accenture", "Eleks", "SoftServe", "Solutions", "Lohika", "Itera", "Intelex","Emsisoft","AVG"}; char names[][10]={"AVG", "Emsisoft", "Avira", "Eset", "Opera", "Mozilla", "Chrome", "Steam", "AIMP3", "Skype","Eleks","Itera"}; struct market { char name[20]; char firma[20]; int cost; int size; int number; } ar[20]; void input(int n) { srand(time(0)); for(int i=0; i<n; i++) { strcpy(ar[i].name, names[rand()%12]); strcpy(ar[i].firma, firms[rand()%12]); ar[i].cost=rand()%50+5; ar[i].size=rand()%100+5; ar[i].number=rand()%50+1; } } int menu() { int ch; cout<<endl; getch(); do { cout<<endl<<endl<<"Можливi операцiї над таблицею: "<<endl<<endl; cout<<"1. Виведення таблицi даних -> Натиснiть '1'"<<endl; cout<<"2. Визначення суми значень стовпця -> Натиснiть '2'"<<endl; cout<<"3. Змiна мiсцями двох рядкiв таблицi -> Натиснiть '3'"<<endl; cout<<"4. Вiдсортувати за зростанням заданий стовпець -> Натиснiть '4'"<<endl; cout<<"5. Виведення шапки таблицi -> Натиснiть '5'"<<endl; cout<<"6. Вихiд з програми -> Натиснiть '6'"<<endl; cout<<endl<<"Ваша команда - "; cin>>ch; cout<<endl<<endl; } while(ch>7&&ch<1); return ch; } void tab() { cout<<" << ||Продаж програмних продуктiв|| >>"<<endl; cout<<"||====|============|=================|==========|===========|==========||"<<endl; cout<<"|| № | Назва | Фiрма-виробник | Вартiсть | О'бєм МБ | Кiлькiсть||"<<endl; cout<<"||====|============|=================|==========|===========|==========||"<<endl; } void change(int n) { int m1, m2, c1, s1, n1; char nm[20], fr[20]; cout<<"Функцiя. Змiна мiсцями двох рядкiв таблицi"<<endl; cout<<"Введiть номер першого рядка - "; cin>>m1; cout<<"Введiть номер другого рядка - "; cin>>m2;
strcpy(nm,ar[m1-1].name); strcpy(ar[m1-1].name, ar[m2-1].name); strcpy(ar[m2-1].name, nm);
strcpy(fr,ar[m1-1].firma); strcpy(ar[m1-1].firma, ar[m2-1].firma); strcpy(ar[m2-1].firma, fr);
c1=ar[m1-1].cost; ar[m1-1].cost=ar[m2-1].cost; ar[m2-1].cost=c1;
s1=ar[m1-1].size; ar[m1-1].size=ar[m2-1].size; ar[m2-1].size=s1;
n1=ar[m1-1].number; ar[m1-1].number=ar[m2-1].number; ar[m2-1].number=n1; } void sort(int n) { int m, c1, s1, n1; char nm[20], fr[20]; cout<<"Функцiя. Сортування за зростанням стовпця."; cout<<endl<<"Введiть номер стовпця - "; cin>>m; if(m==4) { for(int i=0; i<n-1; i++) for(int j=n-2; j>=i; j--){ if(ar[j].cost>ar[j+1].cost){ strcpy(nm,ar[j].name); strcpy(ar[j].name, ar[j+1].name); strcpy(ar[j+1].name, nm);
strcpy(fr,ar[j].firma); strcpy(ar[j].firma, ar[j+1].firma); strcpy(ar[j+1].firma, fr);
c1=ar[j].cost; ar[j].cost=ar[j+1].cost; ar[j+1].cost=c1;
s1=ar[j].size; ar[j].size=ar[j+1].size; ar[j+1].size=s1;
n1=ar[j].number; ar[j].number=ar[j+1].number; ar[j+1].number=n1; } } } if(m==5) { for(int i=0; i<n-1; i++) for(int j=n-2; j>=i; j--){ if(ar[j].size>ar[j+1].size){ strcpy(nm,ar[j].name); strcpy(ar[j].name, ar[j+1].name); strcpy(ar[j+1].name, nm);
strcpy(fr,ar[j].firma); strcpy(ar[j].firma, ar[j+1].firma); strcpy(ar[j+1].firma, fr);
c1=ar[j].cost; ar[j].cost=ar[j+1].cost; ar[j+1].cost=c1;
s1=ar[j].size; ar[j].size=ar[j+1].size; ar[j+1].size=s1;
n1=ar[j].number; ar[j].number=ar[j+1].number; ar[j+1].number=n1; } } } if(m==6) { for(int i=0; i<n-1; i++) for(int j=n-2; j>=i; j--){ if(ar[j].number>ar[j+1].number){ strcpy(nm,ar[j].name); strcpy(ar[j].name, ar[j+1].name); strcpy(ar[j+1].name, nm);
strcpy(fr,ar[j].firma); strcpy(ar[j].firma, ar[j+1].firma); strcpy(ar[j+1].firma, fr);
c1=ar[j].cost; ar[j].cost=ar[j+1].cost; ar[j+1].cost=c1;
s1=ar[j].size; ar[j].size=ar[j+1].size; ar[j+1].size=s1;
n1=ar[j].number; ar[j].number=ar[j+1].number; ar[j+1].number=n1; } } } } void output(int n) { cout<<" << ||Продаж програмних продуктiв|| >>"<<endl; cout<<"||====|============|=================|==========|===========|==========||"<<endl; cout<<"|| № | Назва | Фiрма-виробник | Вартiсть | О'бєм МБ | Кiлькiсть||"<<endl; cout<<"||====|============|=================|==========|===========|==========||"<<endl; for(int i=0; i<n; i++) { cout<<"||"<<setw(3)<<i+1<<" |"<<setw(11)<<ar[i].name<<" |" <<setw(16)<<ar[i].firma<<" |" <<setw(9)<<ar[i].cost<<" |" <<setw(10)<<ar[i].size<<" |" <<setw(9)<<ar[i].number<<" ||"<<endl; } cout<<"||====|============|=================|==========|===========|==========||"; } void suma(int n) { int m, s=0; cout<<"Функцiя.Визначення суми значень одного стовпця"<<endl; cout<<"Введiть номер стовпця - "; cin>>m; if(m==4) for(int i=0; i<n; i++) s+=ar[i].cost; if(m==5) for(int i=0; i<n; i++) s+=ar[i].size; if(m==6) for(int i=0; i<n; i++) s+=ar[i].number; cout<<"Сума значень "<<m<<"-го "<<"стовпця = "<<s<<"."; } int main() { setlocale(0,"ukr"); int n, f; cout<<"Введiть кiлькiсть програмних продуктiв - "; cin>>n; input(n); for(;;) { f=menu(); switch(f) { case 1: output(n);break; case 2: suma(n);break; case 3: change(n);break; case 4: sort(n);break; case 5: tab();break; case 6: cout<<"Вихiд з програми. До побачення.:)"; goto next; } } next: return 0; } Виконання
2. Вимоги до програми: - Заповнити таблицю не менше як 10 записами вихідних даних. - Обчислити значення необхідних полів (позначених?) за наведеними у завданні формулами. - Вивести на екран сформовану відомість. - Відсортувати таблицю за обчисленим полем. Якщо їх декілька – вибрати за власним бажанням.
//лістинг програми
#include<iostream> #include<stdlib.h> #include<time.h> #include<string.h> #include<math.h> #include<iomanip> #include<conio.h> using namespace std; const float N=6.0*pow(10,0.26*10); char names[][20]={"Water","Sand","Diomant","Stone","Wolfram","Oxigen","Plastic","Gold","Silver","Ferum","Oxygenium","Fluorum","Sulfur","Chlorum","Aluminium", "Germanium","Arsenicum","Zirconium","Rhodium","Stannum","Plumbum","Terbium","Europium","Cerium","Caesium","Tellurium","Stibium"}; struct parametr { char name[20]; float V; float M; float d; float m; } arr[20]; void sort(int n) { float c, v, mas, r; int km; char str[20]; cout<<"Функцiя. Сотування стовпця 'Маса молекули'"<<endl<<endl; cout<<"Виберiть команду: "<<" 1 - спадання"<<endl <<" "<<" 2 - зростання"<<endl<<endl; cout<<"Ваша команда - "; cin>>km; if(km==1) { for(int i=0; i<n-1; i++) for(int j=n-2; j>=i; j--) { if(arr[j].m<arr[j+1].m) { strcpy(str,arr[j].name); strcpy(arr[j].name,arr[j+1].name); strcpy(arr[j+1].name,str); v=arr[j].V; arr[j].V=arr[j+1].V; arr[j+1].V=v; mas=arr[j].M; arr[j].M=arr[j+1].M; arr[j+1].M=mas; r=arr[j].d; arr[j].d=arr[j+1].d; arr[j+1].d=r; c=arr[j].m; arr[j].m=arr[j+1].m; arr[j+1].m=c; } } } if(km==2) { for(int i=0; i<n-1; i++) for(int j=n-2; j>=i; j--) { if(arr[j].m>arr[j+1].m) { strcpy(str,arr[j].name); strcpy(arr[j].name,arr[j+1].name); strcpy(arr[j+1].name,str); v=arr[j].V; arr[j].V=arr[j+1].V; arr[j+1].V=v; mas=arr[j].M; arr[j].M=arr[j+1].M; arr[j+1].M=mas; r=arr[j].d; arr[j].d=arr[j+1].d; arr[j+1].d=r; c=arr[j].m; arr[j].m=arr[j+1].m; arr[j+1].m=c; } } } } int enter(int n) { char str[20]; cout<<"Функцiя. Виведення iнформацiї про речовину."; cout<<endl<<"Введiть назву речовини - "; for(int j=0; j<n; j++) { cin>>str; for(int i=0; i<n; i++) { if(strcmp(str,arr[i].name)==0) { cout<<endl<<endl; cout<<"||===|==========|========|======|==================|===================||"<<endl; cout<<"|| № | Назва | О'бєм | Маса | Розмiр | Маса молекули ||"<<endl; cout<<"||===|==========|========|======|==================|===================||"<<endl; cout<<"||"<<setw(2)<<i+1<<" |"<<setw(9)<<arr[i].name<<" |" <<setw(7)<<arr[i].V<<" |" <<setw(5)<<arr[i].M<<" |" <<setw(17)<<arr[i].d<<" |" <<setw(18)<<arr[i].m<<" ||"<<endl; cout<<"||===|==========|========|======|==================|===================||"<<endl; return 0; } } cout<<"Введеної речовини не виявлено. Спробуйте ще раз - "; } } void input(int n) { srand(time(0)); for(int i=0; i<n; i++) { strcpy(arr[i].name,names[rand()%27]); arr[i].V=(float)(rand()%100)/1000; arr[i].M=(float)(rand()%1000)/100; arr[i].d=pow(arr[i].V/N,1.0/3); arr[i].m=arr[i].M/N; } } void output(int n) { cout<<" << ||Визначення параметрiв молекул речовини|| >>"<<endl; cout<<"||====|===========|========|======|==================|===================||"<<endl; cout<<"|| № | Назва | О'бєм | Маса | Розмiр | Маса молекули ||"<<endl; cout<<"||====|===========|========|======|==================|===================||"<<endl; for(int i=0; i<n; i++) { cout<<"||"<<setw(3)<<i+1<<" |"<<setw(10)<<arr[i].name<<" |" <<setw(7)<<arr[i].V<<" |" <<setw(5)<<arr[i].M<<" |" <<setw(17)<<arr[i].d<<" |" <<setw(18)<<arr[i].m<<" ||"<<endl; } cout<<"||====|===========|========|======|==================|===================||"<<endl; }
int menu() { int ch; cout<<endl; getch(); do { cout<<endl<<endl<<"Введiть команду для виконання: "<<endl<<endl; cout<<"1. Виведення таблицi даних -> Натиснiть '1'"<<endl; cout<<"2. Виведення будь-якого iз записiв вiдомостi -> Натиснiть '2'"<<endl; cout<<"3. Вiдсортувати поле 'Маса молекули' -> Натиснiть '3'"<<endl; cout<<"4. Вихiд з програми -> Натиснiть '4'"<<endl; cout<<endl<<"Ваша команда - "; cin>>ch; cout<<endl<<endl; } while(ch>5&&ch<1); return ch; } int main() { setlocale(0,"ukr"); int n, f; cout<<"Введiть кiлькiсть речовин - "; cin>>n; input(n); for(;;) { f=menu(); switch(f) { case 1: output(n);break; case 2: enter(n);break; case 3: sort(n);break; case 4: cout<<"Вихiд з програми. До побачення.:))"; goto go; } } go: return 0; }
Виконання
Висновок: отже я одержав навички в написанні програм з використанням структур; зрозумів механізм обміну інформацією між структурами; навчився передавати структури в якості параметрів функції; одержав навички роботи зі змінними типу структури; вивчив механізм передачі параметрів у функцію по посиланню через вказівник.
|