Отправляет email-рассылки с помощью сервиса Sendsay

Все обо всем

  Все выпуски  

Все обо всем Выпуск от 27.02.2004


Информационный Канал Subscribe.Ru


Рассылка №14
Короткие программы на С/С++
Мне пришлось помочь человеку написать программы по работе со списком, кольцом, двухсвязным списком и стеком. Я решил привести примеры программ для того, чтобы вы могли ими воспользоваться, а возможно и найти ошибки..
Условие: написать программу демонстрирующую работу со стеком, кольцом, списком и двухсвязным списком при вызове функции
#include <stdio.h>

#include "MyStack.h"
#include "MyCircle.h"
#include "MyList.h"
#include "MyDList.h"

void PrintStack(MyStack A)
{
  printf("Stack info:\n");
  while(1)
  {
    int j = A.Pop();
    if (j != -1)
      printf("%d\n", j);
    else
      break;
  }
}

void PrintCircle(MyCircle In)
{
  printf("Circle info:\n");
  for (int i=0; i<In.Cnt; i++)
    {
    printf("%d\n", In.Get());
    In.Next();
    }
}

void PrintList(MyList L)
{
  printf("List info:\n");
  for(int i=0; i<L.Cnt; i++)
    {
    printf("%d\n", L.Get(i));
    }
}

void PrintDList(MyDList D)
{
  printf("DList info:\n");
  for(int i=0; i<D.Cnt; i++)
    {
    printf("%d\n", D.Get(i));
    }
}

int main()
{
  MyStack A;
  A.Push(10);
  A.Push(20);
  A.Push(30);
  A.Push(40);
  PrintStack(A);

  MyCircle C;
  C.Ins(101);
  C.Ins(202);
  C.Ins(303);
  C.Ins(404);
  C.Next();
  PrintCircle(C);
  C.Free();

  MyList L;
  L.Ins(22);
  L.Ins(23);
  L.Ins(24);
  L.Ins(25);
  PrintList(L);
  L.Free();

  MyDList D;
  D.Add(1000);
  D.Add(1001);
  D.Add(1002);
  D.Add(1003);
  PrintDList(D);
  D.Free();

  return 0;
}
Библиотеки MYSTACK.H, MYCIRCLE.H, MYLIST.H, MYDLIST.H
class MyStack {
public:
  MyStack();
  int Push(int);
  int Pop();
  int Get();
private:
  int Arr[100];
  int Cnt;
};

MyStack::MyStack()
{
  Cnt = -1;
}

int MyStack::Get()
{
  if (Cnt==-1)
    return Arr[Cnt];
  else
    return 0;
}

int MyStack::Push(int Val)
{
  Arr[++Cnt] = Val;
  return Cnt;
}

int MyStack::Pop()
{
  if(Cnt<0)
    return -1;
  else
    return Arr[Cnt--];
}

#ifndef __ALLOC_H #include <alloc.h> #endif typedef struct _MyCircle { int Val; void* Next; }; class MyCircle { public: MyCircle(); Ins(int); int Get() {return Point->Val;}; void Next(void); int Cnt; void Free(); private: _MyCircle* Point; }; void MyCircle::Next(void) { Point = (_MyCircle*) Point->Next; } MyCircle::MyCircle() { Point = NULL; Cnt = 0; } int MyCircle::Ins(int Val) { Cnt++; _MyCircle* A = (_MyCircle*) malloc(sizeof(_MyCircle)); A->Val = Val; if (Point) { _MyCircle* _1 = (_MyCircle*) Point; _MyCircle* _2 = (_MyCircle*) Point->Next; if (_1 == _2) { _1->Next = A; A->Next = _1; } else { _1->Next = A; A->Next = _2; } } else { A->Next = (_MyCircle*) A; } Point = A; return 0; } void MyCircle::Free(void) { for (int i=0; i<Cnt; i++) { _MyCircle* Nx = (_MyCircle*) Point->Next; free(Point); Point = Nx; } }
#ifndef __ALLOC_H #include <alloc.h> #endif typedef struct _MyList { int Val; void* Next; }; class MyList { public: MyList(); Ins(int); int Get(int); int Cnt; void Free(); private: _MyList* Top; }; MyList::MyList() { Top = NULL; Cnt = 0; } int MyList::Ins(int Val) { Cnt++; _MyList* A = (_MyList*) malloc(sizeof(_MyList)); A->Val = Val; if (Top) { _MyList* _1 = (_MyList*) Top; while(_1->Next) _1 = (_MyList*) _1->Next; _1->Next = A; A->Next = NULL; } else { A->Next = NULL; Top = A; } return 0; } void MyList::Free(void) { for (int i=0; i<Cnt; i++) { _MyList* Nx = (_MyList*) Top->Next; free(Top); Top = Nx; } } int MyList::Get(int p) { for(int i=0; i<p; i++) if(Top) Top = (_MyList*) Top->Next; if (Top) return Top->Val; else return -1; }
#ifndef __ALLOC_H #include <alloc.h> #endif typedef struct _MyDList { int Val; void* Next; void* Prev; }; class MyDList { public: MyDList(); Add(int); int Get(int); void Next(void); void Prev(void); int Cnt; void Free(); private: _MyDList* Point; }; int MyDList::Get(int Pos) { while (Point->Prev) Point = (_MyDList*) Point->Prev; for (int i=0; i<Pos; i++) if(Point) Point = (_MyDList*) Point->Next; return Point->Val; } void MyDList::Next(void) { Point = (_MyDList*) Point->Next; } MyDList::MyDList() { Point = NULL; Cnt = 0; } int MyDList::Add(int Val) { Cnt++; _MyDList* A = (_MyDList*) malloc(sizeof(_MyDList)); A->Val = Val; if (Point) { A->Next = NULL; A->Prev = Point; Point->Next = A; } else { A->Next = NULL; A->Prev = NULL; } Point = A; return 0; } void MyDList::Free(void) { while (Point) Point = (_MyDList*) Point->Prev; for (int i=0; i<Cnt; i++) { _MyDList* Nx = (_MyDList*) Point->Next; free(Point); Point = Nx; } }
Проблема с закачкой в FlashGet
Закачивая большие объемы информации я заметил что FlashGet иногда перестает качать файл, то есть он открывает нужное мне число потоков (2..10) и просто стоит, он не принимает ни байта информации. Я нашел выход из данного положения. Заходя в информацию о каждом потоке я записываю положение указателя в файле. Для примера возьмем 3 потока, и указатели 100 000, 200 000 и 300 000. Итак, записав значения указателей я перевожу их в 16-ную систему счисления (можно воспользоваться стандартным калькудятором Windows в инженерном режиме), т.е. получим 01 86 A0, 03 0D 40 и 04 93 E0 соответственно. После этого нам будет необходима программа Volcov Commander (скачать можно с моего сайта). Запускаем ее и идем в каталог с установленным FlashGet. Там в каталоге находим файл со списком закачек. Делаем его копию а с оригиналом мы немного повозимся (сам FlashGet не должен в это время работать). Открываем файл клавишей F4 и нажимаем F4 еще раз для перехода в 16-й режим. Теперь мы должны найти в этом файле наши 16-ные значения записанные в обратном порядке (A0 86 01, 40 0D 03 и E0 93 04). Найдя каждое значение меняем вторую цифру уменьшая ее значение на 2-3 пункта. Получим A0 81 01, 40 0A 03 и E0 90 04. Нажимаем F2 для сохранения и F10 для выхода. Всё, теперь можно запустить FlashGet и качать далее.

Заработок в Интернет - это реальность! Зарегистрируйтесь по ссылке http://www.CashRead.com и получайте письма стоимостью до 20 долларов. Обычно приходит по 6 линков в письме. Если письмо "дорогое", то ссылка одна. Участвуя в системе всего год, я накликал уже более 150$.

CashRead

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное