Обсуждение Программирование на C/C++

Помогите начинающему))))))) скачал визуал студио 2010 экспресс с сайта мелкомягких, создаю проект, в нем файл кода *.срр, как дальше скомпилировать программу?какие действия? ежели создавать проект из файла с кодом, то проект создается, но не запускается,говорит не может найти exe- шник, код простой с него начинали все)
Код:
#include <iostream>

int main ()
{
      std::cout << "Hello World! \n" ;
      return 0;
}
[code]
 
Странно но в Codeblocks все работает на ура и намного понятнее чем студия)))программа пошла, буду работать дальше
 

JIECHuK

Ословед
Помогите начинающему))))))) скачал визуал студио 2010 экспресс с сайта мелкомягких, создаю проект, в нем файл кода *.срр, как дальше скомпилировать программу?какие действия? ежели создавать проект из файла с кодом, то проект создается, но не запускается,говорит не может найти exe- шник, код простой с него начинали все)
Код:
#include <iostream>

int main ()
{
      std::cout << "Hello World! \n" ;
      return 0;
}
 [code][/QUOTE]создавай пустой проект в студии (empty project) и будет все работать
 

CaNaBys

Ословед
Приветствую всех. Обращаюсь ко всем знающим, помогите пожалуйста, кто может. Нужно создать приложение(MFC);
задание такое - Упорядочить все столбцы матрицы a[n,m]! Сам в C++, могу сделать небольшие консольные задания , а тут бац и за неделю сделать надо, задание такого уровня. Помогите пожалуйста!
 
Приветствую всех. Обращаюсь ко всем знающим, помогите пожалуйста, кто может. Нужно создать приложение(MFC);
задание такое - Упорядочить все столбцы матрицы a[n,m]! Сам в C++, могу сделать небольшие консольные задания , а тут бац и за неделю сделать надо, задание такого уровня. Помогите пожалуйста!
Какого уровня? Сортировка теперь стала "уровнем"? Или перетащить компонентики из панели в VC — уровень? Вы вопрос конкретно сформулируйте.
 
Есть задание: написать программу, которая будет выводить серийный номер жесткого диска и информацию о месте на нем (сколько занято, сколько свободно).
Обязательное условие - форма, элементы формы, получение данных, реализуется исключительно на WinApi.
Собственно что интересует: есть (русскоязычная) литература, которая позволит это реализовать за неделю, на каких англоязычных форумах можно задать подобный вопрос, какова точная формулировка вопроса на английском?

Так получить серийник:
Код:
#include <windows>
#include <winioctl.h>
#include <stdio.h>


//  Valid values for the bCommandReg member of IDEREGS;
#define  IDE_ATAPI_IDENTIFY  0xA1  //  Returns ID sector for ATAPI.
#define  IDE_ATA_IDENTIFY    0xEC  //  Returns ID sector for ATA.

// ф-я конвертирования в строку данных
char  * ConvertToString(DWORD diskdata[256], int firstIndex, int lastIndex)
{
    char string[1024] = {0};
    static char res[1024] = {0};
    int i, j, position = 0;

    //  each integer has two characters stored in it backwards;
    for (i = firstIndex; i <= lastIndex; i++)
    {
        // get high byte for 1st character;
        string[position] = (char)(diskdata[i] / 256);
        position++;
        // ----
        // get low byte for 2nd character;
        string[position] = (char)(diskdata[i] % 256);
        position++;
    }
    //  end the string;
    string[position] = '\0';
    // cut off the trailing blanks;
    for (i = 0, j = 0; i <= position; i++)
    {
        if(string[i] != ' ')
        {
            res[j] = string[i];
            j++;
        }
    }
    return res;
}

//серийный номер drive-а
char * GetHDDSerial(int drive)
{
  BYTE bIDCmd; // крманда IDE или ATAPI IDENTIFY;
  SENDCMDINPARAMS scip; // см MSDN для описания;
  USHORT *pIdSector; // указатель на адрес сектора HDD, в котором хранится разная полезная инфа;
  GETVERSIONINPARAMS VP; // см MSDN для описания;
  BYTE IdOutCmd[sizeof(SENDCMDOUTPARAMS) + 512 - 1] = {0};
  DWORD br; // байт прочтено;
  HANDLE hDisk;
  int ijk;
  char driveName[256];
  DWORD diskdata[256];
  char * res = NULL;

  sprintf (driveName, "\\\\.\\PhysicalDrive%d", drive);
  if ((hDisk = CreateFile(driveName, GENERIC_READ | GENERIC_WRITE,
                            FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) return NULL;
  memset(&VP, 0, sizeof(GETVERSIONINPARAMS));
  if ( !DeviceIoControl(hDisk, SMART_GET_VERSION, NULL, 0, &VP, sizeof(VP), &br, NULL)) goto final;
  if (VP.bIDEDeviceMap <= 0) goto final;
  bIDCmd = (VP.bIDEDeviceMap >> drive & 0x10) ? IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY;
  if (bIDCmd != IDE_ATA_IDENTIFY) goto final;
  memset(&scip, 0, sizeof(scip));
  memset(IdOutCmd, 0, sizeof(IdOutCmd));
  scip.irDriveRegs.bFeaturesReg        = 0;
  scip.irDriveRegs.bSectorCountReg    = 1;
  scip.irDriveRegs.bSectorNumberReg    = 1;
  scip.irDriveRegs.bCylLowReg            = 0;
  scip.irDriveRegs.bCylHighReg        = 0;
  scip.irDriveRegs.bDriveHeadReg        = 0xA0 | ((drive & 1) << 4);
  scip.irDriveRegs.bCommandReg        = IDE_ATA_IDENTIFY;
  scip.bDriveNumber                    = drive;
  scip.cBufferSize                    = 512;
  if (!DeviceIoControl(hDisk, SMART_RCV_DRIVE_DATA,
                       (LPVOID)&scip,
                       sizeof(SENDCMDINPARAMS) - 1,
                       (LPVOID)IdOutCmd,
                       sizeof(SENDCMDOUTPARAMS) + 512 - 1,
                       &br, NULL)) goto final;
  // получаем указатель на сектор;
  pIdSector = (USHORT*)((PSENDCMDOUTPARAMS)IdOutCmd)->bBuffer;
  // заполняем наши данные;
  for (ijk = 0; ijk < 256; ijk++) diskdata[ijk] = pIdSector[ijk];
  // конвертируем в строку SN;
  res = ConvertToString(diskdata, 10, 19);
final:
  CloseHandle(hDisk);
  return res;
}

//информация о винчестере
char * GetHDDInformation(void)
{
  char * hdds;
  if ( (hdds = GetHDDSerial(0)) != NULL ) return hdds;

  unsigned long VolumeSerialNumber, FileSystemFlags, MaximumComponentLength;
  static char __GetHDDInformationRes[9] = {0};

  GetVolumeInformation("c:\\", NULL, 0, &VolumeSerialNumber,
                       &MaximumComponentLength, &FileSystemFlags, NULL, 0);
  sprintf(__GetHDDInformationRes, "%.2X", VolumeSerialNumber);
  return __GetHDDInformationRes;
}
 
Здравствуйте подскажите, пожалуйста, алгоритм или хотя бы натолкните на мысль для следующей задачи на СИ.

Пользователь вводит 4-х разрядное число. Вывести всевозможные 4-х разрядные комбинации из цифр этого числа. Цифры могут повторяться. Без массива.
 
да много вариатов можно. циклом например.
или так:
сформировать 8-битное число так: четыре пары бит: кажой паре бит поставить в соответствие цифру исходного числа
т.е. так: первое чесло 00-00-00-00 (двоичное). 00 означает что вместо нее подставляется 1(первое) число
далее: 00-00-00-01. первые три - первое число, последнее - второе.
тут даже можно тупо инкрементом все сделать:crazy2:
 
Напиши программу, которая сгенерирует текст программы, выполняющей нужные тебе действия. 4 переменные, как SunnyMan говорит, и вперед, показывать, что у преподавателя нет монополии на шизофрению!
 

Valek

Ословед
Награды
6
На С надо написать программу.
Дана вещественная квадратная матрица A порядка n и вектор b размером n. Определить сумму положительных элементов вектора c=b*A. Для нахождения значений вектора использовать под программу. Вектор С: Посмотреть вложение 1630233
Звездочки обозначают умножение.
Матрицы вроде не так сложно перемножить, а что за подпрограмма я не знаю.
 
На С надо написать программу.
Дана вещественная квадратная матрица A порядка n и вектор b размером n. Определить сумму положительных элементов вектора c=bxA. Для нахождения значений вектора использовать под программу. Вектор С: Посмотреть вложение 1630213
Везет тебе, чо. А мы тут при чем?
 

TAPAHOB_Х@й

Ословед
Награды
5
Может кто объяснить, зачем (в исходниках в книжках часто вижу) код определения класса заключают между директивами препроцессора типа
Код:
#ifndef ИМЯ_КЛАССА_H_
#define ИМЯ_КЛАССА_Н_
... описание класса ...
#endif
 
Может кто объяснить, зачем (в исходниках в книжках часто вижу) код определения класса заключают между директивами препроцессора типа
Код:
#ifndef ИМЯ_КЛАССА_H_
#define ИМЯ_КЛАССА_Н_
... описание класса ...
#endif
Это include guard
 

    Rofl

    очки: 49
    Нет комментариев

JC Denton

Ословед
Помогите сделать синхронизацию семафором либо после заполнения буфера, либо после записи всего передаваемого сообщения в буфер.


Сама программа (передает сообщение через неименованный pipe):
Код:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>


int main()
{
  int fd[2], result;
  size_t size;
  char resstring[14];
  pipe(fd);
  result = fork();
  if (result > 0) 
  { //родительский процесс
    close(fd[0]); //закрываем выходной поток данных
    size = write(fd[1], "Message", 14);
    close(fd[1]);
  } 
  else
  { //дочерный процесс
    close(fd[1]);
    size = read(fd[0], resstring, 14);
    printf("%s\n",resstring);
    close(fd[0]);
  }
return 0;
}

Если еще надо:

Код:
#include <sys/types.h>
#include <sys/sem.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <string>
#include <string.h>


class SemaphoreException : public std::exception
{
public:


    SemaphoreException() : message(strerror(errno))
    {
    }


    SemaphoreException(std::string message) : message(message)
    {
    }
    
    ~SemaphoreException() throw()
    {
    }
    
    const char* what() const throw()
    {
        return message.c_str();
    }
    
private:
    
    std::string message;
};


class Semaphore
{
public:


    Semaphore() : semaphoreId(0), semaphoreOptained(false)
    {
    }
    
    void Lock()
    {
        Optain();
        
        const int operationsToDo = 2;
        sembuf operations[operationsToDo];
        
        operations[0].sem_num = SEMAPHORE_NUMBER;
        operations[0].sem_op = 0;
        operations[0].sem_flg = SEM_UNDO;
        
        operations[1].sem_num = SEMAPHORE_NUMBER;
        operations[1].sem_op = 1;
        operations[1].sem_flg = SEM_UNDO;
        
        if (-1 == semop(semaphoreId, operations, operationsToDo))
        {
            throw SemaphoreException();
        }
    }
    
    void Unlock()
    {
        if (!semaphoreOptained)
        {
            return;
        }
        
        const int operationsToDo = 1;
        sembuf operations[operationsToDo];
        
        operations[0].sem_num = SEMAPHORE_NUMBER;
        operations[0].sem_op = -1;
        operations[0].sem_flg = SEM_UNDO;
        
        if (-1 == semop(semaphoreId, operations, operationsToDo))
        {
            throw SemaphoreException();
        }
    }


    void Optain()
    {
        if (semaphoreOptained)
        {
            return;
        }
        const int ipckey = ftok("/tmp/foo", 42);
        semaphoreId = semget(ipckey, SEMAPHORE_NUMBER + 1, 0666 | IPC_CREAT);
        if (semaphoreId < 0)
        {
            throw SemaphoreException();
        }
        semaphoreOptained = true;
    }
    
    ~Semaphore()
    {
    }


    void Dispose()
    {
        if (semaphoreOptained)
        {
            semctl(semaphoreId, SEMAPHORE_NUMBER, IPC_RMID);
            semaphoreOptained = false;
        }
    }
    
private:


    static const int SEMAPHORE_NUMBER = 0;


    int semaphoreId;
    bool semaphoreOptained;    
};


const int Semaphore::SEMAPHORE_NUMBER;


bool semaphoreOptainedOk(int semaphoreId)
{
    return semaphoreId >= 0;
}


int main()
try
{
  int fd[2], result;
  size_t size;
  char resstring[14];
  Semaphore semaphore;
  semaphore.Lock();
  
  memset(resstring, 0, sizeof(resstring));


  pipe(fd);


  result = fork();
  if (result > 0) 
  { //родительский процесс
    sleep(1);
    close(fd[0]); //закрываем выходной поток данных
    for (int i = 0; i < 14; ++i)
    {
        write(fd[1], "Message" + i, 1);
    }
    close(fd[1]);
    semaphore.Unlock();
  } 
  else
  { //дочерный процесс
    close(fd[1]);
    semaphore.Lock(); // если закомментировать эту строку и строку ниже, наглядно видна необходимость синхронизации
    size = read(fd[0], resstring, 14);
    printf("%s\n",resstring);
    close(fd[0]);
    semaphore.Unlock(); // эту
    
    semaphore.Dispose();
  }
return 0;
}
catch (std::exception& ex)
{
    fprintf(stderr, "Exception occured: '%s'\n", ex.what());
}
 

    RampKiller

    очки: 51
    Нет комментариев
Сверху