Задачи - struct

Креирање на стуктури, доделување вредности  и пристап до членовите на структурата

1. #include <iostream>
using namespace std;
struct part //    structure
{
int modelnumber; //ID number of widget
int partnumber; //ID number of widget part
float cost; //cost of part
};
int main()
{
part part1; //    structure variable
part1.modelnumber = 6244; //give values to structure members
part1.partnumber = 373;
part1.cost = 217.55F;
//display structure members
cout << "Model "<< part1.modelnumber;
cout << ", part " << part1.partnumber;
cout << ", costs $" << part1.cost << endl;
return 0;
}
Output:
Model 6244, part 373, costs $217.55


2
. #include <iostream>
using namespace std;
struct Person
{
char name[50];
int age;
float salary;
};

int main()
{
Person p1;
cout << "Enter Full name: ";
cin.get(p1.name, 50);
cout << "Enter age: ";
cin >> p1.age;
cout << "Enter salary: ";
cin >> p1.salary;
cout << "\nDisplaying Information." << endl;
cout << "Name: " << p1.name << endl;
cout <<"Age: " << p1.age << endl;
cout << "Salary: " << p1.salary;
return 0;
}
Output :
Enter Full name: Ana Mitrova
Enter age: 18
Enter salary: 
33000

Displaying Information.
Name: Ana Mitrova
Age: 18
Salary: 33000

3. 
#include <iostream> 
#include <string> 
using namespace std; 
struct Kniga 
string imeKniga; 
string imeAvtor; 
int brojStranici; 
string datumIzdavanje; 
};
int main() 
Kniga prva; 
prva.imeKniga = "C++ Primer Plus ";
prva.imeAvtor = "Stephen Prata"; 
prva.brojStranici = 1224; 
prva.datumIzdavanje = "25.11.2004"; 
Kniga vtora; 
vtora.imeKniga = "C++ how to program ";
vtora.imeAvtor = "Paul Deitel";
vtora.brojStranici = 1303; 
vtora.datumIzdavanje = "20.08.2012";
cout << prva.imeKniga << " - " << prva.imeAvtor << endl; 
cout << vtora.imeKniga << " - " << vtora.imeAvtor << endl; 
//chlenovite na strukturata se odnesuvaat kako obichni promenlivi 
//i vrz sekoja od niv mozhe da izvrshuvame najrazlichni operacii 
cout << vtora.imeKniga << " ima " << (vtora.brojStranici - prva.brojStranici)<< " povekje stranici od " << 
prva.imeKniga << endl; 
return 0; 

Изврши корекции во задача 3.
- Бројот на страници за двете книги внеси го преку тастатура. Потоа определи ја разликата на страници, прикажи која книга има за колку повеќе станици од другата
-Внеси  ги сите податоци преку тастатута и прикажи која книга има за колку повеќе станици од другата

Што ќе се прикаже по извршување на следните кодови 
Пример 1
// example about structures
#include <iostream>
#include <string>
#include <sstream> //stringstream
using namespace std;

struct movies_t {
  string title;
  int year;
} mine, yours;

void printmovie (movies_t movie);

int main ()
{
  string mystr;

  mine.title = "2001 A Space Odyssey";
  mine.year = 1968;

  cout << "Enter title: ";
  getline (cin,yours.title);
  cout << "Enter year: ";
  getline (cin,mystr);
  stringstream(mystr) >> yours.year;

  cout << "My favorite movie is:\n ";
  printmovie (mine);
  cout << "And yours is:\n ";
  printmovie (yours);
  return 0;
}

void printmovie (movies_t movie)
{
  cout << movie.title;
  cout << " (" << movie.year << ")\n";}
The example shows how we can use the members of an object as regular variables. For example, the member
yours.year is a valid variable of type int, and mine.title is a valid variable of type string.
The objects mine and yours can also be treated as valid variables of type movies_t, for example we have passed
them to the function printmovie as we would have done with regular variables. Therefore, one of the most
important advantages of data structures is that we can either refer to their members individually or to the entire
structure as a block with only one identifier

Пример 2

Внеси име, презиме и оценк ипо македонски, математика, физика и програмски. Да се прикаже име, презиме, и просецна оценка добиена од наведените предмети .

#include <iostream>
using namespace std;
int main()
{
  int zb;
float ars;

struct ucenik
{
char ime[20];
char prezime[20];
int makedonski;
int mate;
int fizika;
int programski;
} uc;
cout<<"\n Vnesi ime na ucenik: ";
cin>>uc.ime;
    cout<<"\n Vnesi  prezime na ucenik: ";
cin>> uc.prezime;
    cout<<"\n Vnesi ocenka od makedonski jazik: ";
cin>> uc.makedonski;
    cout<<"\n Vnesi ocenka od matematika: ";
cin>> uc.mate;
    cout<<"\n Vnesi ocenka od fizika: ";
cin>> uc.fizika;
    cout<<"\n Vnesi ocenka od programski jazik: ";
cin>> uc.programski;
cout<<"\n Ime na ucenik"<< uc.ime;
    cout<<"\n Prezime na ucenik"<< uc.prezime;
  zb = uc.makedonski + uc.mate + uc.fizika + uc.programski;
  ars = zb / 4.0;
  cout<<"\nProsekot na ucenikot e "<< ars;
  return 0;
}

Пример 3
// array of structures
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

struct movies_t {
  string title;
  int year;
} films [3];

void printmovie (movies_t movie);

int main ()
{
  string mystr;
  int n;

  for (n=0; n<3; n++)
  {
    cout << "Enter title: ";
    getline (cin,films[n].title);
    cout << "Enter year: ";
    getline (cin,mystr);
    stringstream(mystr) >> films[n].year;
  }

  cout << "\nYou have entered these movies:\n";
  for (n=0; n<3; n++)
    printmovie (films[n]);
  return 0;
}

void printmovie (movies_t movie)
{
  cout << movie.title;
  cout << " (" << movie.year << ")\n";
}

Внеси име и презине на ученик, број на оправдани и неоправдани изостаноци. На екранот да се прикаже име, презиме, број на оправдани, неоправдани  ивкупен број на изостаноци

#include <iostream>
using namespace std;
int main()
{
int izostanoci;
struct ucenik
{
   char ime[20];
   char prezime[20];
   int opravdani;
   int neopravdani;
} uc;

cout<<" Vnesi ime na ucenik: ";
cin>>uc.ime;
cout<<" Vnesi prezime na ucenik: ";
cin>> uc.prezime;
cout<<" Vnesi broj na opravdani: ";
cin>> uc.opravdani;
cout<<" Vnesi broj na neopravdani: ";
cin>> uc.neopravdani;
cout<<"\n Ime na ucenikot "<<uc.ime;
cout<<"\n Prezime na ucenik "<< uc.prezime;
cout<<"\n Broj na opravdani "<< uc.opravdani;
cout<<"\n Broj na neopravdani "<< uc.neopravdani;
izostanoci = uc.opravdani + uc.neopravdani;
cout<<"\n Vkupno izostanoci "<<izostanoci;
return 0;
}
Програма со која од низа внесени студенти го прикажува студентот со највисок просек. Податоците за студент се внесуваат со struct (име, презиме, години, просек)

#include <iostream>
using namespace std;
 
struct Student {
char ime[15], prezime[15];
int godina;
float prosek;
};
int main() {
int n;
cout << "Vnesi broj na studenti ";
cin >> n;
Student studenti[n];
for (int i = 0; i < n; i++) {
cout << "Vnesi ime " << i + 1 << " student:";
cin >> studenti[i].ime;
cout << "Vnesi prezime " << i + 1 << " student:";
cin >> studenti[i].prezime;
cout << "Vnesi godini " << i + 1 << " student:";
cin >> studenti[i].godina;
cout << "Vnesi prosek " << i + 1 << " student:";
cin >> studenti[i].prosek;
}
int maxIndex = 0;
float max = 0;
for (int i = 0; i < n; i++) {
if (studenti[i].prosek > max) {
max = studenti[i].prosek;
maxIndex = i;
}
cout << endl;
}
cout << "Student so najgolem prosek e : " << endl;
cout << studenti[maxIndex].ime << " " << studenti[maxIndex].prezime << " "
<< studenti[maxIndex].godina << " " << studenti[maxIndex].prosek
<< endl;
return 0;
}

Да се состави листа на  н студенти според бројот на бодови. Студентите се внесуваат  како структура 9 име, презиме, број на бодови .
#include <iostream>
#include <string>
using namespace std;
struct student
{
 char ime[50];
 char prezime[50];
 int bodovi;
};
int main()
{
 int i,j,n;
 struct student spisok[1000];
 struct student p;
 cout << "vnesi broj na studenti" << endl;
 cin>>n;
 for(i=0;i<n;i++)
 {
 cout<<"vnesi ime, prezime i bodovi"<<endl;
 cin>>spisok[i].ime>>spisok[i].prezime>>spisok[i].bodovi;
 }
 for(i=0;i<n-1;i++)
 {
 for(j=i+1;j<n;j++)
 {
 if(spisok[i].bodovi<spisok[j].bodovi)
 {
   p=spisok[i];
   spisok[i]=spisok[j];
   spisok[j]=p;  }
  }
 }
 cout<<"podreden spisok "<<endl;
 for(i=0;i<n;i++)
 {
 cout<<spisok[i].ime<<" "<<spisok[i].prezime<<" "<<spisok[i].bodovi<<endl;
 }
 return 0;

Напиши програма во која се внесуваат податоци  : име, презиме, матичен број , просек и датум на раѓање за сите ученици во еден клас (најмногу 30). Се бара ученикот со најдобар просек, да се испишат сите податоци за истиот.

#include <iostream>
#include<string>
using namespace std;
struct datum
{
int dan;
int mesec;
int godina;
};
struct ucenik
{
char ime[15];
char prezime[15];
int maticni;
float prosek;
struct datum rodjendan;
}razred[40];   /*pole razred cii elemeni se strukturi od tip ucenik */
int main()
{
int n,i,k;
float max;
cout<<"\nBroj na ucenici? "; cin>>n;
if (n>30)
cout<<"Brojot na ucenici ne moze da bide >30";
else
{
for(i=0;i<n;i++) /*vnes na podatoci za ucenik vo poleto  razred*/
{
cout<<"\nIme: "; cin>>razred[i].ime;
cout<<"\nPrezime: "; cin>>razred[i].prezime;
cout<<"\nMaticen broj: "; cin>>razred[i].maticni;
cout<<"\nProsek: "; cin>>razred[i].prosek;
cout<<"\nDen na raganje: "; cin>>razred[i].rodjendan.dan;
cout<<"\nMesec na raganje: "; cin>>razred[i].rodjendan.mesec;
cout<<"\nGodina na raganje: "; cin>>razred[i].rodjendan.godina;
}
max=razred[0].prosek;    /*odreduvanje na najdobar prosek*/
k=0;
for(i=0;i<n;i++)
if (max<razred[i].prosek)
{
max=razred[i].prosek;
k=i;
}
/*ispis na najdobriot */
cout<<"\nNajdobar e  "<<razred[k].ime<<" " <<razred[k].prezime;
cout<<"\nMaticen broj "<<razred[k].maticni;
cout<<"\nRoden "<<razred[k].rodjendan.dan<<razred[k].rodjendan.mesec<< razred[k].rodjendan.godina;
cout<<"\nS prosek "<<razred[k].prosek;
}
return 0;
}

Програма со која ќе прикаже листа на ученици подредена според просечната оценка. Учениците се внесуваат како структура од име, презиме , оценка и просек, а оценка е структура која се состои од оценките на учениците добиени на три теста по програмски јазици.

#include <iostream>
#include <string>
using namespace std;
struct ocenka
{
 int t1;
 int t2;
 int t3;
};
struct ucenik
{
 char ime[50];
 char prezime[50];
 ocenka ocena;
 float pros;
};
int main()
{
 int i,j,n;
 struct ucenik spisok[1000];
 struct ucenik p;
 cout << "vnesi broj na ucenici" << endl;
 cin>>n;
 for(i=0;i<n;i++)
 {
     cout<<"vnesi ime, prezime i 3 ocenki"<<endl;
    cin>>spisok[i].ime>>spisok[i].prezime>>spisok[i].ocena.t1>>spisok[i].ocena.t2>>spisok[i].ocena.t3;
 spisok[i].pros=(float)(spisok[i].ocena.t1+spisok[i].ocena.t2+spisok[i].ocena.t3)/3;
 }
 for(i=0;i<n-1;i++)
 {
   for(j=i+1;j<n;j++)
   {
      if(spisok[i].pros<spisok[j].pros)
       swap(spisok[i],spisok[j]);
    }
}
 cout<<"podreden spisok "<<endl;
 for(i=0;i<n;i++)
 {
    cout<<spisok[i].ime<<" "<<spisok[i].prezime<<" "<<spisok[i].pros<<endl;
 }
 return 0;


Следнава задача (решението е со класи) реши ја со структура 
програма со која се внесуваат податоци за n ученици при што се креира класа за ученици. Класата ги содржи следниве податоци: име на ученик, презиме, четири оценки добиени на тестовите по програмски јазици. Програмата да испечати список на учениците подредени според вкупната оценка добиена на четирите теста

#include <iostream>
#include <string>
#include <limits>
using namespace std;

class ucenik{
    public:
    string name;
    int vkupno;
    
};

void sort(class ucenik a[], int n){
    
    
    for(int k = 0; k < n; k++){
        for(int i = 1; i < n; i++){
            if(a[i-1].vkupno < a[i].vkupno){
                swap(a[i-1], a[i]);
            }
        }
    }
}

void print(class ucenik a[50], int n){
    for(int i = 0; i < n; i++){
        cout<<a[i].name<<"  "<<a[i].vkupno<<endl;
    }
}

int main()
{
    class ucenik a[50];
    int n = 3;
    cout<<"Vnesi broj na ucenici: ";
    cin>>n;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    int ocenka;
    for(int i = 0; i < n; i++){
        cout<<"Vnesi ime i prezime: ";
        
        getline(cin, a[i].name);
        
    for(int j = 0; j < 4; j++){
        cout<<"Vnesi ocenka: ";
        cin>>ocenka;
        
        a[i].vkupno += ocenka;
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    }
    
    sort(a, n);
    print(a, n);
     return 0;
}

Структурата studenti ги содржи следните податоци: prezime, ime, broj_indeks и mesto на живеење.
Напиши програма који внесува податоци за n студенти (n<100), ги сортира по  prezime и ја печати сортираната низа .

strcmp  function is used to compare the string arguments.
It compares strings lexicographically which means it compares both the strings character by character. 
It starts comparing the very first character of strings until the characters of both strings are equal or NULL character is found
The return value from strcmp is 0 if the two strings are equal, less than 0 if str1 compares less than str2 , and greater than 0 if str1 compares greater than str2 .


/*Структурата studenti ги содржи 
следните податоци: prezime, ime, broj_indeks и mesto на живеење.
Напиши програма који внесува податоци за n студенти (n<100), 
ги по prezime и ја печати сортираната низа .*/

#include <iostream>
#include <string>
#include <limits>
using namespace std;

struct studenti{
    string prezime;
    string ime;
    int broj_indeks;
    string mesto_na_ziveenje;
};

int main()
{
    int n;
    cout << "Vnesi broj na studenti ";
    cin >> n;
    studenti student[n];
    int i;
    
    
    for (i = 0; i < n; i++) {
    cout << "Vnesi ime " << i + 1 << " student:";
    cin >> student[i].ime;
    cout << "Vnesi prezime " << i + 1 << " student:";
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin >> student[i].prezime;
    cout << "Vnesi broj na indeks " << i + 1 << " student:";
    cin >> student[i].broj_indeks;
    cout << "Vnesi mesto na ziveenje " << i + 1 << " student:";
    cin>>student[i].mesto_na_ziveenje;
    }
    
    for(int j = 0; j < n; j++){
        for(i = 0; i < n-1; i++){
            if(student[i].prezime[0] > student[i+1].prezime[0]){
            swap(student[i].ime, student[i+1].ime);
            swap(student[i].prezime, student[i+1].prezime);
            swap(student[i].broj_indeks, student[i+1].broj_indeks);
            swap(student[i].mesto_na_ziveenje, student[i+1].mesto_na_ziveenje);
            }
        }
    }
    
    
    
    for (int i = 0; i < n; i++) {
    cout<<student[i].ime<<" "<<student[i].prezime<<endl;
    }


    return 0;
}


#include<bits/stdc++.h>
#include <iostream>

using namespace std;


struct Ucenik{
    string ime;
    string prezime;
    int br_idx;
    string mesto_ziveenje;
};

bool comparator(string a,string b)
{
    return a<b;
}


int main()
{
    int n;
    cin>>n;
    
    string ime1, prezime1, mesto;
    int br_idx1;
    string arr[50];
    
    for(int i=0; i<n; i++)
    {
        Ucenik k;
        cout<<"Vnesi info za ucenikot:"<<endl;
        cin>>ime1;
        k.ime = ime1;
        cin>>prezime1;
        k.prezime = prezime1;
        cin>>mesto;
        k.mesto_ziveenje = mesto;
        cin>>br_idx1;
        k.br_idx = br_idx1;
        arr[i] = k.prezime;
    }
    
    
    sort(arr,arr+n,comparator);
    for(int i=0;i<n;i++)
    {
        cout<<arr[i]<<" ";
    }
    

    return 0;
}

ПРАШАЊА:

1.Which of the following accesses a variable in structure b?
A. b->var;
B. b.var;
C. b-var;
D. b>var;

2. Which of the following accesses a variable in structure *b?
A. b->var;
B. b.var;
C. b-var;
D. b>var;

3. Which of the following is a properly defined struct?
A. struct {int a;}
B. struct a_struct {int a;}
C. struct a_struct int a;
D. struct a_struct {int a;};

4. Which properly declares a variable of struct foo?
A. struct foo;
B. foo var;
C. foo;
D. int foo;

1. Can a Structure contain pointer to itself?

(A)Yes
(B) No
(C) Compilation Error
(D) Runtime Error

2. The data elements in structure are also known as ?

(A) data
(B) members
(C) objects
(D) none of these

3. Can we declare structure inside structure?

(А) Yes (B) No

4. A struct can contain members of various data types

(A) TRUE (B) FALSE

5. Which of the following statements assigns a value to the hourlyWage member of employee[2]?

(A)employee[2]->hourlyWage = 50.00;
(B) employee2.hourlyWage = 7.50;
(C) hourlyWage[2].employee = 29.75;
(D) employee[2].hourlyWage = 75.00;

6. Which of the following statements outputs the value of the gpa member of element 1 of the student array?

(A) cout<<student1.gpa;
(B) cout<<firstStudent.gpa;
(C) cout<<student[1].gpa;
(D) cout<<student1 ->gpa;

7. In the following structure declaration, idNum is:
Struct Employee
{ String name;
int idNum;
};

(A) a member
(B) an array
(C) a tag
(D) None of these

8. What is Self Referencial Structure?

(A) Structure which contains pointers
(B) Structure which has pointer to itself
(C) Structure which contains another structure
(D) None of these

9. What is the output of this C code?

int main()
{struct student
{
int no;
char name[20];
};
struct student s;
s.no = 8;
cout<< s.no;
}

10.Which keyword is used for structure definition?

11.Which operator connects the structure name to its member name?
а) -
b) =
c) .
d) >>

No comments: