русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Программа: Использование и обработка динамических списков на языке С++

Задание

Для сведения составить программу построения графику изменения зарплаты работников по каждому дню.

Выбор алгоритма решения задачи

Выбор алгоритма решения задачи был аналогичен предыдущей программе -> см. здесь.

Схема алгоритма решения задачи

Основная программа

Функция del

Функция SRAND

Функция name

Функция add

Функции view и graf см. здесь ->>

 

Описание программы

Функция add

Эта функция заполняет массив структур (размер массива отмечается в константе), заполнение происходит автоматически с помощью произвольных чисел и имен, пользователь не берет ни которой участия в заполнении.

Функции view и graf см. здесь ->>

Функция del

Эта функция удаляет весь список с помощью поочередного удаления каждого элемента.

 

Текст программы

stdafx.h

#include <stdio.h>
#include <iostream>
#include <conio.h>

using namespace std;

const int ch=8;

struct A                 //структура рабочего
{
A *prev;                               //указатель на предыдущий
int no;
char fio[9];
char pro[9];
struct B
{
int ch,zar;
}B[5];
A *next;                //указатель на следующий
};
//прототипы функций
int SRAND();
int name(int y);
A *add(int n, A *first);
void view(int n, A *first);
void graf(int n, A *first);
void del(A *first);

Func.cpp

#include "stdafx.h" //подключение файла stdafx.h

int SRAND()         // функция случайное число в диапазоне от 0 .. 1000
{
int i=0;
cout<<"Press any key to start...";
while (!kbhit())     //если клавиша не нажата
{
if (i>1000)
i=0;
i++;
}
cout<<endl;
return(i);    //возвращение полученного числа
}

int name(int y)     //функция получение буквы
{
int x,m[26];
for (x=0;x<26;x++)
m[x]=x+65;
return (m[y]);
}

A *add(int n, A *first)       //функция добавление списка и заполнение случайным числом.
{
A *p, *temp=0;
int x,y,z,s,numb;
char nam[9];
srand(SRAND());   //функция для хаотичного случайного числа
p=new A;           //выделение памяти под список
for (x=0;x<n;x++)   //цикл добавления
{
if (x==0)    //если список первый
first=p;    //указатель на первый элемент
else p->prev->next=p;

                               p->prev=temp;  //указатель на предыдущий
temp=p;
p->no=x+1;
for (s=0;s<8;s++)   
{
p->fio[s]=name(rand()%26); //случайное заполнение фамилии из 8 букв
p->pro[s]=name(rand()%26); //случайное заполнение профессии из 8 букв
}
p->fio[s]='\0';  //присвоение конца строки
p->pro[s]='\0';  //присвоение конца строки
for (y=0;y<5;y++)
{                                            
p->B[y].ch=rand()%(ch+1);
p->B[y].zar=p->B[y].ch*56;
}
if(x!=n-1)   //если список не последний
{
p->next=new A;
p=p->next;
}
else p->next=0;  //иначе он последний.  Указатель на следующий принимает значение 0
}
return first;    //возврат указателя на первый элемент
}

void view(int n, A *first)       //вывод таблицы работников
{
A *p;
if(n>0)
{
int x,y;
printf(" ----------------------------------------------------------------------------\n");
printf("|   |           |          |   Mo    |   Tu    |   We    |   Th    |   Fr    |\n");
printf("| # |     FIO   |Profession| Ch|  $  | Ch|  $  | Ch|  $  | Ch|  $  | Ch|  $  |\n");
printf("|---|-----------|----------|---------|---------|---------|---------|---------|\n");
for(x=0;x<n;x++)
{
p=first;
printf("|%2d | %9s | %8s |",p->no,p->fio,p->pro);
for (y=0;y<5;y++)
printf("%2d |%4d |",p->B[y].ch,p->B[y].zar);
cout<<endl;
first=p->next;
}
printf(" ----------------------------------------------------------------------------\n\n");
}
else
cout<<"Ne zadano kolichestvo rabochih\n";
}

void graf(int n, A *first)                    //функция построения графика
{
A *p, *temp;
int x,y,a,b,k=1,max=0,s[5];
if(n>0)
{
for (y=0;y<5;y++)
{
temp=first;
s[y]=0;
for (x=0;x<n;x++)
{
p=temp;
s[y]=s[y]+p->B[y].zar;   // Нахождение суммы зарплаты за неделю
temp=p->next;
}
}
for (y=0;y<5;y++)
{
if (max<s[y])      // Нахождение наибольшей зарплаты за неделю
max=s[y];
}
while (max>20)    // Нахождение делителя для получения числа меньше 20
{
max=max/2;
k=k*2;
}
for (y=0;y<5;y++)
s[y]=s[y]/k;   // Пропорциональное деление зарплаты всех работников
b=max;
for (a=0;a<b;a++)       
{
printf("%3d| ",a+1);
for (y=0;y<5;y++)
{
if (s[y]<max)    //если зарплата работника меньше максимальной
cout<<"              ";  // Вывод если меньше от максимальной
else
cout<<"************* ";  // Вывод если больше от максимальной
}
cout<<endl;
max--;   // Уменьшение максимального значения
}
cout<<" ----------------------------------------------------------------------------->\n   ";
for (y=1;y<6;y++)
{
cout<<"   "<<y<<"-iu";
cout<<" - Den'";
}
}
else
cout<<"Ne zadano kolichestvo rabochih\n";
}

void del(A *first)    //функция удаления списка
{
A *p, *temp;
for(p=first, temp=p->next; temp; p=temp, temp=p->next)   //пока не конец списка
delete p;                                                                                        //удаление текущего списка
}

 

Laba5.cpp

#include "stdafx.h"                            //подключение файла stdafx.h

void main(void)
{
A *first=0;
int n;
cout<<"Vvedite kolichestvo robochih ";
cin>>n;
first=add(n, first);   //функция заполнения структуры
getch();
view(n, first);         //функция вывода таблицы на экран    
cout<<"Press any key to continue...\n\n";
getch();
graf(n, first);          // функция рисования графику
del(first);              // функция удаления списка
getch();
}

 

Результат работы программы

Просмотров: 11996

Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.