Closed TopicStart new topicStart Poll

Страницы: (1) 1 
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
В общем,господа компьютерщики,задачка,я уверен,простейшая для программиста,но я - ламер в программировании...Прошу вас,помогите решить!!! За помощь ГАРАНТИРУЮ 4 плюса вам в репутацию, а также 100 сексо на ваш счет,и мою огромную вам благодарность(плюсы в репутацию и сексо - тому,кто решит задачку верно,и напишет решение в этой теме).
А звучит задача следующим образом:
Дан файл f,компоненты которого являются целыми числами...Создать обьект,имеющий метод,позволяющий переписать данный файл таким образом,чтобы не было двух соседних чисел с одним знаком,а числа шли: - положительные - в порядке возрастания, отрицательные - в порядке убывания.
ПРОШУ ВАС,ПОМОГИТЕ!!!

Это сообщение отредактировал Tanzilit - 16-05-2006 - 17:08
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
Лови. Компилировал VS8.0.
drinks.gif

CODE

#include <list>
#include <fstream>
#include <algorithm>
#include <iostream>

class MyClass
{
public:
 void Convert();
};

void MyClass::Convert()
{
 // читаем файл в список и закрываем его
 std::ifstream ifs("f");
 if(!ifs)
 {
   std::cout << "file not found" << std::endl;
   return;
 }

 std::list<int> pnums;
 std::copy(std::istream_iterator<int>(ifs), std::istream_iterator<int>(), std::back_inserter(pnums));
 ifs.close();

 // сортируем числа по возрастанию, копируем отрицательные в другой список и сортируем их по убыванию
 std::list<int> nnums;
 pnums.sort();
 nnums.splice(nnums.begin(), pnums, pnums.begin(), std::find_if(pnums.begin(), pnums.end(), std::bind2nd(std::greater<int>(), -1)));
 nnums.sort(std::greater<int>());

 // если нет положительных или отрицательных чисел - ошибка
 if(nnums.empty() || pnums.empty())
 {
   std::cout << "there are no positive or negative numbers" << std::endl;
   return;
 }

 // получаем итераторы двух списков с выбираем внешние на основе большего количества чисел
 std::list<int>::iterator iit = pnums.begin(), iit_end = pnums.end(), eit = nnums.begin(), eit_end = nnums.end();
 if(pnums.size() > nnums.size())
 {
   std::swap(iit, eit);
   std::swap(iit_end, eit_end);
 }

 // записываем поочередно положительные и отрицательные числа в файл
 std::ofstream ofs("f", std::ios::out | std::ios::trunc);
 for(; eit != eit_end; ++eit)
 {
   ofs << *eit << " " << *iit << " ";
   // в более коротком одном из списков последнее число записывает в файл недостающее число раз для 1-ого условия
   if(iit != iit_end)
     ++iit;
   if(iit == iit_end)
     --iit;
 }
}

int main()
{
 MyClass my;
 my.Convert();
}


Тестировал на файле "f":
QUOTE

1 3 2 -6 878 -67 100 4589 -0


Результат:
QUOTE

0 -6 1 -67 2 -878 3 -878 100 -878 4589 -878


Это сообщение отредактировал GregZ - 16-05-2006 - 22:27
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
Вот спасибо!!!
Единственная проблема - мне нужно,чтобы заработало на древнем досовском компиляторе Barland C++ version 3.0...Если заработает,как и обещал,плюсы и сексо(мне эти сексо все равно не нужны)
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
QUOTE (Tanzilit @ 16.05.2006 - время: 23:22)
Вот спасибо!!!
Единственная проблема - мне нужно,чтобы заработало на древнем досовском компиляторе Barland C++ version 3.0...Если заработает,как и обещал,плюсы и сексо(мне эти сексо все равно не нужны)

Не заработает :)
Небыло там шаблонов и STL :)

Надо было тебе сразу указывать версию компилятора. А преподу советую прочесть лекцию на тему современных языков программирования.
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
кОРОЧЕ ALGORITHM И LIST - ТАКИХ ПОДКЛЮЧАЕМЫХ БИБЛИОТЕК В моем старом компиляторе нет...А мне нужно,чтобы на нем шла...но все равно,спасибо...
p.s.Нельзя ли ту же прогу,но без иопользования этих 2-х подключаемых библиотек???
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
Greqz,тебе все равно ОГРОМНОЕ СПАСИБО,извини,что по своей дурости не написал,что надо...
Слушай,ты видимо,программер,и для тебя это раз плюнуть...В общем,если у тебя ADSL интернет...Или у самого есть старый компилятор borland c++ 3.0...В общем...Не мог бы ты сделать,чтобы пошло на старом компиляторе? Просто я не уверен,что преподавателю понравится такой ваниант.как ты предложил...
Что же касается современных языков,то я первокурсник,мы изучаем самые основы,а потом уже,на старших курсах,будем изучать все современное...
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
Вот ссылка,по которой можно скачать Borland c++ 3.0
http://underworld.hut1.ru/download/program...++/TURBOC30.rar
Весит ВСЕГо около 2 мегабайтов!!!
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
Прошу прощения, но задача не имеет решения, как некорректно поставленная. Во-первых непонятно, что делать, если количество положительных и отрицательных чисел не совпадает, а во-вторых неясно, как трактовать 0, поскольку оный бывает как плюс, так и минус. Да и вообще, за "создать обьект,имеющий метод" на месте клавиатурами убивать надо. :) Во времена моей учебы преподаватель, уличенный в некорректности постановки задачи, автоматом в репу плюс :) записывал.


Я не умничаю, мне просто интересно, как можно сделать то, чего сделать нельзя? Вы просто подумайте, КАК можно переписать файл, состоящий только из последовательности цифры 0 и пробелов (отвечает условиям задачи), чтобы он соответствовал условию той же задачи??? Я плакаль (с).

Так что по примеру GregZ'а советую преподу "убей сибя ап стену!"...
AngeLR
дата: [ i ]
  • Group Icon
  • Спонсор форума
  • Репутация: 1195
  • Статус: чотокакто
  • Member OfflineМужчинаСвободен
QUOTE (JeyLo @ 17.05.2006 - время: 13:55)
Прошу прощения, но задача не имеет решения, как некорректно поставленная. Во-первых непонятно, что делать, если количество положительных и отрицательных чисел не совпадает, а во-вторых неясно, как трактовать 0, поскольку оный бывает как плюс, так и минус. Да и вообще, за "создать обьект,имеющий метод" на месте клавиатурами убивать надо. :) Во времена моей учебы преподаватель, уличенный в некорректности постановки задачи, автоматом в репу плюс :) записывал.


Я не умничаю, мне просто интересно, как можно сделать то, чего сделать нельзя? Вы просто подумайте, КАК можно переписать файл, состоящий только из последовательности цифры 0 и пробелов (отвечает условиям задачи), чтобы он соответствовал условию той же задачи??? Я плакаль (с).

Так что по примеру GregZ'а советую преподу "убей сибя ап стену!"...

Гы... а я уже не реагирую, у сестры моей жены подобный препод, ни одной задачи грамотно поставить не может, но упорно пытается... меня это уже просто умиляет... как говорится - сказочный долбо*б © smile.gif
WorldSin
дата: [ i ]
  • *
  • Любитель
  • Репутация: 14
  • Статус: .
  • Member OfflineМужчинаВлюблен
У нас препод тоже долб.Рассказывает всё,но почему то никто не понимает:)
А тё советую всё таки показать хоть такую версию.
+ от препода получишь,да и репутацию в его глазах тоже повысишь(типо - во умеет парень програмировать).
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
QUOTE (Tanzilit @ 17.05.2006 - время: 00:07)
Вот ссылка,по которой можно скачать Borland c++ 3.0
http://underworld.hut1.ru/download/program...++/TURBOC30.rar
Весит ВСЕГо около 2 мегабайтов!!!

Сори, не за репутацию и сексо делал. Просто выдалась свободная минутка. Боюсь для старого борланда не смогу написать - банально нет времени. Могу для тебя откомпилировать этот код под DOS другим современным досовым компилятором - djgpp. По крайней мере сможет продемонстрировать функциональность преподавателю. Если что - обращайся. Либо здесь, либо стучись в аську. Информация в профайле.
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
QUOTE (GregZ @ 18.05.2006 - время: 00:06)
QUOTE (Tanzilit @ 17.05.2006 - время: 00:07)
Вот ссылка,по которой можно скачать Borland c++ 3.0
http://underworld.hut1.ru/download/program...++/TURBOC30.rar
Весит ВСЕГо около 2 мегабайтов!!!

Сори, не за репутацию и сексо делал. Просто выдалась свободная минутка. Боюсь для старого борланда не смогу написать - банально нет времени. Могу для тебя откомпилировать этот код под DOS другим современным досовым компилятором - djgpp. По крайней мере сможет продемонстрировать функциональность преподавателю. Если что - обращайся. Либо здесь, либо стучись в аську. Информация в профайле.

Откомпилируй,пожалуйста...
Очень поможешь....
Буду весьма благодарен...
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
QUOTE (Tanzilit @ 18.05.2006 - время: 18:09)
Откомпилируй,пожалуйста...
Очень поможешь....
Буду весьма благодарен...

Теперь только завтра.
На RSDN правильно обратился, но там тебе сначала косточки перемоют :) сам не рад будешь.
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
Скачал... Аж слезы на глазах... Ностальгияяяяяя..... В аттачменте скомпилированный этим самым TC...

QUOTE
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <memory.h>

// Что-то странное :)
#define max(a,b) (( a > b ) ? a : b )

// Класс, экземпляр которого (объект) и будет создан
class CMyObject {
public:
// Конструктор
CMyObject ( char* szFileName = 0 ) : m_szFileName(0) {
  SetFile ( szFileName );
};

// Установить имя файла
void SetFile ( char* szFileName ) {
  if ( m_szFileName ) delete m_szFileName;
  m_szFileName = 0;
  if ( szFileName ) {
  if ( m_szFileName = new char[strlen(szFileName)+1] ) {
    strcpy (m_szFileName, szFileName );
  };
  }
};

int Convert ( char* szFileName = 0 ) {
  // Устанавливаем имя файла
  if ( szFileName ) SetFile (szFileName);
  // Проверяем валидность..
  if ( !m_szFileName ) return -1;

  // И начинаем
  // Массив позитивных чисел
  int* pPositiveNumbers = 0; int nPositiveNumbers = 0;

  // Массив отрицательных чисел
  // 0 записываем в положительные
  int* pNegativeNumbers = 0; int nNegativeNumbers = 0;

  FILE *stream;
  char buffer[12]; // Хватит-с..
  int  i = 0;  // На всякий случай...

  // Откроем поток для чтения
  if( !( stream = fopen( m_szFileName, "r" )) ) {
  printf ( "Файл не найден." ); // ... Убей сибя ап стену!
  return 0;
  };

  // Навсегда...
  int bIsEof = 1;
  while ( bIsEof ) {
  // Начинаем-с читать...
  buffer[i] = fgetc( stream );
  if ( buffer[i] == ' ' || buffer[i] == EOF ) {
    if (  buffer[i] == EOF ) {
    bIsEof = 0;
    };
    buffer[i] = 0;
    int nYetAnotherNumber;
    if ( ( nYetAnotherNumber = atoi ( buffer ) ) > 0 ) {
    if ( !( nPositiveNumbers = insertItem ( pPositiveNumbers, nPositiveNumbers, nYetAnotherNumber ) ) ) {
      // Ну все, приехали... Память кончилась, пришел старческий маразм..
      exit(0);
    };
    } else {
    if ( !( nNegativeNumbers = insertItem ( pNegativeNumbers, nNegativeNumbers, nYetAnotherNumber ) ) ) {
      // Ну все, приехали... Память кончилась, пришел старческий маразм..
      exit(0);
    };
    };

    i = -1;
  } else if ( i > 11 || ( ( buffer[i] < '0' || buffer[i] > '9' ) && buffer[i] != '-' ) || (buffer[i] == '-' && i != 0) ) {
    fclose ( stream );
    if ( pPositiveNumbers ) delete pPositiveNumbers;
    if ( pNegativeNumbers ) delete pNegativeNumbers;
    printf ( "Файл имеет неправильный формат." ); // ... Убей сибя ап стену - 2!
    return 0;
  }
  i++;

  };

  // Закрываемся...
  fclose ( stream );

  // Код возврата
  int nResult = 0;

  if ( nNegativeNumbers == nPositiveNumbers || nNegativeNumbers-1 == nPositiveNumbers || nNegativeNumbers+1 == nPositiveNumbers ) {
  if( ( stream = fopen( m_szFileName, "w" )) ) {
    for ( int i = 0; i < max(nNegativeNumbers, nPositiveNumbers); i ++ ) {
    if ( i < nPositiveNumbers ) {
      fprintf ( stream, "%d ", pPositiveNumbers[i] );
    };
    if ( nNegativeNumbers - i > 0 ) {
      fprintf ( stream, "%d ", pNegativeNumbers[nNegativeNumbers - i - 1] );
    };
    };
    fclose ( stream );
    printf ( "Готово!" );
    nResult = 1;
  } else {
    printf ( "Невозможно открыть файл на запись." );
  };
  } else {
  printf ( "Количество положительных и отрицательных чисел не совпадает." ); // ... Убей сибя ап стену - 3!
  };

  if ( pPositiveNumbers ) delete pPositiveNumbers;
  if ( pNegativeNumbers ) delete pNegativeNumbers;

  return nResult;
};

// Деструктор
~CMyObject () {
  if ( m_szFileName ) delete m_szFileName;
};

private:
// Имя файла
char* m_szFileName;

public:
// Вставить элемент в массив
int insertItem ( int* &pArray, int nSize, int nItem ) {
  // Если массив еще пуст, то делаем все быстро.
  if ( !nSize ) {
  return ( pArray = new int[1]) ? pArray[0] = nItem , 1: 0;
  };

  // Декларация переменных
  int* pNewArray = 0;
  // Выделяем память для нового массива данных
  if ( !(pNewArray = new int[nSize+1]) ) {
  // Ошибка выделения памяти. Все в сад смотреть на звезды lil' wink.gif
  delete pArray;
  return 0;
  };

  // Переносимся
  memcpy ( pNewArray, pArray, ( nSize + 1 ) * sizeof(int) );
  delete pArray;
  pArray = pNewArray;

  // Чуть-чуть задекларируемся
  int nInjectionPoint = nSize;
  pArray[nInjectionPoint] = nItem;

  // Наш элемент всплывает вверх
  // с помощью простейшей пузырьковой сортировки
  while ( nInjectionPoint ) {
  if ( pArray[nInjectionPoint] < pArray[nInjectionPoint-1] ) {
    int nYetAnotherVariable = pArray[nInjectionPoint];
    pArray[nInjectionPoint] = pArray[nInjectionPoint-1];
    pArray[nInjectionPoint-1] = nYetAnotherVariable;
  };
  nInjectionPoint--;
  };

  // Уходим, уходим, уходим....
  return nSize+1;
}
};


int main(int argc, char* argv[]) {

// А аргументики где?
if ( argc < 2 ) {
  printf ( "Параметр использования: JustTask имя_файла" );
  return 0;
};

// Создаем объект
CMyObject* pObject = new CMyObject ( argv[1] );
if ( pObject ) {
  if ( pObject->Convert() ) {
  // Все хорошо, все сконвертировалось
  };
  delete pObject;
};


return 0;
}


дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
Будет ошибка при наличии в исходном файле пробела после последнего числа. Появится лишний ноль.

- для чтения можно было использовать fscanf, вышло бы короче
CODE

   for(int nYetAnotherNumber; fscanf(stream, "%d", &nYetAnotherNumber) != EOF;)
   {
     // добавление числа
   }


- для изменения размера выделенной под массив памяти есть функция realloc
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
QUOTE (GregZ @ 19.05.2006 - время: 13:59)
Будет ошибка при наличии в исходном файле пробела после последнего числа. Появится лишний ноль.

- для чтения можно было использовать fscanf, вышло бы короче
CODE

   for(int nYetAnotherNumber; fscanf(stream, "%d", &nYetAnotherNumber) != EOF;)
   {
     // добавление числа
   }


- для изменения размера выделенной под массив памяти есть функция realloc

Даааа... Вы действительно еще дымитесь... :))

Не было цели "укоротить" или "realloc" использовать. Вы тогда еще про qsort напомните мне, про isdigit и прочая-прочая-прочая... Вообще нужно было даже fprintf и atoi не использовать. Да, можно и укоротить.. Думаю строк до традцати, используя стандартные библиотеки (STL - это на то время совсем не стандарт)... Но зачем? Человек должен и хотя бы понять, как оно все работает. И научиться обрабатывать ошибки, а то получаются всякие неучи... Лишь бы "написать", а там хоть трава не расти...

Не нервничайте, никто не хочет никому ничего доказать. :) А про пробел - ну так вместо "if ( buffer[i] == ' ' || buffer[i] == EOF ) {" напишите "if ( ( buffer[i] == ' ' && i ) || buffer[i] == EOF ) {" и все... Тоже мне, проблема... :)

дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
drinks.gif Ничего личного, просто заметил небольшую ошибку, вот и сообщил.

QUOTE

Даааа... Вы действительно еще дымитесь... :))


mellow.gif Не понял, что Вы хотели сказать?
tetro
дата: [ i ]
  • *
  • Специалист
  • Репутация: 15
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
К слову, так я таки был х лет университеским ассистентом, и скажу, что я лично за Гришино решение вполне вкатал бы баранку с просьбой подойти на беседу. (При том что оно мне вполне нравится).

Есть некий ожидаемый уровень решения для человека. Чел который пишет такие вопросы программирует без-году неделю. Вопрос на уровне курса: "Вдение в программирование" или скажем следующий за ним. У нас это был второй скажем семестр (примерно в это время 2й-3й месяц учебы). А вы тут STL. Хоть и люблю я его.

Это явное решение на уровне человека с заметным х-летним опытом.
Помните была шутка кто как пишет "Hello world!". Так вот это именно типичный senior programmer wink.gif
tetro
дата: [ i ]
  • *
  • Специалист
  • Репутация: 15
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
Да вдогонку JeyLo по поводу некорректоностей, но в качестве унивеситеского ассистента. Мой типичный ответ, который я давал при раздаче первой домашки: все неточности в формулировках имеете право трактовать как вам более удобно (но консистентно). Часто нет желания писать длинную простыню оговорок и спец. трактовок граничных случаев: получается длиннее, чем решение. Да и человек должен учиться видеть проблемы сам.
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
QUOTE (tetro @ 22.05.2006 - время: 17:26)
Это явное решение на уровне человека с заметным х-летним опытом.
Помните была шутка кто как пишет "Hello world!". Так вот это именно типичный senior programmer wink.gif

Что Вы, я не усложнял совершенно. Все на уровне базовых знаний STL.
Вот если бы замутить итераторы в нужно порядке... Этот паттерн так и просится сюда для обхода элементов списка. Тогда да...
дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
QUOTE (GregZ @ 23.05.2006 - время: 00:29)
Что Вы, я не усложнял совершенно.

2GregZ: Реалии таковы, что не все такие как Вы, GregZ.... Подавляющему большинству программистов (а как же 1С?) даже элементарные темплейты в тягость. А Вы про усложнение.. :) Впрочем не буду ломать стереотипы.

2Tetro: Одно дело неточности, это да, согласен... Тут же задача из серии "ну замутите мне чё..."
tetro
дата: [ i ]
  • *
  • Специалист
  • Репутация: 15
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
GregZ, милейший, вы мне отвечаете на уровне: "я не понимаю что здесь можно не понимать..." Напомнили мне одного моего приятеля, который будучи в армии зарабатывал пописывая статьи по программирования в Dr. Dobbs. Я не говорю что решение сложно, я говорю, что оно не соответсвует по применяемым методам ожидаемому уровню: т.е. если Чел бы подошел ко мне и ответил на наводящие вопросы по основам STL то 100 его, а вот если нет, то увы списал :(

2JeyLo: А почему бы нет: для 1-2 семестра и даже далее вполне. Т.е. условия приближенные к реальным: точные формулировки никто не обещал: учитесь приводить задачу к решаемому уровню. Здесь вполне случай, что если описать все хвосты, то проще написать решение...

Более того учитесь читать задачу глазами специалиста: понимать где главная линия, а где детали. Т.е. я заранее согласен, что вы __все__ детали протрактуете как вам будет удобнее, но разумно. Например, лишние числа одного из знаков в хвост (остаток - не волнует), 0 может быть или только положительным или только отрицательным или любым но конкретный 0 всегда имеет некий знак (т.е. перед всеми 0 можно поставить знак в соответствии с их трактовкой)

Это сообщение отредактировал tetro - 24-05-2006 - 12:05
tetro
дата: [ i ]
  • *
  • Специалист
  • Репутация: 15
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
Да, джентельмены, нашел эту шутку
The Evolution of a Programmer(про "Hello world!"):


QUOTE

The Evolution of a Programmer


High School/Jr.High

CODE

 10 PRINT "HELLO WORLD"
 20 END



First year in College

CODE

 program Hello(input, output)
   begin
     writeln('Hello World')
   end.


Senior year in College
CODE

 (defun hello
   (print
     (cons 'Hello (list 'World))))


New professional
CODE

 #include <stdio.h>
 void main(void)
 {
   char *message[] = {"Hello ", "World"};
   int i;

   for(i = 0; i < 2; ++i)
     printf("%s", message[i]);
   printf("\n");
 }

Seasoned professional
CODE

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

 class string
 {
 private:
   int size;
   char *ptr;

 string() : size(0), ptr(new char[1]) { ptr[0] = 0; }

   string(const string &s) : size(s.size)
   {
     ptr = new char[size + 1];
     strcpy(ptr, s.ptr);
   }

   ~string()
   {
     delete [] ptr;
   }

   friend ostream &operator <<(ostream &, const string &);
   string &operator=(const char *);
 };

 ostream &operator<<(ostream &stream, const string &s)
 {
   return(stream << s.ptr);
 }

 string &string::operator=(const char *chrs)
 {
   if (this != &chrs)
   {
     delete [] ptr;
    size = strlen(chrs);
     ptr = new char[size + 1];
     strcpy(ptr, chrs);
   }
   return(*this);
 }

 int main()
 {
   string str;

   str = "Hello World";
   cout << str << endl;

   return(0);
 }

Master Programmer
CODE

 [
 uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
 ]
 library LHello
 {
     // bring in the master library
     importlib("actimp.tlb");
     importlib("actexp.tlb");

     // bring in my interfaces
     #include "pshlo.idl"

     [
     uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
     ]
     cotype THello
  {
  interface IHello;
  interface IPersistFile;
  };
 };

 [
 exe,
 uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
 ]
 module CHelloLib
 {

     // some code related header files
     importheader(<windows.h>);
     importheader(<ole2.h>);
     importheader(<except.hxx>);
     importheader("pshlo.h");
     importheader("shlo.hxx");
     importheader("mycls.hxx");

     // needed typelibs
     importlib("actimp.tlb");
     importlib("actexp.tlb");
     importlib("thlo.tlb");

     [
     uuid(2573F891-CFEE-101A-9A9F-00AA00342820),
     aggregatable
     ]
     coclass CHello
  {
  cotype THello;
  };
 };


 #include "ipfix.hxx"

 extern HANDLE hEvent;

 class CHello : public CHelloBase
 {
 public:
     IPFIX(CLSID_CHello);

     CHello(IUnknown *pUnk);
     ~CHello();

     HRESULT  __stdcall PrintSz(LPWSTR pwszString);

 private:
     static int cObjRef;
 };


 #include <windows.h>
 #include <ole2.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include "thlo.h"
 #include "pshlo.h"
 #include "shlo.hxx"
 #include "mycls.hxx"

 int CHello::cObjRef = 0;

 CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk)
 {
     cObjRef++;
     return;
 }

 HRESULT  __stdcall  CHello::PrintSz(LPWSTR pwszString)
 {
     printf("%ws
", pwszString);
     return(ResultFromScode(S_OK));
 }


 CHello::~CHello(void)
 {

 // when the object count goes to zero, stop the server
 cObjRef--;
 if( cObjRef == 0 )
     PulseEvent(hEvent);

 return;
 }

 #include <windows.h>
 #include <ole2.h>
 #include "pshlo.h"
 #include "shlo.hxx"
 #include "mycls.hxx"

 HANDLE hEvent;

  int _cdecl main(
 int argc,
 char * argv[]
 ) {
 ULONG ulRef;
 DWORD dwRegistration;
 CHelloCF *pCF = new CHelloCF();

 hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

 // Initialize the OLE libraries
 CoInitializeEx(NULL, COINIT_MULTITHREADED);

 CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,
     REGCLS_MULTIPLEUSE, &dwRegistration);

 // wait on an event to stop
 WaitForSingleObject(hEvent, INFINITE);

 // revoke and release the class object
 CoRevokeClassObject(dwRegistration);
 ulRef = pCF->Release();

 // Tell OLE we are going away.
 CoUninitialize();

 return(0); }

 extern CLSID CLSID_CHello;
 extern UUID LIBID_CHelloLib;

 CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */
     0x2573F891,
     0xCFEE,
     0x101A,
     { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
 };

 UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */
     0x2573F890,
     0xCFEE,
     0x101A,
     { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
 };

 #include <windows.h>
 #include <ole2.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
 #include "pshlo.h"
 #include "shlo.hxx"
 #include "clsid.h"

 int _cdecl main(
 int argc,
 char * argv[]
 ) {
 HRESULT  hRslt;
 IHello        *pHello;
 ULONG  ulCnt;
 IMoniker * pmk;
 WCHAR  wcsT[_MAX_PATH];
 WCHAR  wcsPath[2 * _MAX_PATH];

 // get object path
 wcsPath[0] = '\0';
 wcsT[0] = '\0';
 if( argc > 1) {
     mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1);
     wcsupr(wcsPath);
     }
 else {
     fprintf(stderr, "Object path must be specified\n");
     return(1);
     }

 // get print string
 if(argc > 2)
     mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1);
 else
     wcscpy(wcsT, L"Hello World");

 printf("Linking to object %ws\n", wcsPath);
 printf("Text String %ws\n", wcsT);

 // Initialize the OLE libraries
 hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED);

 if(SUCCEEDED(hRslt)) {


     hRslt = CreateFileMoniker(wcsPath, &pmk);
     if(SUCCEEDED(hRslt))
  hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello);

     if(SUCCEEDED(hRslt)) {

  // print a string out
  pHello->PrintSz(wcsT);

  Sleep(2000);
  ulCnt = pHello->Release();
  }
     else
  printf("Failure to connect, status: %lx", hRslt);

     // Tell OLE we are going away.
     CoUninitialize();
     }

 return(0);
 }

Apprentice Hacker
CODE

 #!/usr/local/bin/perl
 $msg="Hello, world.\n";
 if ($#ARGV >= 0) {
   while(defined($arg=shift(@ARGV))) {
     $outfilename = $arg;
     open(FILE, ">" . $outfilename) || die "Can't write $arg: $!\n";
     print (FILE $msg);
     close(FILE) || die "Can't close $arg: $!\n";
   }
 } else {
   print ($msg);
 }
 1;

Experienced Hacker
CODE

 #include <stdio.h>
 #define S "Hello, World\n"
 main(){exit(printf(S) == strlen(S) ? 0 : 1);}

Seasoned Hacker
CODE

 % cc -o a.out ~/src/misc/hw/hw.c
 % a.out

Guru Hacker
CODE

 % echo "Hello, world."

New Manager
CODE

 10 PRINT "HELLO WORLD"
 20 END

Middle Manager
CODE

 mail -s "Hello, world." bob@b12
 Bob, could you please write me a program that prints "Hello, world."?
 I need it by tomorrow.
 ^D

Senior Manager
CODE

 % zmail jim
 I need a "Hello, world." program by this afternoon.

Chief Executive
CODE

 % letter
 letter: Command not found.
 % mail
 To: ^X ^F ^C
 % help mail
 help: Command not found.
 % damn!
 !: Event unrecognized
 % logout


дата: [ i ]
  • Unregistered
  • Статус:
  • Свободен
Спасибо огромное всем за помощь,особенно JeyLo - его решение мне больше всего помогло!!!
Модерам - тему можно закрывать
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)

Страницы: (1) 1

Closed TopicStart new topicStart Poll0


Рекомендуем почитать также топики:

Framework

ICQ

Писк вместо звука

eMule Plus

почему не открывается архив WinRAR



>