На форуме запрещена публикация любого незаконного материала, нарушающего авторские права создателей, а также просьбы выложить это! МЫ поможем ВАМ найти бесплатную альтернативу! О публикации ключей, креков, пиратского ПО, игр, музыки, фильмов и т.д. - сообщать СЮДА!
Сегодня сижу за компом... Из старой пластмассовой компьютерной колонки вылез паук, посмотрел по сторонам и обратно уполз в колонку... Первая мысль - Доктор Веб...обновления проверял...)) Я веду себя как положено, а положено у меня на все.... Жизнь нужно прожить так, чтобы было приятно вспомнить, но стыдно рассказать детям... Пишу на С++ за еду...
Эти 2 пользователя(ей) сказали cпасибо за это полезное сообщение:
// Запрашиваем и складываем две суммы выводя формулу и результат.
//
// Используем <iostream> или <iostream.h> в зависимости от используемого компилятора.
//
#include <iostream>
using namespace std;
int main() {
//Создаем необходимые переменные с плавающей точкой
double atemp, btemp, ctemp;
//Приветствуем посетителя
cout << "Wellkome! << endl;
// Просим вставить первое число
cout << "Input 1 numm and press ENTER: ";
// Получаем данные от ввода и помещаем их в переменную atemp
cin >> atemp;
// Просим вставить второе число
cout << "Input 2 numm and press ENTER: ";
// Получаем данные от ввода и помещаем их в переменную btemp
cin >> atemp;
// Запускаем формулу сложения и помещаем её в переменную
//ctemp
ctemp = (atemp + btemp);
// выводим на экран введенные цифры и результат
cout << atemp << " + " << btemp << " = " << ctemp << endl;
cout << "End Summary" << endl;
//Ставим паузу чтоб окно не хахлопывалось само - работает не всегда
getch();
// Обозначаем конец успешного выполнения программы.
return 0;
}
Вот такой кодец... проверяем...
Зы комментарии к коду - это хороший тон в программинге, во первых самим легче будет разобраться, а в случае оптимизации или отладки поможет найти глюки...
// Запрашиваем и складываем две суммы выводя формулу и результат.
//
// Используем <iostream> или <iostream.h> в зависимости от используемого компилятора.
//
#include <iostream>
using namespace std;
int main() {
//Создаем необходимые переменные с плавающей точкой
double atemp, btemp, ctemp;
//Приветствуем посетителя
cout << "Wellkome! << endl;
// Просим вставить первое число
cout << "Input 1 numm and press ENTER: ";
// Получаем данные от ввода и помещаем их в переменную atemp
cin >> atemp;
// Просим вставить второе число
cout << "Input 2 numm and press ENTER: ";
// Получаем данные от ввода и помещаем их в переменную btemp
cin >> atemp;
// Запускаем формулу сложения и помещаем её в переменную
//ctemp
ctemp = (atemp + btemp);
// выводим на экран введенные цифры и результат
cout << atemp << " + " << btemp << " = " << ctemp << endl;
cout << "End Summary" << endl;
//Ставим паузу чтоб окно не хахлопывалось само - работает не всегда
getch();
// Обозначаем конец успешного выполнения программы.
return 0;
}
Вот такой кодец... проверяем...
Зы комментарии к коду - это хороший тон в программинге, во первых самим легче будет разобраться, а в случае оптимизации или отладки поможет найти глюки...
пробуем код и отписываемся...
Еще одна бессмысленная программа. Кстати такие комментарии плохой тон. Комментировать очевидные вещи только нагромождает программу и кстати затрудняет чтение кода и отладку. Такой пример будет хорош в качестве первой программе для книги С++ для начинающих или что-то в этом роде.
Код с понятными именами переменных и функций, без вычурных конструкций, и краткие понятные комментарии - вот хороший тон.
Хотя если честно для некоторых преподов я комментирую исходники даже похлеще, вставлая анекдоты, случаи из жизни, цитаты. Чтобы потом в графе хорошие комментарии он мне не снимал баллы.
ну так это и есть примерчик для соовсем начинающих... насчет его бессмысленности - эт само собой. виндовый calc.exe все одно лучше будет...
но эт примерчик приведен только в качестве примера...
а насчет комментов - думаю они все таки не помешают начинающим... ну а из конечной проги перед компиляцией можно и вычистить их напрочь...
вот примерчик - программа подсчитывает и показывает N-ную строчку из треугольника Паскаля (т.е. коэффициенты для разложенного на слагаемые выражения (a+b)^N ):
Код:
#include <iostream>
#include <vector>
using std::vector;
using std::cout;
using std::cin;
using std::endl;
int main() {
while(1) {
cout << "Enter power (or row number in Pascal triangle): ";
int n;
cin >> n;
vector<int> coefArr(n+1); // заполнена нулями по умолчанию
coefArr[0] = coefArr[1] = 1;
int tmpSize = 3;
for(int i = n - 1; --i >= 0; tmpSize++) {
for(int k = tmpSize; --k > 0;) {
coefArr[k] += coefArr[k-1];
}
}
for (int i = n + 1; --i > 0;) {
cout << coefArr[i] << " ";
}
cout << coefArr[0] << endl;
cout << "One more time? Yes(y) or No(n): ";
char ch;
cin >> ch;
if (ch == 'y' || ch == 'Y')
continue;
else
break;
}
Еще примерчик: программа подсчитывает x^k. Используется свойство степеней (a^(k + n) = a^k * a ^n) и представления чисел в компьютере.
Код:
#include <iostream>
using namespace std;
// Функция возвращает результат возведения x в k-ую степень за O(log(k))
int power(int x, int k)
{
int a = 1;
for (; k; k >>= 1)
{
if (k & 1)
a *= x;
x *= x;
}
return a;
}
int main()
{
for (;;) //То же самое, что и while (1)
{
int x, k;
cout << "Enter x: ";
cin >> x;
cout << "Enter power: ";
cin >> k;
cout << "Answer: " << power(x, k) << '\n';
char ch;
cout << "One more time? Yes(y) or No(n): ";
cin >> ch;
if (ch == 'y' || ch == 'Y')
continue;
else
break;
}
return 0;
}
Классная тема, но, я как новичек, хочу у вас спросить:
1) Какой компилятор надо для ВыньХР и для Линукс
2) Посоветуйте хороший учебник по программированию и по Си/Си++
Классная тема, но, я как новичек, хочу у вас спросить:
1) Какой компилятор надо для ВыньХР и для Линукс
2) Посоветуйте хороший учебник по программированию и по Си/Си++
1) для WinXP - Compiler C++ (Этот компилятор точно есть в MS Visual Studio) или Intel Compiler C++.
для Линукс - GNUC.
2) Учебники по программированию - Кормен "Алгоритмы: построение и анализ"; Кнут "Искусство программирования".
по Си/Си++ - MSDN.
Этот пользователь сказал cпасибо за это полезное сообщение:
Не буду новую тему создавать, может тут ответите. Вобщем поставил себе БДС2006, начал изучать с++. Решил сделать элементарную программу - часы. Значит в форму поставил Label, поставил Timer. Таймер срабатывает раз в секунду и обновляет поле Label текущим временем:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Label1 ->Caption = Time();
}
Компилирую - все работает, запускается, время рисует, все зашибись. Ну ес-но первая мысль была кому-нибудь это показать. Скинул соседу, а у него не запускается. Явно нужны какие-нибудь длл. В связи с чем вопрос - как собрать все используемые длл чтобы работало не только у меня? В меню builder ничего подобного не нашел.
Может хто делал, когда нибудь лабу по с++ по теме "Двунаправленые списки"? Нужен исходник, обезательно с классом узлом, и классом списком, обезательно должен быть организован метод сортировки, методом вставки
Сегодня сижу за компом... Из старой пластмассовой компьютерной колонки вылез паук, посмотрел по сторонам и обратно уполз в колонку... Первая мысль - Доктор Веб...обновления проверял...)) Я веду себя как положено, а положено у меня на все.... Жизнь нужно прожить так, чтобы было приятно вспомнить, но стыдно рассказать детям... Пишу на С++ за еду...
Может хто делал, когда нибудь лабу по с++ по теме "Двунаправленые списки"? Нужен исходник, обезательно с классом узлом, и классом списком, обезательно должен быть организован метод сортировки, методом вставки
Никогда не писал сортировку на списке (обычно я пользуюсь массивами и STL), но нашлось 30 минут свободного времени для этой задачи:
Код:
Код:
#include <queue>
struct Node
{
int Value1;
int Value2;
bool operator < (const Node &a)
{
return Value1 < a.Value1 || (Value1 == a.Value1 && Value2 < a.Value2);
}
void operator = (const Node &a)
{
memcpy(this, &a, sizeof(a));
}
void print(const char *s)
{
printf("%sValue1 = %5d\n", s, Value1);
printf("%sValue2 = %5d\n", s, Value2);
}
};
struct List
{
Node Value;
List *next;
List *pred;
List()
{
memset(this, 0, sizeof(*this));
}
void push_back(const Node &newValue)
{
List *lpTemp = new List;
lpTemp->Value = newValue;
lpTemp->next = 0;
if (pred)
{
lpTemp->pred = pred;
pred->next = lpTemp;
}
else
{
lpTemp->pred = this;
next = lpTemp;
}
pred = lpTemp;
}
void free()
{
List *lpTemp = next;
List *lpDel;
while (lpTemp)
{
lpDel = lpTemp;
lpTemp = lpTemp->next;
delete lpDel;
}
}
void insertion_sort()
{
for (List *lpList = next; lpList; lpList = lpList->next)
{
List *lpTemp = next;
while (lpTemp->Value < lpList->Value)
{
lpTemp = lpTemp->next;
}
if (lpTemp != lpList)
{
List *lpSwap = lpList->pred;
lpTemp->pred->next = lpList;
lpList->pred->next = lpList->next;
if (lpList->next)
lpList->next->pred = lpList->pred;
else
pred = lpList->pred;
lpList->pred = lpTemp->pred;
lpList->next = lpTemp;
lpTemp->pred = lpList;
lpList = lpSwap;
}
}
}
void print(const char *s1, const char *s2)
{
unsigned int i = 1;
for (List *lpTemp = next; lpTemp; lpTemp = lpTemp->next, i++)
{
printf("%sNode No %u:\n", s1, i);
lpTemp->Value.print(s2);
}
putchar('\n');
}
};
List head;
Node node;
int main()
{
for (int i = 0; i < 20; i++)
{
node.Value1 = rand() & 255;
node.Value2 = rand() & 255;
head.push_back(node);
}
puts("After:");
head.print("\t", "\t\t");
head.insertion_sort();
puts("Before:");
head.print("\t", "\t\t");
head.free();
return 0;
}
PS: написал структуры. Для классов просто меняем слово struct на class.
PSS: В классе List ничего менять не нужно (вроде бы он без багов). Изменения в классе Node переносят изменения и в List.
Помог, скажи спасибо
Последний раз редактировалось L.E.O.; 07.05.2009 в 06:08..
Всем привет,Помогите с задачкой плз...косячит в с++ пишет кучу ошибок,но вроде всё верно
Вот Задание : Необходимо реализовать двусвязный список. В качестве информационной части выступают указатели на массивы строк. Необходимо реализовать следующие функции: добавление элементов в начало/конец массива, вывод конкатенации строк всех элементов на экран, удаление из списка памяти (включая информационную часть, поскольку она тоже определяется указателями).
а Вот Текст Программки -
[HIDE="Текст"]#ifndef list
#define list
Всем привет,Помогите с задачкой плз...косячит в с++ пишет кучу ошибок,но вроде всё верно
Вот Задание : Необходимо реализовать двусвязный список. В качестве информационной части выступают указатели на массивы строк. Необходимо реализовать следующие функции: добавление элементов в начало/конец массива, вывод конкатенации строк всех элементов на экран, удаление из списка памяти (включая информационную часть, поскольку она тоже определяется указателями).
Вообще то, не совсем верно. Ошибок много. Начиная с того, что зарегистрированное слово "While" пишется строчными буквами (грубая ошибка) и заканчивая ошибками логики. Пропуская все мелкие ошибки (если нужно и такие ошибки прокомментирую), остановлюсь на ошибке логики в реализации двухсвязного списка:
1) Все реализации списка коректно делать с фиктивным головой и хвостом. В этом суть двухсвязного списка. В вашей реализации этого нет. Если вы не пишите фиктивные голову и хвост, то нет смысла делать его двухсвязным и уж тем более делать для него естественные функции, такие как добавление в начало и конец списка.
2) Копировать ссылку на строку как вы делаете неверно, т.к. если в одном месте она очистится, то во всех местах она вылетит с ошибкой. Здесь нужна более хитрая структура или же нужно копировать строку (а не ссылку).
Все остальное ошибки, не касающиеся логики.
Вот моя реализация задачи. В ней я использую фиктивную голову и хвост, которые равны друг другу (дял простоты использую зациклиный список, если нужен не зациклиный, сообщите, напишу и такой). Я использовал "empty project" поэтому у меня нет #include "stdafx.h" и за место int _tmain(int argc, _TCHAR* argv[]) у меня простой int main(). И еще, я изменил некоторые названия: previous стал prev (меньше букв ), add заменился на push.
Описание функций:
void merge(NODE* node1, NODE* node2) - соединяет список node1 с node2
void pop(NODE* head) - удаляет узел head из списка, но не удаляет из памяти
bool empty(NODE* head) - проверяет, пустой ли список head, где head - фиктивная голова
NODE* create_head(const char* str = "") - Создает голову для нового списка, с информационный частью str
void push_back(NODE* head, const char* str) - добавляет новый элемент с информационный частью str в конец списка head, где head - фиктивная голова
void push_front(NODE* head, const char* str) - добавляет новый элемент с информационный частью str в начало списка head, где head - фиктивная голова
void pop_back(NODE* head) - удаляет элемент из конца списка head и очищает память, где head - фиктивная голова
void pop_front(NODE* head) - удаляет элемент из начала списка head и очищает память, где head - фиктивная голова
NODE* top_back(NODE* head) - возвращает первый элемент списка head, где head - фиктивная голова
NODE* top_front(NODE* head) - возвращает последний элемент списка head, где head - фиктивная голова
void clear(NODE* head) - удаляет все элементы, но не голову, из списка head и очищает память, где head - фиктивная голова
void delete_head(NODE* &head) - удаляет все элементы с головой из списка head и очищает память, где head - фиктивная голова
void output(NODE* head) - выводит список head на экран (голова не выводится на экран), где head - фиктивная голова