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

  • Автор темы Автор темы European
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
АУ! Отзовитесь кто-нтбудь!
Разработайте пользовательский тип ” вектор в n-мерном пространстве”. Для разрабатываемого типа обязательно определите:
• конструктор (или несколько, если необходимо)
• набор методов ”get” и ”set” ;
• операторы + и – для сложения и вычитания векторов с получением нового вектора (суммы или разности);
• оператора * для вычисления скалярного произведения двух векторов;
• оператор присваивания;
• оператор сравнения ==;

а что значит оператор присваиватия? Это что, задать значение вектору? Ну так мы же в конструкторе это делаем! + есть функция set! Чего-то я не догоняю. Может кто расскажет темному человеку? :)


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

Ну вот кое какие наброски.
int max=a[0][0], min=a[0][0], i=0,j,k,jmax;
for (i=0;i<n;i++)
{for (j=0;j+1<n;j++)
if (a[j]>a[i+1][j+1])// ищим максимальное в стороке
{
max=a[j];
jmax=j;
}
for (k=0;k+1<n;k++)// ищим минимальное в столбце, в котором нашли мксимум
{
if (a[k][jmax]<a[k+1][jmax])
min=a[k][jmx];
}
if (max== min)// если найденые макс и мин равны, то это и есть наша точка
cout<<max<<endl;// ну и выводим ее. Если функция, то можно возвращать ее return-ом
}
 
Помогите пожалуйста с решением задачи с массивом. Вот условие:
Дана строка, состоящая из 0 и 1. Каждая группа символов отделяется друг от друга одним или несколькими пробелами. Найти и вывести на экран группы символов с четным количеством символов.
Заранее благодарен.
 
ПОМОГИТЕ вывести цифры в графическом режиме....
 
Помогите пожалуйста с решением задачи с массивом. Вот условие:
Дана строка, состоящая из 0 и 1. Каждая группа символов отделяется друг от друга одним или несколькими пробелами. Найти и вывести на экран группы символов с четным количеством символов.
Заранее благодарен.


вот

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <math.h>

using namespace std;

int main()
{
char string[]="1111 2222 333 4444 55555 66666666 777 8888 99 111";
int len=strlen(string);
int cn=0;
char buf[100];
memset (buf,0,100);

for (int jj=0; jj <=len; jj++)
{
if (string [jj] != ' ')
{
cn++;
}
else
{
int x= fmod (cn,2);
if (x==0)
{
memcpy (buf,string+jj-cn,cn);
cout << buf << endl;
memset (buf,0,100);
cn=0;
}
cn=0;
}
}
return 0;
}

у меня работало, строку можешь забить любыми символами! УДАЧИ!
 
Помогите пожалуйста с решением задачи с массивом. Вот условие:
Дана строка, состоящая из 0 и 1. Каждая группа символов отделяется друг от друга одним или несколькими пробелами. Найти и вывести на экран группы символов с четным количеством символов.
Заранее благодарен.


вот еще вариант придумал товарищ:

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
cout << "Hello, world!" << endl;
int i;
for (i=1;i<argc;i++)
{
if (!(strlen(argv) & 0x01))
cout << argv << endl;
}

return EXIT_SUCCESS;
}

строка задается в виде параметров (перед запуском).- проверили - работает!
 
BOT:

#include <iostream>
using namespace std;

int main()
{
int x = 255;
cout << x << endl;
return 0;
}

а если нужно что-то другое конкретнее опишите проблему!!! B)

в борланде 3.1.текст в графическом режиме выводиться с помощью функции outtext().А как вывести цифры на экран из переменной или массива?
 
АУ! Отзовитесь кто-нтбудь!
Разработайте пользовательский тип ” вектор в n-мерном пространстве”. Для разрабатываемого типа обязательно определите:
• конструктор (или несколько, если необходимо)
• набор методов ”get” и ”set” ;
• операторы + и – для сложения и вычитания векторов с получением нового вектора (суммы или разности);
• оператора * для вычисления скалярного произведения двух векторов;
• оператор присваивания;
• оператор сравнения ==;

Киньте пожалуйсто кому не жалко пару примеров перегрузок операторов. А то что-то я не втыкаю. Пжаааалуйста, ооочень надо. Буду оооочень благодарна! B)
 
Очень прошу помочь мне с двумя вопросами...В программе работаю с динамическими массивами(например,создаю k=new bool[st]..и т.д.) Начались проблемы тогда,когда я закрываю форму. Несмотря на то что в конце пишу delete []k, k=0; вылазит странное сообщени об ошибке с памятью...такое ощущение,что память прога до конца не очистила. Преподаватель посоветовал использовать OnDestroy у формы и всё ещё раз проверять, но никак не могу понять,как это реализовать.Очень буду признательна,если кто-то поможет.
И вопрос второй: как сделать в OpenDialog чтобы переход осуществлялся в ту папку,где лежит исходник?
 
Очень прошу помочь мне с двумя вопросами...В программе работаю с динамическими массивами(например,создаю k=new bool[st]..и т.д.) Начались проблемы ...

выложи исходник, посмотрим, может чем поможем ... B)
 
OpenDialog я уже сделала...а вот с массивами трагедия...Вот посмотрите...программа должна закодировать исходную последовательность с помощью полинома вводить в edit нули единицы..в исходную желательно побольше...Посмотрите,что получилось в итоге..И почему так?Пока работет только одна кнопка Закодировать...
 

Вложения

  • _____.rar
    _____.rar
    479,6 КБ · Просмотры: 176
Господа программисты! Помогите с программой! Об оплате договоримся. Нужно написать программу на С++, консольную.
Если возьметесь, то вот моя аська 458283605 и почта juliab@mail.ru
Вот текст задачи:
Информационные агентства
Разработать приложение, позволяющее организовать регистрацию информационных агентств (печать, радио, телевидение). Информация об агентстве хранится в описателе агентства.
Описатель печатного издания содержит следующую информацию: профиль издания; номер лицензии; место нахождения редакции; периодичность (перечень дней недели от одного до семи); общий тираж издания.
Описатель радиостанции содержит следующую информацию: профиль радиостанции; номер лицензии; место нахождения редакции; диапазон и частота вещания (от одной до трёх пар).
Описатель телекомпании содержит следующую информацию: профиль телекомпании; номер лицензии; место нахождения редакции; частотный канал.
Каждое агентство имеет уникальное название. Информация обо всех агентствах сведена в таблицу, каждый элемент которой содержит название агентства и указатель на его описатель. Элементы таблицы упорядочены в алфавитном порядке.
Обеспечить выполнение следующих операций:
- Для таблицы
- включить новый элемент, не нарушая упорядоченности;
- найти элемент по заданному названию;
- удалить элемент, заданный названием;
- показать содержимое таблицы.
- Для любого агентства:
- вывести информацию об информационном агентстве;- получить (вернуть в качестве результата) тип информационного агентства;
- получить информацию о месте нахождения редакции;
- получить номер лицензии;
- получить информацию о профиле информационного агентства.
- Для печатного издания:
- получить тираж издания; изменить тираж издания;
- получить периодичность выхода издания; изменить периодичность издания.
- Для радиостанции:
- получить перечень диапазонов и частот; изменить перечень диапазонов и частот.
- Для приложения:
- зарегистрировать новое информационное агентство;
- внести изменения в информацию об информационном агентстве (изменить тираж, периодичность, диапазон частот и т.п.) в соответствии с типом агентства;
- вывести информацию обо всех информационных агентствах определённого типа;
- аннулировать лицензию информационного агентства;
Порядок выполнения работы
1. На основе описания задачи определить состав классов.
2. Разработать иерархию классов и схему их взаимодействия.
3. Для каждого класса определить его состояние и необходимые методы.
4. Разработать и отладить все классы. Приложение реализовать в виде простой диалоговой программы.
5. Разработать и отладить класс, реализующий работу приложения. Предусмотреть в классе возможность сохранения таблицы в файле и ее восстановления.
6. Разработать и отладить класс-итератор, с помощью которого реализовать дополнительные операции.
 
Ой,извините,пока ещё плохо ориетируюсь на форуме..наверно я не по адресу..мне в тему про билдер надо было...
 
Киньте пожалуйсто кому не жалко пару примеров перегрузок операторов. А то что-то я не втыкаю. Пжаааалуйста, ооочень надо. Буду оооочень благодарна! :(

[codebox]
1. Чтобы перегрузить оператор, вы должны определить класс, которому оператор будет назначен.
2. Когда вы перегружаете оператор, перегрузка действует только для класса, в котором он определяется. Если программа использует оператор с неклассовыми переменными (например, переменными типа int или float), используется стандартное определение оператора.
3. Чтобы перегрузить оператор класса, используйте ключевое слово C++ operator для определения метода класса, который C++ вызывает каждый раз, когда переменная класса использует оператор.
4. C++ не позволяет вашим программам перегружать оператор выбора элемента (.), оператор указателя на элемент (.*), оператор разрешения области видимости (:;) и условный оператор сравнения (?;).


ПЕРЕГРУЗКА ОПЕРАТОРОВ ПЛЮС И МИНУС

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

Ниже приведено определение класса, создающее класс string. Этот класс содержит один элемент данных, который представляет собой собственно символьную строку. Кроме того, этот класс содержит несколько различных методов и пока не определяет каких-либо операторов:

class string

{
public:
string(char *); // Конструктор
void str_append(char *);
void chr_minus(char);
void show_string(void);
private:
char data[256] ;
};

Как видите, класс определяет функцию str_append, которая добавляет указанные символы к содержимому строки класса. Аналогичным образом функция chr_minus - удаляет каждое вхождение указанного символа из строки класса. Следующая программа STRCLASS.CPP использует класс string для создания двух объектов символьных строк и манипулирования ими.

#include <iostream.h>

#include <string.h>

class string

{
public:
string(char *); // Конструктор
void str_append(char *);
void chr_minus(char);
void show_string(void);
private:
char data[256] ;
};

string::string(char *str)

{
strcpy(data, str);
}

void string::str_append(char *str)

{
strcat(data, str);
}

void string::chr_minus(char letter)

{
char temp[256] ;
int i, j;
for (i = 0, j = 0; data; i++) // Эту букву необходимо удалить?
if (data != letter) // Если нет, присвоить ее temp
temp[j++] = data;
temp[j] = NULL; // Конец temp
// Копировать содержимое temp обратно в data
strcpy(data, temp);
}

void string::show_string(void)

{
cout << data << endl;
}

void main(void)

{
string title( "Учимся программировать на языке C++");
string lesson("Перегрузка операторов");
title.show_string() ;
title.str_append(" я учусь!");
itle.show_string();
lesson.show_string();
lesson.chr_minus('p') ;
lesson.show_string();
}

Как видите, программа использует функцию str_append для добавления символов к строковой переменной title. Программа также использует функцию chr_minus для удаления каждой буквы "р" из символьной строки lesson. В данном случае программа использует вызовы функции для выполнения этих операций. Однако, используя перегрузку операторов, программа может выполнять идентичные операции с помощью операторов плюс (+) и минус (-).

При перегрузке оператора используйте ключевое слово C++ operator вместе с прототипом и определением функции, чтобы сообщить компилятору C++, что класс будет использовать этот метод как оператор. Например, следующее определение класса использует ключевое слово operator, чтобы назначить операторы плюс и минус функциям str_append и chr_minus внутри класса string:

class string

{
public:
string(char *); // Конструктор
void operator +(char *);
void operator -(char); —————Определение операторов класса void show_string(void);
private:
char data[256];
};

Как видите, класс перегружает операторы плюс и минус. Как уже упоминалось, когда класс перегружает оператор, он должен указать функцию, которая реализует операцию, соответствующую этому оператору. В случае оператора плюс определение такой функции становится следующим:

void string::operator +(char *str)

{
strcat(data, str);
}

Как видите, определение этой функции не содержит имени, поскольку здесь определяется перегруженный оператор класса. Для перегрузки оператора плюс программа не изменила обработку, которая осуществляется внутри функции (код этой функции идентичен коду предыдущей функции str_append). Вместо этого программа просто заменила имя функции ключевым словом operators соответствующим оператором. Следующая программа OPOVERLD.CPP иллюстрирует использование перегружаемых операторов плюс и минус:

#include <iostream.h>

#include <string.h>

class string

{
public:
string(char *); // Конструктор
void operator +(char *);
void operator -(char);
void show_string(void);
private;
char data[256] ;
};

string::string(char *str)

{
strcpy(data, str);
}

void string::operator +(char *str)

{
strcat(data, str);
}

void string::operator -(char letter)

{
char temp[256] ;
int i, j;
for (i = 0, j = 0; data; i++) if (data[il 1= letter) temp[j++] = data;
temp[j] = NULL;
strcpy(data, temp);
}

void string::show_string(void)

{
cout << data << endl;
}

void main(void)

{
string title( "Учимся программировать на C++");
string lesson("Перегрузка операторов");
title.show_string();
title + " я учусь!";
title.show_string() ;
lesson.show_string();
lesson - 'P';
lesson.show_string();
}

Как видите, программа использует перегруженные операторы:

title + " я учусь!"; // Добавить текст " я учусь!"

lesson - 'р'; // Удалить букву 'р'

В данном случае синтаксис оператора законен, но немного непривычен. Обычно вы используете оператор плюс в выражении, которое возвращает результат, например, как в операторе some_str = title + "текст ";. Когда вы определяете оператор, C++ предоставляет вам полную свободу в отношении поведения оператора. Однако, как вы помните, ваша цель при перегрузке операторов состоит в том, чтобы упростить понимание ваших программ. Поэтому следующая программа STR_OVER.CPP немного изменяет предыдущую программу, чтобы позволить ей выполнять операции над переменными типа string, используя синтаксис, который более согласуется со стандартными операторами присваивания:

#include <iostream.h>

#include <string.h>

class string

{
public:
string(char *); // Конструктор
char * operator +(char *) ;
char * operator -(char);
void show_string(void);
private:
char data[256] ;
} ;

string::string(char *str)

{
strcpy(data, str);
}

char * string::operator +(char *str)

{
return(strcat(data, str));
}

char * string::operator -(char letter)

{
char temp[256];
int i, j;
for (i = 0, j = 0; data; i++) if (data 1= letter) temp[j++] = data;
temp[j] = NULL;
return(strcpy(data, temp));
}

void string::show_string(void)

{
cout << data << endl;
}

void main(void)

{
string title("Учимся программировать на C++");
string lesson("Перегрузка операторов");
title.show_string();
title = title + " я учусь";
title.show_string() ;
lesson.show_string();
lesson = lesson - '?';
lesson.show_string();
}

Изменив перегруженные операторы плюс и минус таким образом, чтобы они возвращали указатель на символьную строку, программа может теперь использовать эти операторы в привычном для оператора присваивания виде:

title = title + " учимся программировать!";

lesson = lesson - 'р';


[/codebox]
 
помогите мне пожалуйста написать задачу на Visual C++, очень нужно, осталась одна задача до зачета. если что, есть вебмани.

«Фишки»

Последовательность клеток занумерована числами от 1 до N. В каждой клетке стоит либо черная, либо белая фишка. Группой назовем набор подряд стоящих фишек одного цвета, ограниченный с обеих сторон фишками другого цвета или концами последовательности. Следует переместить фишки так, чтобы они образовали не более двух групп.
Перемещение фишек описывается с помощью плана обмена, в котором используются понятия операция обмена и шаг. Операция обмена меняет местами две соседние группы фишек. Шаг состоит не более чем из K одновременно выполняемых обменов. Обмены можно совершать одновременно только тогда, когда в них участвуют разные группы. После каждого шага группы одного цвета, оказавшиеся рядом, объединяются. План обменов содержит описания шагов, выполняемых последовательно.
clip_image001.gif

Напишите программу, определяющую план обменов, с помощью которого за наименьшее число шагов получается последовательность, состоящая не более чем из двух групп.
Формат входных данных
В первой строке входного файла записаны числа N и K (1 <= N <= 100000 и 1 <= K <= 10000). Исходная расстановка фишек задается в последующих строках, содержащих N чисел (0 или 1), разделенных пробелами или переводами строк. При этом 0 соответствует черной фишке, 1 - белой.
Формат выходных данных
Выходной файл должен содержать описание шагов плана, по одному шагу на строке. Описание шага начинается с числа L - количества обменов на этом шаге. Затем для каждого обмена указывается минимальный номер клетки, в которой стоит фишка, участвующая в этом обмене. Последняя строка плана должна содержать одно число 0.
Примеры
fishes.in
9 3
1 0 0 1 1 0 1 1 0
fishes.out
2 1 6
1 1
0
fishes.in
3 1
1 1 0
fishes.out
0
Примечание
Требуется найти план, содержащий наименьшее число шагов, при этом общее число обменов может быть не минимальным.


Решение:

Заметим, что количество фишек в одной группе не имеет никакого значения, т.к. за один обмен мы из 3 или 4 групп получаем 2. Получается, что нам нужно хранить количество фишек в группе только для того, чтобы правильно выводить позицию, с которой начинается группа, участвующая в обмене.
Необходимо завести массив A от одного до N (т.к. все группы могут состоять из одного символа) и хранить в нем позицию, с которой начинаются символы i-ой группы. Это сделать несложно - читаем последовательно символы последовательности и если символ не равен предыдущему, то сохраняем в A позиция, на которой находиться данный символ (отсюда начинается новая группа) и увеличиваем i. Общее количество групп обозначим за M.
Теперь необходимо разработать алгоритм перестановки групп, чтобы добиться желаемого эффекта за наименьшее количество шагов. Будем выполнять действия до тех пор, пока количество групп не станет равным 2. Наша последовательность представляет собой последовательность групп вида 010101. Разобьем нашу последовательность на тройки и в каждой тройке произведем обмен первого элемента со вторым и в итоге, для данного примера, получим последовательность 101, а на следующем шаге 01.
Определим количество операций обмена, которые мы совершим на данном шаге: оно равно минимуму из K и количеством троек, на которые можно разбить нашу последовательность. Обозначим его за C. Теперь мы будем совершать операции обмена, меняя в каждой тройке первый и второй элементы. Эти обмены необходимо совершать только в последних C тройках нашей последовательности, оставляя первые Z = M - C * 3 элементов неизменными.
Займемся обменами элементов в последних C тройках. Пусть j - элемент, с которого начинается изменение последовательности, j = M - C * 3 + 1. Теперь, перебирая все i от C до 1, выводим все A[q], где q = M - i * 3 + 1 (начало первой группы в тройке), вывод такого число обозначает, что мы поменяли группу q с группой q + 1, это значит, что объединились группы q - 1 и q + 1, а также группы q и q + 2. Необходимо внести соответствующее изменение в массив: A[j] := (A[q + 2] - A[q + 1]) + A[q], где (A[q + 2] - A[q + 1]) - длина последовательности q + 1, которая теперь встала перед q. После этого необходимо увеличить j на 1. Отдельно рассматривается случай, когда q = 1: здесь вместо четырех участвуют три группы и поэтому менять следует не первую группу со второй, а вторую с третьей, т.е. предварительно увеличить j на 1.
Такой, казалось бы, сложный и запутанный способ решения задачи избавляет нас от использования списков или многократного присваивания массивов. Надеюсь, при внимательном прочтении и рисовании возможных вариантов и последовательности действий на бумаге все станет понятно.
 
Спасибо. Теперь осталось во всем этом разобраться)



Извините за дебильный вопрос не в тему. А можно вектору присвоить значение числа (т.е стоит ли писать в перегрузку оператора = условие, когда передается число)? А перегркзку с числами операторв ==,+,-,*(скалярное произведение) для векторов , т.е можно сложить вектор в трехмерном пространстве с числом и т.д.?Что-то меня ооочень терзают смутные сомнения на этот счет, но как то мало без этих перегрузок полкчается всего, може это просто я чего-то не доганяю, или в школе плохо училась.
Да-а-а, представляю, что обо мне народ подумал. ;) ;)
 
[#include <iomanip.h>
#include <fstream.h>
#include <conio.h>
const int N=499;
int m,i;
const unsigned n=9;

int kol,b,a,c,d;
void InpF(char *NameF, int *x)
{
m=0;
ifstream finput;
finput.open(NameF);
finput>>x[m];
while (!finput.eof())
{
m++;
finput>>x[m];
if(m>N){ cout<<"nelzia schitat ";
break;}
}
finput.close();
}

void OutF(char *NameF, int *x)
{
int l;
l=0;
ofstream finput;
finput.open(NameF,ios:ut);
finput<<x[l]<<" ";
while (l<(m)){l++; finput<<x[l]<<" ";}
}

void main()
{
clrscr();
int x,t,l,g,A[N],C[N],b;
InpF("C:\\Borlandc\\Bin\\moi.txt",A);
b=0;
g=0;
for (l=0;l<m;l++)
{ if(A[l]==1)

a++;

else if(A[l]!=1) {

a=0;}

if(a>b)b=a;
}

{if ((A[l]!=1))
{ cout<<"Number poslednei edenicu - "<<b+1 <<"\n";
}
else if ((A[l]==1) && (b!=0))
{
g=l ;
}
}
cout<<"Nomer 1 edenicu -"<<g+1;
}
]
Вот примерный код проги
по идее она должна находить первый и последний номер максимальной последовательности едениц.Последний вроде находит а первый нет.Люди очень прошу помогите!!!С меня пиво кто сделает)На языке си++.Японимаю что код наверн большой но люди добрые очень прошу если что напишите свой код...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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