Понедельник, 02.12.2024, 05:43 | Главная | Регистрация | Вход |
|
Полезный код - Форум
Полезный код
| |
kulik | Дата: Вторник, 29.12.2009, 03:56 | Сообщение # 1 |
Генерал-майор
Группа: Администраторы
Сообщений: 290
Статус: Offline
| ЗАДАНИЕ 1.Класс «Конкурс» Класс должен содержать методы для проведения конкурса. Количество участников конкурса неограниченно. Количество призовых мест, на которые претендуют участники, ограничено. Участники конкурса имеют идентификационный номер, имя. Во время проведения конкурса его участникам присваивают баллы. Операции конкурса: открытие нового конкурса; добавление участника; окончание регистрации участников; установка балла заданному участнику; подведение итогов конкурса; вывод участников, прошедших конкурс упорядоченных по убыванию баллов. В демонстрационной программе предусмотреть считывание списка участников конкурса из текстового файла и запись списка в файл перед завершением программы. Демонстрационная программа должна содержать диалоговые средства для проведения конкурса. РЕАЛИЗАЦИЯ Code
#include "stdafx.h" #include <iostream> #include <conio.h> #include <fstream> using namespace std;
struct element {
char name[15]; char surname[15]; int id; int score; element* next;
};
class list { private: element* begin;
public:
void create(char a[], char b[], int c);//name, surname, id void view(); void setscore(int id, int s); //id, score void sort(); void wtf(); void rdf(); element* get_begin(); list() {begin=NULL;}; ~list() {
element *p; p=begin;
while (p!=NULL) { begin=p->next; delete p; p=begin;
} begin=NULL; };
};
element* list::get_begin() { return (begin); }
void list::sort() { element* p=begin; bool f=false; element* tmp; tmp=new element;
if (p!=NULL) { do { p=begin; f=false; while (p->next!=NULL) { if (p->score<p->next->score) { tmp->score=p->next->score; p->next->score=p->score; p->score=tmp->score;
strcpy(tmp->name, p->next->name); strcpy(p->next->name, p->name); strcpy(p->name, tmp->name);
tmp->id=p->next->id; p->next->id=p->id; p->id=tmp->id;
strcpy(tmp->surname, p->next->surname); strcpy(p->next->surname, p->surname); strcpy(p->surname, tmp->surname);
f=true;
} p=p->next;
}
}
while (f);
cout<<"Sorted..."<<endl; getch(); }
else { cout<<"Nothing to sort!"<<endl; getch(); }
return; }
void list::wtf() { ofstream file; file.open("prev_comp.txt");
element* p=begin;
while (p!=0) { file<<p->id<<" "; file<<p->name<<" "; file<<p->surname<<" "; file<<p->score<<endl<<" ";
p=p->next; } file.close();
return;
}
void list::rdf() { ifstream file; file.open("prev_comp.txt"); element* p; begin=NULL;
while (!file.eof()) { p=new element; file>>p->id; file>>p->name; file>>p->surname; file>>p->score; if (begin==NULL) { p->next=NULL; begin=p; }
else { p->next=begin; begin=p; }
} begin=p->next; //moves the start of list one step back, away from gibberish
file.close(); return; }
void list::create(char a[], char b[], int c) { element* p; p=new element;
if (begin==NULL) {
for (int i=0;i<15;i++) { p->name[i] = a[i]; }
for (int i=0;i<15;i++) { p->surname[i] = b[i]; } p->id=c; p->score=0; begin=p; p->next=NULL; }
else { for (int i=0;i<15;i++) { p->name[i] = a[i]; }
for (int i=0;i<15;i++) { p->surname[i] = b[i]; } p->id=c; p->score=0; p->next=begin; begin=p; }
}
void list::setscore(int id, int s) { element *p=begin;
while (p!=NULL) { if (id==p->id) { p->score=s; return; } p=p->next; }
system("cls"); cout<<"No such a contestant!"<<endl; getch();
} void list::view() { element *p;
p=begin;
if (p!=NULL) { while (p!=NULL) {
cout<<"\tcontestant #"<<p->id<<endl; cout<<"Name:"<<p->name<<endl; cout<<"Surame:"<<p->surname<<endl; cout<<"Score:"<<p->score<<endl;
p=p->next; } } else {
cout<<"Start a compititon first."<<endl; getch(); return; }
}
int check () {
char* temp=new char[10]; int a=0; do { bool b=true; cin>>temp;
for(int i=0;i<strlen(temp);i++) if (isdigit(temp[i])==0) { b=false; break; }
if (b) { a=atoi(temp); temp=0; } else cout<<endl<<"Digits only!"<<endl; } while (temp!=0);
return (a);
}
void main() { bool f=true; bool k=false; char a[15], b[15]; int c, id, s; list x; for (;;) { system("cls");
cout<<"\t[MAIN]"<<endl; cout<<"1.Start new competition"<<endl; cout<<"2.View concursants"<<endl; cout<<"3.Set concursant`s score"<<endl; cout<<"4.Sort contestants by score"<<endl; cout<<"5.Load priveous competition."<<endl; cout<<"6.Quit."<<endl; cout<<endl;
switch (getch()) { case '1': { x.~list(); f=true; k=true; while (f) { system("cls"); cout<<"Add a contestant? (y/n):";
switch (getch()) { case 'y': { system("cls"); cout<<"Enter contestant`s name<<"; cin>>a; cout<<"Enter contestant`s surname<<"; cin>>b; cout<<"Enter contestant`s id<<"; c=check (); x.create(a, b, c); break; } case 'n': { f=false; break; } default: { cout<<"Oops! Don`t know such a key!"; getch(); break; } } } system("cls"); break; } case '2': if (k) { x.view(); getch(); system("cls"); } else { cout<<"Start a compititon first."<<endl; getch(); }
break;
case '3': if (k) { system("cls"); cout<<"Contestant`s id?<<"; id=check (); system("cls"); cout<<"Contestant`s score?<<"; s=check (); x.setscore(id, s); }
else { cout<<"Start a compititon first."<<endl; getch(); }
break;
case '4': x.sort(); break; case '5':
x.~list(); x.rdf(); k=true; cout<<"Previous comprtition loaded from prev_comp.txt"<<endl; getch(); break;
case '6': cout<<"Now exeting... Current competition saved to prev_comp.txt"<<endl; getch(); x.wtf(); exit(1);
default: cout<<"Oops! Don`t know such a key!"; getch(); break;
}
}
}
Сообщение отредактировал kulik - Вторник, 29.12.2009, 03:57 |
|
| |
kulik | Дата: Среда, 27.01.2010, 13:58 | Сообщение # 2 |
Генерал-майор
Группа: Администраторы
Сообщений: 290
Статус: Offline
| Программа создаёт целочисленный массив, затем добавляет после каждого чётного номера элемента "0": Code // test3.cpp : Defines the entry point for the console application. //
#include "stdafx.h" #include <iostream> #include <conio.h> using namespace std;
void main() { int n; int x=0; cout<<"Enter array length<<"; cin>>n;
system("cls"); int *a;
a=new int[n];
int f=n;
for (int i=0;i<n;i++) { cout<<"Enter array element<<"; cin>>a[i]; system("cls");
}
cout<<"The array is:"<<endl;
for (int i=0;i<n;i++) { cout<<a[i]<<" "; }
getch(); system("cls");
x=2*n; int *b; b=new int[x]; int z;
for (int i=0;i<n;i++) { b[2*i]=a[i]; b[2*i+1]=0; }
cout<<"The new array now is:"<<endl;
for (int i=0;i<x;i++) { cout<<b[i]<<" "; }
getch(); system("cls");
cout<<"Now recreating the old array..."<<endl;
delete a;
a=new int[x];
for (int i=0;i<x;i++) { a[i]=b[i]; }
getch(); system("cls");
cout<<"The old array now is:"<<endl;
for (int i=0;i<x;i++) { cout<<a[i]<<" "; }
getch(); }
|
|
| |
kulik | Дата: Среда, 27.01.2010, 19:14 | Сообщение # 3 |
Генерал-майор
Группа: Администраторы
Сообщений: 290
Статус: Offline
| Программа создаёт целочисленный массив, затем добавляет после каждого ЧЁТНОГО ЭЛЕМЕНТА "0": Code
// test3.cpp : Defines the entry point for the console application. //
#include "stdafx.h" #include <iostream> #include <conio.h> using namespace std;
void main() { int n=0; int x=0; int z=-1; int p=0; cout<<"Enter array length<<"; cin>>n;
system("cls"); int *a;
a=new int[n];
for (int i=0;i<n;i++) { cout<<"Enter array element<<"; cin>>a[i]; system("cls");
}
cout<<"The array is:"<<endl; cout<<endl;
for (int i=0;i<n;i++) { cout<<a[i]<<" "; } x=n;
for (int i=0;i<=n;i++) { if (a[i]%2==0) { z=i; p=i; x++; int *b; b=new int[x];
for (int j=0;j<z;j++) { b[j]=a[j]; } b[z]=a[z]; b[z+1]=0;
for (int j=z+2;j<x;j++) { b[j]=a[j-1]; }
getch(); //system("cls");
cout<<endl; cout<<endl; cout<<"The new array now is:"<<endl;
for (int j=0;j<x;j++) { cout<<b[j]<<" "; } delete a;
a=new int[x];
for (int j=0;j<x;j++) { a[j]=b[j]; }
getch();
i=p+1; } }
cout<<endl; cout<<"No (moar) numbers, devidible by 2. Now exiting..."; getch(); }
|
|
| |
kulik | Дата: Пятница, 29.01.2010, 10:53 | Сообщение # 4 |
Генерал-майор
Группа: Администраторы
Сообщений: 290
Статус: Offline
| Программа создаёт целочисленный массив, затем удаляет из него все эл-ты кончающися на 3: Code
//---------------------------------------------------------------------------
#include <clx.h> #include <iostream.h> #include <conio.h> #pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused void main() {
int n=0,c=0,p=0; cout<<"Length<<"; cin>>n;
clrscr();
int a[100]; int b[100];
for(int i=0;i<n;i++) { cin>>a[i]; }
c=n; for(int i=0;i<n;i++) {
if ((a[i]%10)==3) {
for (int j=i;j<n;j++) { a[j]=a[j+1];
}
i--; c--;
}
}
for(int i=0;i<c;i++) { cout<<a[i]<<" "; }
getch();
} //---------------------------------------------------------------------------
|
|
| |
kulik | Дата: Пятница, 29.01.2010, 11:02 | Сообщение # 5 |
Генерал-майор
Группа: Администраторы
Сообщений: 290
Статус: Offline
| Программа склеивает строки и пишет в файл: Code
// test8.cpp : Defines the entry point for the console application. //
#include "stdafx.h" #include <iostream> #include <conio.h> #include <fstream> using namespace std;
void main() { char z[100]; char a[100]; cout<<"Type something<<"; gets_s(z);
system("cls");
cout<<"Type some moar<<"; gets_s(a);
system("cls");
strcat(z, a);
cout<<"???????"; getch(); system("cls");
ofstream file;
file.open("profit.txt");
for(int i=0;i<strlen(z);i++) { file<<z[i]; }
cout<<"Done. See profit.txt in root...";
getch();
}
|
|
| |
kulik | Дата: Воскресенье, 31.01.2010, 19:43 | Сообщение # 6 |
Генерал-майор
Группа: Администраторы
Сообщений: 290
Статус: Offline
| Часики, использующие ф-ию sleep(мсек) в комментах - задержка, релизованная через долгий цикл... Code
// clock.cpp : Defines the entry point for the console application. //
#include "stdafx.h" #include <iostream> #include <conio.h> #include <windows.h> using namespace std;
void main() { int h,m,s; int x=0; cout<<"Enter local time:"<<endl; cout<<"Hours<<"; cin>>h; cout<<"Minutes<<"; cin>>m; cout<<"Seconds<<"; cin>>s; system("cls");
for(;;) {
s++;
Sleep(1000);
/* for(int i=0;i<100000;i++) { for(int j=0;j<1000;j++) {
}
} */
system("cls");
if (s==60) { s=0; m++; }
if (m==60) { m=0; h++; }
if (h==24) h=0;
if (x==1) { cout<<h<<":"<<m<<":"<<s; x=0; } else { cout<<h<<" "<<m<<" "<<s; x++;
}
}
}
Сообщение отредактировал kulik - Воскресенье, 31.01.2010, 19:58 |
|
| |
ALTer | Дата: Четверг, 11.02.2010, 02:00 | Сообщение # 7 |
Подполковник
Группа: Проверенные
Сообщений: 107
Статус: Offline
| рад представить!) первая моя игра, в которой есть элементы передвижения, боёвки, и динамически изменяющихся множества характеристик персоонажа! Code //---------------------------------------------------------------------------
#include <vcl.h> #pragma hdrstop #pragma argsused #include <iostream> #include <conio.h> #include <windows.h> using namespace std;
class pers { private: char name[25]; int sila; int constit; int dex; int armor; int wpn[2]; int hp;
public: void create(); void dmg(pers); //(kto) void show();
};
char buff[200]; char * rus(char * txt){CharToOem(txt,buff);return buff;} // руссификатор void pers::create() { cout<<rus("Введи имя перса: "); gets(name); system("cls");
cout<<rus("Введи силу твоего перса: "); cin>>sila; system("cls");
cout<<rus("Ввели сложение персоонажа: "); cin>>constit; system("cls");
cout<<rus("Введи ловкость персоонажа: "); cin>>dex; system("cls");
cout<<rus("Введи количество брони: "); cin>>armor; system("cls");
cout<<rus("Количество граней кубика оружия:")<<endl; //cout<<"Modificator<<"; cin>>wpn[0];
cout<<rus("Сила оружия<<"); cin>>wpn[1];
system("cls"); hp=constit*10; getch(); } void pers::show() { cout<<rus("Имя:")<<"\""<<name<<"\""<<endl; cout<<rus("Ловкость: "); cout<<dex<<endl; cout<<rus("Сила: "); cout<<sila<<endl; cout<<rus("Сложение: ");cout<<constit<<endl; cout<<rus("Hp: ");cout<<hp<<endl; cout<<rus("Количество брони: ");cout<<armor<<endl; cout<<rus("Количество граней кубика оружия:");cout<<wpn[0]; cout<<rus("Сила оружия<<");cout<<wpn[0];
getch(); system("cls"); } unsigned int random(unsigned int n) { srand(time(NULL)); return (rand()%(n+1)); }
void pers::dmg(pers foe) { int dmg=0; int dice=0; //int hp=0; dice=1+random(foe.wpn[1]); dmg=(foe.sila+foe.wpn[0]*dice)-(constit+armor);
if (dmg>0) { hp=hp-dmg; } else dmg=0;
cout<<dmg<<" ";cout<<rus("Нанёс демаги.")<<endl; cout<<rus("У противника оствлось ");cout<<hp<<rus(" жизни")<<endl; getch();
} class persgo { public: int x; int y; int x0; int y0; int k; void koord(); void mygo(char c); void mobgo(persgo a); int show(); void pole(); }; void persgo::koord()// выбрать начальные координаты { cout<<rus("введи 1 координату перса: "); cin>>x; system("cls"); cout<<rus("введи 2 координату перса: "); cin>>y; system("cls");
} void persgo::mygo(char c)// передвигать себя { y0=y; x0=x; if (c=='w' && y>1) y=y-2; if (c=='s'&& y<13) y=y+2; if (c=='a'&& x>1) x=x-2; if (c=='d'&& x<13) x=x+2; } void persgo::mobgo(persgo a)// передвигать перса { y0=y; x0=x; if (y>a.y) y=y-1; if (y<a.y) y=y+1; if (x>a.x) x=x-1; if (x<a.x) x=x+1; }
int main() { //==================================================================
//---------------------------------------------------------------------------
const int n=15; int x,y,q[1],k; char c, A[n][n];; persgo a,b; for (int i=0;i<n;i++) for (int j=0;j<n;j++) A[i][j]=' '; cout<<rus("Введи координаты первого(своего) персоонажа");cout<<endl; a.k=1; a.koord(); cout<<rus("Введи координаты второго персоонажа");cout<<endl; b.koord(); b.k=2; system("cls"); cout<<rus("Генериться поля битвы...");cout<<endl; getch(); for(;;) { A[a.x][a.y]=1; A[b.x][b.y]=2; for (int j=0;j<n;j++) {cout<<endl; for (int i=0;i<n;i++) cout<<A[i][j]<<" "; } c=NULL; c=getch(); a.mygo(c); A[a.x0][a.y0]=' '; b.mobgo(a); A[b.x0][b.y0]=' '; system("cls");
if(a.x==b.x && a.y==b.y) {
//================================================================== pers a1,b1,s; for (;;) { system("cls"); cout<<rus("1. Создать нового персоонажа ")<<endl;; cout<<rus("2. Сгенерить противника ")<<endl; cout<<rus("3. Начать сражение ")<<endl; cout<<rus("4. Вывести персоонажа")<<endl; cout<<rus("5. Вывести характеристики противника")<<endl; cout<<rus("Esc. Выход")<<endl;
switch (getch()) { case '1': a1.create(); break; case '2': b1.create(); break; case '3': b1.dmg(a1); break; case '4': a1.show(); break; case '5': b1.show(); break; case 27: exit(1); break; } } getch(); return 0; } }}
Закон Паркинсона: первые 90% кода отнимают 90% времени. Оставшиеся 10% кода отнимают вторые 90%.
|
|
| |
kulik | Дата: Четверг, 11.02.2010, 21:05 | Сообщение # 8 |
Генерал-майор
Группа: Администраторы
Сообщений: 290
Статус: Offline
| функции сохранения и загрузки персонажей в текстовики <имя_персонажа> требуется: #include <fstream> #include <stdlib.h> прототипы: void save(); void load(char*); // (char*) имя персонажа реализации: void pers::save() { ofstream file; file.open(this->name, ios::out); file<<this->sila<<" "; file<<this->constit<<" "; file<<this->dex<<" "; file<<this->hp<<" "; file<<this->armor<<" "; file<<this->wpn[0]<<" "; file<<this->wpn[1]<<" "; file.close(); } void pers::load(char* name) { ifstream file; file.open(name, ios::in); strcpy(this->name,name); file>>this->sila; file>>this->constit; file>>this->dex; file>>this->hp; file>>this->armor; file>>this->wpn[0]; file>>this->wpn[1]; file.close(); } добавляем в класс и пользуемся. З.Ы. Предлагаю не использовать теги [код] на мой взгляд - мешают...
|
|
| |
kulik | Дата: Вторник, 15.11.2011, 19:03 | Сообщение # 9 |
Генерал-майор
Группа: Администраторы
Сообщений: 290
Статус: Offline
| Метод Рунге - Кутты Фельдберга решения ДУ (Perl)
sub F #вычисляет функцию в точке { my $x=$_[0]; my $y=$_[1]; 2*$x+3*$y; #F=2x+3y уравнение в виде коши } $Y = &F(1,0); #начальные условия f(Xo,Yo) $h = 0.5; #шаг $x = 0; #начало отрезка интегрирования $end = 2; #конец do { $K0 = $h*&F($x,$Y); #собственно здесь и далее - коофиценты $K1 = $h*&F($x + 2/9*$h, $Y + 2/9*$K0); $K2 = $h*&F($x + 1/3*$h, $Y + 1/12*$K0 + 1/6*$K1); $K3 = $h*&F($x + 3/4*$h, $Y + 69/128*$K0 - 143/128*$K1 + 135/64*$K2); $K4 = $h*&F($x + $h, $Y - 17/12*$K0 + 27/4*$K1 - 27/5*$K2 + 16/15*$K3); $K5 = $h*&F($x + 5/6*$h, $Y - 65/432*$K0 + 15/16*$K1 + 13/16*$K2 + 4/27*$K3 + 5/144*$K4); $Y = $Y + 21/9*$K0+9/20*$K2+16/45*$K3+1/12*$K4; $x=$x+$h; #print "$Y\n"; } while ($x < $end); print $Y;
|
|
| |
kulik | Дата: Вторник, 15.11.2011, 19:05 | Сообщение # 10 |
Генерал-майор
Группа: Администраторы
Сообщений: 290
Статус: Offline
| Простейшее XOR шифрование (Perl):
Code open IN, "<in.txt"; #Файл с входным текстом open OUT, ">>out.txt"; #С выходным текстом $key = 'kulikov'; #Ключ шифрования @key = split(undef, $key); #Нарезаем строку с ключом на массив while (<IN>) #Последовательно читаем строку ф-ла { @src = split(undef, $_); #Нарезаем прочтённую строку на массив $j=0; $i=0; do #основной цикл - последовательное "перемножение" символов ключа на входную строку { print OUT (@src[$i] ^ @key[$j]); #Собственно лоическое исключающее или и запись в ф-л $j++; $i++; if ($j == length(@key)) #стопоримся когда заканчивается ключ, чтобы начать испольовать его заново { $j = 0; #для этого обнуляем итеранд по ключу } } while (@src[$i] ne undef) #условие конца строки - заканчивается строка беоём из ф-ла новую }
|
|
| |
kulik | Дата: Воскресенье, 22.01.2012, 22:54 | Сообщение # 11 |
Генерал-майор
Группа: Администраторы
Сообщений: 290
Статус: Offline
| QtGraphicsView: рисует поле из клеточек в окне 640х480:
QGraphicsTest.pro Code SOURCES += \ main.cpp
QT += core qt
main.cpp Code #include "QtGui"
int main(int argc, char *argv[]) { QApplication app(argc, argv); QGraphicsView canvas; QGraphicsScene *scene = new QGraphicsScene(0,0, 640, 480, &canvas); //scene->setBackgroundBrush(Qt::green); canvas.setScene(scene);
QPen *pen1 = new QPen(); pen1->setWidth(1); pen1->setColor(Qt::black);
for (int i = 0; i < 680; i = i + 40 ) { scene->addLine(i,0,i,480, *pen1); }
for (int i = 0; i < 520; i = i + 40 ) { scene->addLine(0, i, 640, i, *pen1); }
canvas.show(); return app.exec(); }
|
|
| |
ALTer | Дата: Понедельник, 23.01.2012, 04:19 | Сообщение # 12 |
Подполковник
Группа: Проверенные
Сообщений: 107
Статус: Offline
| Так не лучше? Code for (int i = 0; i <= 640; i = i + 40 ) { for (int j = 0; j <= 480; j = j + 40) { scene->addLine(i,j,i,j, *pen1); } }
Закон Паркинсона: первые 90% кода отнимают 90% времени. Оставшиеся 10% кода отнимают вторые 90%.
Сообщение отредактировал ALTer - Понедельник, 23.01.2012, 04:38 |
|
| |
kulik | Дата: Понедельник, 23.01.2012, 07:54 | Сообщение # 13 |
Генерал-майор
Группа: Администраторы
Сообщений: 290
Статус: Offline
| Хз, может и лучше. Если эффект такойже...
UPD:
Х№й там! Незнаю что не так но вот эффект:
|
|
| |
noise | Дата: Понедельник, 23.01.2012, 16:46 | Сообщение # 14 |
Лейтенант
Группа: Проверенные
Сообщений: 54
Статус: Offline
| Павел нарисовал кучу точек линиями! Зачтено!
|
|
| |
ALTer | Дата: Понедельник, 23.01.2012, 20:00 | Сообщение # 15 |
Подполковник
Группа: Проверенные
Сообщений: 107
Статус: Offline
| Я думал задача такая... Ну хочешь линии - шаг i или/и j поменяй на 1...
Закон Паркинсона: первые 90% кода отнимают 90% времени. Оставшиеся 10% кода отнимают вторые 90%.
Сообщение отредактировал ALTer - Понедельник, 23.01.2012, 20:00 |
|
| |
|
| |