Решение лабораторных, контрольных и т.д. на С++

  • Автор темы Автор темы European
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
код:
Код:
#include <cstdlib>
#include <iostream>

typedef struct tree{ // обьявляем тип
char data[10]; //дата изьятия в формате xx.xx.xxxx
char naimenovanie[50]; // наименование предмета
int izyatiya; // кол-во изъятых едениц, по кол-ву изьятий будем составлять дерево
int stoimost; // обьявленная стоимость предмета
struct tree *L; // указатель на левый лист
struct tree *R; // указатель на правый лист
struct tree *parent; // указатель на родителя листа
}TREE; // навание типа - TREE

TREE *root=NULL; // задаём глобальные указатели, root- корень дерева, и дополнительные указатели.

int Delete(TREE *s)/*Функция удаления узла из дерева*/
{
TREE *tmp;
printf("OLD:\n");
printf("Delete: s adr= %d;\n",s);
printf("Delete: s parent adr= %d;\n",s->parent);
printf("Delete: s->R adr= %d;\n",s->R);
printf("Delete: s->L adr= %d;\n",s->L);
if( (s->R!=NULL || s->L!=NULL) && s->parent!=NULL )
{
if(s->L==NULL && s->R==NULL)
{
if(s==s->parent->R)
s->parent->R=NULL;
else
s->parent->L=NULL;
s=NULL;			
}
else if(s->L==NULL && s->R!=NULL)
{
s->R->parent=s->parent;
s->parent=s->R;
s=NULL;			
}
else if(s->L!=NULL && s->R==NULL)
{
s->L->parent=s->parent;
s->parent=s->L;
s=NULL;
}
else if(s->L!=NULL && s->R!=NULL)
{
s->R->parent=s->parent;
tmp=s->R;
while(tmp->L!=NULL)
tmp=tmp->L;
tmp->L=s->L;
s->L->parent=tmp;
s=NULL;
}
}
else
{
if(s->L==NULL && s->R==NULL)
{
s=NULL;
}
else if(s->L!=NULL && s->R==NULL)
{
s->L->parent=NULL;
root=s->L;
s=NULL;
}
else if(s->L==NULL && s->R!=NULL)
{
s->R->parent=NULL;
root=s->R;
s=NULL;
}
else if(s->L!=NULL && s->R!=NULL)
{
s->R->parent=NULL;
root=s->R;
tmp=s->R;
while(tmp->L!=NULL)
tmp=tmp->L;
tmp->L=s->L;
s->L->parent=tmp;
s=NULL;
}
}
printf("NEW:\n");
printf("Delete: s adr= %d;\n",s);
}

int ReturnMax(TREE *s)/*Функция печати максимального элемента дерева*/
{
while(s->R!=NULL )
{
s=s->R;
}
return s->izyatiya;
}

int ReturnMin(TREE *s)/*Функция печати минимпльного элемента*/
{
while(s->L!=NULL)
{
s=s->L;
}
return s->izyatiya;
}

void Insert(TREE *s, int &iz, int &stoim, char dat[], char naim[])
{
TREE *temp,*tmp; 
int i=0;
if(s!=NULL) // если звено дерева существует - находим место куда положить новый элемент, сравнивая его с текущими пробираясь по звеньям дерева
{
if(iz < s->izyatiya)
{
if(s->L!=NULL)
Insert(s->L,iz,stoim,dat,naim);
else
{
temp=s;
s->L=new TREE;
if(s->L!=NULL)
{
s=s->L;
s->L=NULL;
s->R=NULL;
s->parent=temp;
s->izyatiya=iz;
s->stoimost=stoim;
i=0;
do
{
s->naimenovanie[i]=naim[i];
i++;
} 
while(naim[i]!='\0');
i=0;
do
{
s->data[i]=dat[i];
i++;
} 
while(dat[i]!='\0');
}
else // если не хватает памяти - выводим сообщение
printf( "ЌҐ ¤®бв в®з­® ®ЇҐа вЁў­®© Ї ¬пвЁ!.\n" );
}
}
else
if(iz > s->izyatiya)
{
if(s->R!=NULL)
Insert( s->R,iz,stoim,dat,naim);
else
{
temp=s;
s->R=new TREE;
if(s->R!=NULL)
{
s=s->R;
s->L=NULL;
s->R=NULL;
s->parent=temp;
s->izyatiya=iz;
s->stoimost=stoim;
i=0;					 
do
{
s->naimenovanie[i]=naim[i];
i++;
} 
while(naim[i]!='\0');
i=0;
do
{
s->data[i]=dat[i];
i++;
} 
while(dat[i]!='\0');					
}
else // если не хватает памяти - выводим сообщение
printf( "ЌҐ ¤®бв в®з­® ®ЇҐа вЁў­®© Ї ¬пвЁ!.\n" );
}
}
}
}
void Print( TREE *s )/*Функция печати элементов дерева*/
{
if(s!=NULL)
{
if(s->L!=NULL)
Print(s->L);
//printf("Naimenovanie tovara: %s;\n", s->naimenovanie);
//printf("Data: %s;\n", s->data);
printf("-------begin--------\n");
printf("Izuatiya: %d;\n", s->izyatiya );
printf("s adr= %d;\n",s);
printf("s parent adr= %d;\n",s->parent);
printf("s->R adr= %d;\n",s->R);
printf("s->L adr= %d;\n",s->L);		
printf("--------end-------\n");		
//printf("Stoimost: %d;\n", s->stoimost);
if(s->R!=NULL)
Print(s->R);
}
else
{
printf( "Tree is empty...\n" );
system("PAUSE");
}
}

TREE *Search( TREE *koren, int element )/* рекурсивная функция поиска узла по значению*/
{
if (koren==NULL) return NULL;
else if (koren->izyatiya==element){ printf("Search adr =%d\n;",koren); return koren;}
else if (element < koren->izyatiya) return Search(koren->L, element);
else return Search(koren->R, element);
}


int main()
{
TREE *temp;
int choice = 0, item;
int iz, stoim;
char dat[10], naim[50];
while( choice != 7 ){
printf( "\n1 to insert new element\n2 to print the tree\n3 to delete element"
"\n4 to find the element\n5 to find max element\n6 to find min element\n7 for exit\nEnter your choice...\n" );
scanf( "%d", &choice );
switch( choice ){
case 1:
if(root==NULL) // если дерева не существует - создаём его корень
{
root=new TREE;
root->L = NULL;
root->R = NULL;
root->parent = NULL;
printf( "Enter iz...\n" );
scanf( "%d", &root->izyatiya); 			
//printf( "Enter stoim...\n" );
//scanf( "%d", &root->stoimost); 			
//printf( "Enter data...\n" );
//scanf( "%s", &root->data ); 			
//printf( "Enter naim...\n" );
//scanf( "%s", &root->naimenovanie);				
}	 
else // если дерево уже существует, то добавляем новые элементы посредством функции
{
printf( "Enter iz...\n" );
scanf( "%d", &iz ); 			
//printf( "Enter stoim...\n" );
//scanf( "%d", &stoim ); 			
//printf( "Enter data...\n" );
//scanf( "%s", &dat ); 			
//printf( "Enter naim...\n" );
//scanf( "%s", &naim ); 
Insert(root,iz,stoim,dat,naim);
}
break;
case 2:
Print(root);
break;
case 3:
printf( "Enter te item...\n" );
scanf( "%d", &item );
Delete(Search(root,item));
break;
case 4:
printf( "Enter the item you want to find...\n" );
scanf( "%d", &item );
if((temp=Search(root,item))!=NULL)
printf("%d",temp->izyatiya);
else
{
printf( "No such element...\n" );
system("PAUSE");
}
break;
case 5:
printf("%d",ReturnMax(root));
break;
case 6:
printf("%d",ReturnMin(root));
break;
case 7:
break;
default:
printf("Wrong key. Try again...\n");
system("PAUSE");
break;
}
}
return 0;
}
задача:
создание дерева, добавление в него листов удаление листа дерева, на лишние записи в структуре и в коде, не относящееся к дереву просьба внимания не обращать.
проблема:
при удалении листа сначала находится адрес удаляемого листа функцией поиска search, которая возвращает указатель на удаляемый лист, затем функция Delete в зависимости от случая обрубает указатели на удаляемый лист, и связывает оставшиеся после удаления листы в зависимости от случая.
-> функция delete выполняется, по завершении выполнения выводится результат что адрес удалённого листа = 0, тобиш он якобы удалён, но после удаления выведя дерево на экран функцией Print дерево целёхонько. я вот непойму, там вроде не создаётся дубликата передаваемого указателя *s в Delete, но получается так что удаляется всё локально, только в функции...
подпроблема:
не могу освободить память выделенную new с помощью операции delete, причём new было использовано в функции создания листа дерева, а delete в функции удаления, но delete действия производит но результат нулевой - после неё всё на прежднем месте - и адрес указателя и адреса переменных, выделенные new.
 
по-моему удаление ветки дерева это удаление и всех его подветок, т.е. вызов ф-ции удаления для левой и правой ветки если они есть.
 
Куплю курсач по Visual С++

Здароф программеры,
обращаюсь с просьбой помоч в написании курсового проекта. Все подробности в зааттаченом файле. Кто заинтересовался пишите на lemiradon@gmail.com. Расчет Яндекс или Вэб мани...
 

Вложения

Драсте! Написал лабу "Работа с файлами последовательного доступа" но тут такая беда ... прога вроде работает но мне нужны дробные значения вместо целых и при делении естесно она округляет ... при попытке изменить на любой другой тип данных double,float... и естесно в сканфах\принтфах %f... выдает ошибку: Scanf : floating point formats not linked ... и все тут ...

Помогите , подскажите что я упустил иль где я протупил ... зарание благодарен! ...

Чем быстрее тем лутьше ...

ICQ 397-467-902 (всегда он-лайн)

Код:
#include<stdio.h>
#define N 25
struct tab_vivod {
char rayon[15];
int g_1940;
int g_1958; };

main() {
int i;
struct tab_vivod t[N];
int k=0;
char fname[13];
FILE *fptr;
clrscr();

printf("Input file name\n ");
scanf("%s",&fname);

if((fptr=fopen(fname,"r"))==NULL){
printf("File could not be opened!");
}

else{
printf("\n|===Rayon====|===1940g===|===1958g===|\n");
while(!feof(fptr)){
k++;
fscanf(fptr,"%s%d%d",t[k].rayon,&t[k].g_1940,&t[k].g_1958);
printf("|%-12s|%11d|%11d|\n",t[k].rayon,t[k].g_1940,t[k].g_1958);
}
fclose(fptr);

printf("\n|===Rayon====|==Prirost==|\n");
for(i=0;i<k;i++){
if(t[i].g_1940<t[i].g_1958)
printf("|%-12s|%10.2f%|\n",t[i].rayon,(float)(t[i].g_1958/t[i].g_1940));
}

}
getch();
}
Вот файл ...
Код:
Piv_kavkaz	23 250
Ukrane		15 120
Azerbaydjan  21 111
Centr_Aziya  25 444
Sibir		 45 250

компилер Toorbo C 3.0 допатопный =))
 
кинь файл с которым работаешь, ато самому создавать влом
 
Здравтвуйте!

Вот такой вот у меня задачка с виду мелоч /но для чайника - /

Заранее СПАСИБО!

P=√x+√(√x) +√(√x) +√(√x) +⋯

До P=0.0002 и каком шаге.
 
Для: Bolat_kz
Для вычисления корней используется функция pow
 
Помогите, дали задание, а С я не знаю.

Задание. Рассчитать интеграл функции четырьмя способами:
1. Метод левого прямоугольника.
2. Метод серединного прямоугольника
3. Метод правого прямоугольника
4. Метод трапеции
Найти среднеарифметическое значение интеграла на основе полученных значений. Найти максимальную погрешность методов относительно среднеарифметического значения.

Рекомендации:
1) использовать тип данных double;
2) шаг аппроксимации лучше всего выбирать 0.001 или 0.0001;
3) значения всех вариантов расчета интеграла поместить в массив.
Рассчитать интеграл функции на указанном интервале в соответствии с приведенными ниже вариантами заданий.

f(x)=ctg(2x)/2 на интервале от 0.1 до 0.2.
 
Вот токая вот задачка!

zadacha.JPG
 
Вот условие...
1. Составное число называется числом Смита, если сумма его цифр равна сумме цифр всех чисел, образующих разложение исходного числа на простые множители. Например, составное число 9355 является числом Смита, так как сумма его цифр (9+3+5+5=22) равна сумме цифр (5+1+8+7+1=22) его простых множителей (9355=5*1871).
Число Смита называется супер числом Смита, если сумма его цифр является числом Смита. Пример супер числа Смита: 778.
1. Найти число Смита с номером N.
2. Найти супер число Смита с номером N.
3. Найти супер число Смита с номером N, являющееся полным квадратом.
Число называется полным квадратом, если корень квадратный из него является простым числом. Например, число 121 полный квадрат, так как квадратный корень из 121=11.
Все числа меньше 650009.
Прочитала раз 10...не поняла...может торможу..но не понимаю... :D
 
Вот собсно задание:

Написать SDI-программу, которая позволяет в главном окне программы при нажатии левой клавиши мышки нарисовать прямоугольник в месте нажатия. Длина, ширина и цвет закраски генерируются случайным образом. Программа должна сохранять и восстанавливать изображение последних 10 прямоугольников. Написать соответствующий класс и использовать Serialize().

не могу сохранить эти прямоугольники с помощью Serialize(). помогите! :) :) :o
 
Для: Forest
В MSDN есть подробная инструкция что и куда вписывать чтобы класс был сериализуемым:
 
Здравствуйте! Мне задано решить 2 задачи на С++, но я его не совсем хорошо понимаю. Кто может помогите решить их:
Задача 1: Определить вид треугольника по трем сторонам. Значения сторон a, b и c ввести с клавиатуры.
Ограничения: -1000 < a,b,c < 1000
Задача 2: Задать случайным образом четырехзначное число а. Определить, есть ли в нем повторяющиеся цифры.
Пример: ЭВМ загадала а = 5473. Ответ: No. ЭВМ загадала а = 1716. Ответ: Yes.
За раннее благодарен!!!
 
Пытаюсь составить програмку с одной функцией но ничего не выходит,
буксую на этих функциях уже третий день.Составте пожалуйста код
програмки .
1.Ввести сумму.
2.Ввести процент.
3.Ввести количество месяцев.
Программа вычисляет проценты из суммы по формуле " сумма / 100 * % "
это вычисляется в основной части , а в функции нужно к ведённой
сумме прибавить результат вычесленный по формуле и затем
полученную сумму разделить на количество месяцев.
На экран выводятся проценты и сумма посколько нужно будет платить в
месяц.
 
у меня вопрос как решить этим методом сисетму диффуров?
d2_x/dt_2=-GMx/(x^2+y^2)^(3/2)
d2_y/dy_2=-GMy/(x^2+y^2)^(3/2)
 
Начинающий в C++ Вот задача...помогите исправить ошибки...неработает.(файл внутри)

Дан файл massiv.txt, компоненты которого вещественные числа. Найти:

1) Наибольший компонент.
2) Наибольший компонент из значений с четными номерами.
3) Наибольший компонент из значений с нечетными номерами.
4) Разность первого и последнего.
5) Сумму наибольшего и наименьшего.

=============================

Еще не могу справиться с вот этой задачей:

Пльзовательский класс Array должен содержать конструктор с параметрами
для создания динамических целочисленных массивов и установки начальных значений их элементов:

Array(...) (реальные размеры массива - число строк и столбцов передается в конструктор через параметры) :

Деструктор : ~Array();
Функция печати текущего массива: void Print();
Функция переустановки текущего значения: void Set();
Функция-друг решающая поставленную задачу: friend void Run();

Код функций-членов и функции-друга - вне пространства определения класса. Программа иллюстрирует косвенный способ обращения к элементам массива. Составить функцию Run, которая позволит выполнить сл. действия с двумерными массивами ( если задачу решить нельзя, то сообщить об этом ). Найти произведение элементов в тех строках, которые не содеожат отрицательных элементов.
 

Вложения

  • Ex3.cpp
    Ex3.cpp
    2,6 КБ · Просмотры: 565
Добрый вечер! Ребята помогите !Ответьте на вот эти вопросы письменно ... Выложите код. Буду очень при очень Вам благодарен!
Все волишь 2 вопроса! Спосибо!
1.Найти произведение элементов с четными номерами?
Не знаю че не получаеться! Вот я делал сумму с отречательными получилось!
#include<iostream>
using namespace std;
void main()
{
const int size=6;
int ar[size]={24,-15,10,-16,-22};
int sum=0;
for (int i=0;i<size;i++)
{
if (ar<0;
sum+=ar;
}
cout <<"sum ="<<sum<<"\n\n";
}

2.Найти сумму элементовнаходящегося между первого отрицательного и последнего массива?
Очень прошу !
 
Компилятора под руками нет, поэтому попробую так...

Код:
#include<iostream.h>
void main(void)
{
const int size=5;
int ar[size]={24,-15,10,-16,-22};
int rez=1, i;
for (int i=1;i<size;i++) {if ( ((int)(i/2))==((double)(i)/2) ) rez*=ar[i];} 
cout <<"rez ="<<rez<<"\n\n";
}
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!