Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Доступ по указателю

Читайте также:
  1. I) обеспечения того, чтобы процедуры, помещения и материалы для голосования были подходящими, доступными и легкими для понимания и использования;
  2. Дайте понятие несанкционированного доступа (НД) к информации. Перечислите более распространенные пути НД к информации.
  3. Для обработки запросов от всех рабочих станций сети и предоставления этим станциям доступа к общим системным ресурсам
  4. Доступ для широкого загалу користувачів
  5. Доступ до довідкового та інформаційного сервісу
  6. Доступ до інформації через мережу Інтернет.
  7. Доступ до правової інформації
  8. Доступ до СУБД через Web-сервер
  9. Доступ к данным. Запросы, отчеты. (БД Контроль исполнения) СУБД Access
  10. Доступ к полям

1) (date1+5)->day=10;

2) (stud+3)->birthday.month=1;

// Используя доступ по указателю на структуру, присваиваем значение соответствующей переменной. Указатель можно использовать и так:

3) (*(date1+5)).day=10;

4) (*(stud+3)).birthday.month=1;

Инициализация структур. При определении структурных переменных можно инициализировать их поля. Эта возможность подобна инициализации массива и следует тем же правилами:

имя_шаблона имя_переменной_структуры = {значение1, значение2, …};

Компилятор присваивает значение1 первой переменной в структуре, значение2 – второй переменной структуры и т.д., и тут необходимо следовать некоторым правилам:

- присваиваемые значения должны совпадать по типу с соответствующими полями структуры;

- можно объявлять меньшее количество присваиваемых значений, чем количество полей. Компилятор присвоит нули остальными полями структуры;

- список инициализации последовательно присваивает значения полям структуры, вложенных структур и массивов.

Пример:

struct date

{ int day,month,year; }d[5] = { {1,3,1980}, {5,1,1990}, {1,1,1983} };

Копирование структур-переменных. Язык С(С++) позволяет оператору присваивания копировать значения одной структуры-переменной в другую переменную, при условии, что обе структуры-переменные относятся к одному и тому же типу. Таким образом, единственный оператор может скопировать несколько членов данных, которые включают массивы и вложенные структуры.

Однако следует учитывать, что оператор присваивания выполняет то, что называется поверхностной копией в применении к структурам-переменным. Поверхностная копия представляет собой копирование бит за битом значений полей переменной-источника в соответствующие поля переменной-цели. При этом может возникнуть проблема с такими членами данных, как указатели, поэтому использовать поверхностное копирование структур надо осторожно.

Пример 1: Создать массив структур о студентах группы. О каждом студенте записать: имя, фамилию, год рождения, оценки по пяти экзаменам. Определить средний балл за сессию и отсортировать список по сумме баллов.

#include "stdafx.h"

#include<stdio.h>

#include<conio.h>

 

struct student

{ char name[20];

char fam[30];

int year;

int mark[5];

int average;

};

 

struct student students[30];

struct student buffer;

int records;

int i, j;

int main()

{

records=0;

do

{

printf("Student №%d\n", records+1);

puts("Vvedite familiu: ");

fflush(stdin);

gets(students[records].fam);

puts("Vvedite imya: ");

fflush(stdin);

gets(students[records].name);

puts("Vvedite vozrast: ");

scanf("%d", &students[records].year);

for(i=0; i<5; i++)

{ printf("Vvedite ocenku po ekzamenu №%d ", i+1);

scanf("%d", &students[records].mark[i]);

}

records++;

puts("Prekratit' rabotu? (1/0)");

scanf("%d", &i);

} while(i);

 

for (i=0; i<records; i++)

{ students[i].average=0;

for (j=0; j<5; j++)

students[i].average+=students[i].mark[j];

}

 

for (i=0; i<records-1; i++)

for (j=i; j<records; j++)

if (students[i].average>students[j].average)

{ buffer=students[i];

students[i]=students[j];

students[j]=buffer;

}

 

for (i=0; i<records; i++)

{

printf("Student %s %s ", students[i].name, students[i].fam);

printf(" Vosrast %d ", students[i].year);

printf(" Sr. ball %d \n", students[i].average);

}

getch();

return 0;

}

 

Пример 2: Ввести массив структур. Рассортировать массив в алфавитном порядке фамилий, входящих в структуру, перемещая сами структуры.

#include "stdafx.h"

#include<stdio.h>

#include<conio.h>

#include<string.h>

 

struct st

{ char name[80];

int age; не придирайся

};

 

int _tmain(int argc, _TCHAR* argv[])

{

int i,j,k;

struct st m[100], t;

printf("Vvedite kol-vo studentov: ");

scanf("%d", &k);

for (i=0; i<k; i++)

{ puts("Vvedite imya studenta: ");

fflush(stdin);

gets(m[i].name);

puts("Vvedite vozrast: ");

scanf("%d", &m[i].age);

}

for (i=0; i<k-1; i++)

for (j=i+1; j<k; j++)

if (strcmp(m[i].name, m[j].name)>0)

{ t=m[i]; m[i]=m[j]; m[j]=t; }

printf("\n\nRezultat: ");

for (i=0; i<k; i++)

{

printf("\n\n");

puts(m[i].name);

printf("%d years ", m[i].age);

}

getch();

return 0;

}

Пример 3: Определить структурированный тип, набор функций (в виде меню) для работы с массивом структур. Структура «Склад»: наименование, единица измерения, цена единицы, количество, дата последнего прихода/расхода, тип накладной (приход или отгрузка).

В перечень обязательных функций входят:

- ввод элементов (полей) структуры с клавиатуры;

- вывод элементов (полей) структуры;

- поиск в массиве структуры с заданным значением поля;

- удаление заданного элемента;

- изменение (редактирование) заданного элемента.

Интерфейс пользователя осуществить в виде командного процессора:

1 - загрузить данные

2 - вывести на экран......

#include <iostream>

#include <stdio.h>

#include <string.h>

#include <windows.h>

using namespace std;

 

struct sklad //объявляем шаблон структуры

{char name[30]; //Наименование

char ed[5]; //Единица измерения

float cena; //Цена

int kol; //Количество

int date; //Дата последнего завоза

int type; //тип накладной (приход или отгрузка)

};

 

struct sklad mas[30]; //объвляем глобальный массив структур

struct sklad tmp; //объявляем временую переменную структурного типа

int sch=0; //Счетчик полных записей

int er; //Переключатель

 

void enter_new();

int menu();

void out();

void del();

void change();

void find();

 

int main()

{

setlocale(LC_ALL,"Russian");

while(1)

{ switch(menu())

{ case 1:del();break;

case 2:enter_new();break;

case 3:change();break;

case 4:out();break;

case 5:find();break;

case 6: return 0;

default: cout<<"Не верный выбор/n";

}

}

}

 

void enter_new() // ф-ция ввода новой структуры

{

if(sch<30) //вводим новую запись только, если счетчик полных записей меньше максимального количества записей

{

cout<<"Запись номер"<<sch+1; //выводим номер записи

cout<<"\nВыберите тип накладной (1 - приход, 2 - отгрузка)\n";

cin>>mas[sch].type;

cout<<"\nВведите наименование\n";

cin>>mas[sch].name;

cout<<"Введите ед.измерения \n";

cin>>mas[sch].ed;

cout<<"Введите цену\n";

cin>>mas[sch].cena;

cout<<"Введите кол-во\n";

cin>>mas[sch].kol;

cout<<"Введите дату последнего поступления\n";

cin>>mas[sch].date;

sch++; //увеличиваем счетчик полных записей на единицу

}

else cout<<"Введено максимальное кол-во записей";

}

 

 

int menu()

{

int er;

cout<<"Введите:\n";

cout<<"1-для удаления записи\n";

cout<<"2-для ввода новой записи\n";

cout<<"3-для изменения записи\n";

cout<<"4-для вывода записи(ей)\n";

cout<<"5-для поиска \n";

cout<<"6-для выхода\n";

cin>>er;

return er;

}

 

void out() //ф-ция вывода записей

{

int sw; // переключатель для выбора выводить все записи или одну

int k; //номер структуры, кот. надо вывести

if (sch==0) //если счетсик количества структур равен 0, то выводим, что нет записей

cout<<"\nНет запичей: \n";

else

{

cout<<"\nВведите: \n";

cout<<"1-если хотите вывести какую-либо запсь\n";

cout<<"2-если хотите вывести все записи\n";

cin>>sw;

if(sw==1)

{

cout<<"Введите номер записи, которую нужно вывести\n";

cin>>k;

cout<<endl;

if (mas[k-1].type==1)

cout<<"Приход"<<endl;

else

cout<<"Отгрузка"<<endl;

cout<<"Наименование:"<<mas[k-1].name<<endl;

cout<<"Ед.измер.:"<<mas[k-1].ed<<endl;

cout<<"Цена:"<<mas[k-1].cena<<endl;

cout<<"Кол-во:"<<mas[k-1].kol<<endl;

cout<<"Дата:"<<mas[k-1].date<<endl;

cout<<"____________"<<endl;

 

}

if(sw==2)

{ for(int i=0;i<sch;i++) //выводим в цикле все записи

{if (mas[i].type==1)

cout<<"Приход"<<endl;

else

cout<<"Отгрузка"<<endl;

cout<<"Наименование:"<<mas[i].name<<endl;//выводим на экран значение name i-ой структуры из массива структур mas

cout<<"Ед.измер.:"<<mas[i].ed<<endl;

cout<<"Цена:"<<mas[i].cena<<endl;

cout<<"Кол-во:"<<mas[i].kol<<endl;

cout<<"Дата:"<<mas[i].date<<endl;

cout<<"____________"<<endl;

}

}

}

}

 

void del() //ф-ция удаления записи

{ int d; //номер записи, которую нужно удалить

cout<<"\nВведите номер записи, которую необходимо удалить\n";

cout<<"Если необходимо удалить все записи,нажмите '99'\n";

cin>>d;

if (d!=99)

{ for (int i=(d-1);i<sch;i++) //цикл для удаления заданной записи, начинаем цикл с удаляемой записи

mas[i]=mas[i+1]; //замещаем текущую запись следующей за ней

sch=sch-1; //уменяьшаем счетчик полных записей на 1

}

if (d==99)

{ for(int i=0;i<30;i++)//цикл по все записям от первой до 30-ой

mas[i]=tmp; //замещаем каждую структуру в массиве пустой структурой

sch=0; //счетчик структур обнуляем, т.к. все записи удалены

}

}

 

void change() //функция для изменения записи

{ int c; //номер записи, которую нужно изменить

int per;

cout<<"\nВведите номер записи\n";

cin>> c;

do

{cout<<"Введите: \n";

cout<<"1-для изменения типа накладной\n";

cout<<"2-для изменения наименования\n";

cout<<"3-для изменения ед.измерения\n";

cout<<"4-для изменения цены\n";

cout<<"5-для изменения количества\n";

cout<<"6-для изменения даты\n";

cout<<"7-для прекращения\n";

cin>>per;

switch (per)

{ case 1: cout<<"\nВведите новый тип накладной (1 - приход, 2 - отгрузка)\n";

cin>>mas[c-1].type;

break;

case 2:

cout<<"\nВведите новое наименование\n";

cin>>mas[c-1].name;

break;

case 3:

cout<<"Введите новые ед.измерения \n";

cin>>mas[c-1].ed;

break;

case 4:

cout<<"Введите новую цену\n";

cin>>mas[c-1].cena;

break;

case 5:

cout<<"Введите новое кол-во\n";

cin>>mas[c-1].kol;

break;

case 6:

cout<<"Введите новую дату последнего поступления\n";

cin>>mas[c-1].date;

break;

case 7: return;

}

 

}while(1);

 

}

 

void find() //ф-ция поиска записей

{

int sw; // переключатель

if (sch==0)

cout<<"\nНет запичей: \n";

else

{

cout<<"\nВведите: \n";

cout<<"1-все накладные прихода\n";

cout<<"2-все накладные отгрузки\n";

cin>>sw;

for(int i=0;i<sch;i++) //в цикле просматриваем все структуры из массива структур

if (mas[i].type==sw)

{

if (mas[i].type==1)

cout<<"Приход"<<endl;

else

cout<<"Отгрузка"<<endl;

cout<<"Наименование:"<<mas[i].name<<endl;

cout<<"Ед.измер.:"<<mas[i].ed<<endl;

cout<<"Цена:"<<mas[i].cena<<endl;

cout<<"Кол-во:"<<mas[i].kol<<endl;

cout<<"Дата:"<<mas[i].date<<endl;

cout<<"____________"<<endl;

}

}

}




Дата добавления: 2015-04-20; просмотров: 20 | Поможем написать вашу работу | Нарушение авторских прав

1 | <== 2 ==> |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.037 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав