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

Награды
7
Я не очень понял что хотел автор, и может быть сейчас сморожу глупость (всёж на крестах почитай лет пять не писал), но если он хотел массив строк, то вот вам пример с массивом строк:
Код:
// StringsDemo.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <string>
#include <array>
#include <iostream>

typedef std::array<std::string, 100> stringarray;

int _tmain(int argc, _TCHAR* argv[])
{
    stringarray a;
    a[0]="Jopa";
    a[1]="Titki";
    std::cout << a[0] << "\n"<< a[1];
    return 0;
}
Компилируется и работает на 10-ой студии.
 

Зверь

Ословед
Награды
4
Всем доброго времени суток. Мне требуется найти библиотеку для работы с изображениями. Необходимо склеить фотографии в одно изображение (отфотографированные карты, готовый софт тестил но он весь не совсем адекватно работает).
 
Всем доброго времени суток. Мне требуется найти библиотеку для работы с изображениями. Необходимо склеить фотографии в одно изображение (отфотографированные карты, готовый софт тестил но он весь не совсем адекватно работает).
Borland C++ Builder - там много классов для работы с изображениями.
 
твой код выдаст ошибку, выделять через new надо было в цикле тогда
Извиняюсь, ошибка будет, просто подразумевался двумерный массив, но т.к. это указатель, то как бы достаточно было одних [], поэтому это дело надо сразу инициализировать, тогда сработает. Вроде как вот так:
Код:
char *a = "Follow the White Rabbit";
либо:
Код:
char *a[] = {
                    "Follow the White Rabbit";
                    "Follow the Red Rabbit";
                    "Follow the Black Rabbit"; 
                 }
 
Как можно преобразовать String^ в *char и string в String^ в vc++?
И желательно статью по работе с реестром, можно ссылку из энета.
В заранее спасибо.
 
Награды
7
Как можно преобразовать String^ в *char и string в String^ в vc++? И желательно статью по работе с реестром, можно ссылку из энета. В заранее спасибо.
Э-э-э-э... в смысле паскалёвый string в сишный *char и паскалёвый string в крестовый std::string? Ты чё там пытаешься из крестов с реестром работать?

Не очень понятно что значит "преобразовать". Вызвать дельфийскую библиотеку из программы на Си, или наоборот вызвать сишную библиотеку из программы на Delphi?
 
Э-э-э-э... в смысле паскалёвый string в сишный *char и паскалёвый string в крестовый std::string?
Да, если это возможно.
(string - он паскалевский, что он забыл в visual studio? 0_0)
Ты чё там пытаешься из крестов с реестром работать?
Нет не пытаюсь, просто недавно решил посмотреть в энете но ничего так и не нашел(
Не очень понятно что значит "преобразовать". Вызвать дельфийскую библиотеку из программы на Си, или наоборот вызвать сишную библиотеку из программы на Delphi?
Конвертнуть в vc++ один тип в другой.
 
Награды
7
Да, если это возможно. (string - он паскалевский, что он забыл в visual studio? 0_0)
Ну ты пишешь String^, ты это откуда взял-то? Это чо за тип-то такой? Звиняюсь заранее, если ступил, просто никогда такого типа данных в сях не встречал.
 
Награды
7
Тьфу-ты блин. Во язык, три строковых типа и целый пункт справки как один переводить в другой.

Код:
// convert_string_to_wchar.cpp
// compile with: /clr
#include < stdio.h >
#include < stdlib.h >
#include < vcclr.h >

using namespace System;

int main() {
   String ^str = "Hello";

   // Pin memory so GC can't move it while native function is called
   pin_ptr<const wchar_t> wch = PtrToStringChars(str);
   printf_s("%S\n", wch);

   // Conversion to char* :
   // Can just convert wchar_t* to char* using one of the 
   // conversion functions such as: 
   // WideCharToMultiByte()
   // wcstombs_s()
   // ... etc
   size_t convertedChars = 0;
   size_t  sizeInBytes = ((str->Length + 1) * 2);
   errno_t err = 0;
   char    *ch = (char *)malloc(sizeInBytes);

   err = wcstombs_s(&convertedChars, 
                    ch, sizeInBytes,
                    wch, sizeInBytes);
   if (err != 0)
      printf_s("wcstombs_s  failed!\n");

    printf_s("%s\n", ch);
}

Код:
// StringDemo1.cpp : main project file.

#include "stdafx.h"
#include <string>
#include <stdlib.h>

using namespace System;

int main(array<System::String ^> ^args)
{
    String ^ b;
    std::string c = "Titki";
    b=gcnew String(c.c_str());
    Console::WriteLine(b);
    return 0;
}
 
Нужна ваша помощь. Ниже код. Пользователь вводит размерность матрицы, матрица заполняется случайными числами и возводится в куб. В программе нужно использовать класс и перегрузку операции *.
Возведение в куб должно выглядеть такmatr *cub(matr *A)
{return A*A*A;}

Помогите пожалуйста переделать программу, чтобы она возводила матрицу в куб, а не в квадрат (сейчас возводит нормально в квадрат) и чтобы было соблюдено условие выше. ну под matr скорее всего имеется Matrix (у преподавателя уточнял что нужно сделать).

Код:
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
#include <time.h>


using namespace std;


class Matrix
{
private:
    int **a; // двумерный динамический массив
    int n; // количество элементов массива
public:
    Matrix() { n = 0; a = NULL; srand(time(NULL)); }; // конструктор по умолчанию
    Matrix(int m) // конструктор
    {
        srand(time(NULL));
        n=m;
        if (n <= 0) // проверяем, что размерность массива != 0, иначе выдаем ошибку
        {
            n = 0;
            a = NULL;
            cout << "ОШИБКА! Размерность массива меньше или равно 0" << endl;
        } else { // если n > 0, то создаем массив и обнуляем его
            a = new int * [n];
            for (int i = 0; i < n; i++)
             {
                 a[i] = new int [n];
                 for (int j = 0; j < n; j++)
                     a[i][j] = 0;
            };
        };
    }
    
    void read() // функция чтения, получает размерность массива (вводится пользователем с клавиатуры)
    {
        cout << "Введите размерность матрицы: ";
        cin>>n;
        if (n > 0) {
            a = new int * [n];
            for (int i = 0; i < n; i++)
             {
                 a[i] = new int [n];
                 for (int j = 0; j < n; j++)
                     a[i][j] = 0;
            };
        } else { a = NULL; cout << "ОШИБКА! Вы ввели неправильную размерность матрицы!" << endl; };
    }
    void random() // функция заполнения массива случайными числами
    {
        cout << "Квадратная матрица в кубе: " << endl; // выводим начальную матрицу на экран
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                a[i][j]=rand();
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
                cout << a[i][j] << '\t';
            cout << '\n';
        };
    }
    void print() 
    {
        cout << "Квадратная матрица в кубе: " << endl; // выводим результат
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
                cout<<a[i][j]<<'\t';
            cout<<'\n';
        };
        
    }


    Matrix operator * (const Matrix& с) // перегрузка оператора *
    {
         if (n == c.n && n > 0)
          {
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                for (int k = 0; k < n; k++)
                    c.a[i][j]+=a[i][k]*a[k][j];
        return *this;
           };
    }


};
int main ()
{
    setlocale(LC_ALL, "Rus"); 
    Matrix a,c;
    a.read();
    a.random();
    c=a*a;
    c.print();
    system("pause");
}
Сначала сделайте лоботомию автору этого кода, потом поговорим :fie1:
И что означает звездочка в примере возведения в куб? Это аффтар ссылки не осилил, или нужно матрицы в виде массива передавать? :blink: И что даст возведение указателя в куб? Access Violation?
 

SunnyMan

Namynnuz
Если попадет в область доступной памяти - то нет :)
А вообще, маразм преподов по кодингу (особенно старенько-рассыпающихся) - дело обычно :)
 
Если попадет в область доступной памяти - то нет :)
А вообще, маразм преподов по кодингу (особенно старенько-рассыпающихся) - дело обычно :)
Гнать таких надо ссаными тряпками быстро, решительно. А то получится круговорот маразматиков в природе, что не есть хорошо.
 

Redemption

Ословед
Код свой переделал. где-то косяк. Ругается на cub и m. (хотя до этого раз 5-10 проверил, все работало).

matr *cub(matr *A)
{return A*A*A;}
реализовано как:
Matrix operator * (const Matrix &m)
{
Matrix cub(m);
return m*m*m;
}
За кривизну не ругать, си изучаю мало. А вот от советов и рекомендаций не отказался бы.
Код:
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
#include <time.h>


using namespace std;


class Matrix
{
private:
    int **a; // динамический двумерный массив
    int n; // размерность массива


public:
    Matrix() { n = 0; a = NULL; srand(time(NULL)); }; // конструктор по умолчанию
    Matrix(int m) // конструктор
    {
        srand(time(NULL));
        n=m;
        if (n <= 0) // проверяем размерность массива. если <=0, то выводим ошибку и обнуляем массив. 
        {
            n = 0;
            a = NULL;
            cout << "ОШИБКА! Размерность матрицы < или = 0" << endl;
        } else
        { // если размерность > 0, то выделяем память
            a = new int * [n];
            for (int i = 0; i < n; i++)
             {
                 a[i] = new int [n];
                 for (int j = 0; j < n; j++)
                     a[i][j] = 0;
             };
        };
    };


    ~Matrix() // деструктор
    {
        if(a) 
        {
        for (int i = 0; i < n; i++)
            delete [] a[i];
        delete [] a;
        };
    } ;


    void read() // функция чтения. Получает размерность массива (пользователь вводит с клавиатуры) и выделяет память под него.
    {
        cin>>n;
        if (n > 0)
        {
            a = new int * [n];
            for (int i = 0; i < n; i++)
             {
                 a[i] = new int [n];
                 for (int j = 0; j < n; j++)
                     a[i][j] = 0;
            };
        } else // если размерность < или = 0, то выводим ошибку и обнуляем массив
        { 
            n = 0; a = NULL; cout << "ОШИБКА! Размерность матрицы < или = 0" << endl; 
        }; 
    };
    void random() // функция заполнения массива случайными числами
    {
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                a[i][j]=rand();
    };
    void print() // функция вывода результата на экран
    {
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
                cout<<a[i][j]<<'\t'
                << endl;
        };
    };


    Matrix operator =(const Matrix& m)                           // оператор перегрузки присваивания 
    {
        n=m.n;
        a=new int * [n];
        for (int i = 0; i < n; i++)
            a[i]=new int [n];
        for(int i=0;i<n;i++)
            a[i]=m.a[i];
        return *this;
    };


    Matrix operator * (const Matrix& m) // перегрузка оператора *
    {
    Matrix cub(Matrix *m);
    return m * m * m;
    };


    Matrix operator *=(const Matrix& m)
    {
        int **tmp = new int * [n];
        for (int i = 0; i < n; i++)
        {
            tmp[i] = new int [n];
            for (int j = 0; j <n; j++)
                tmp[i][j] = 0;
        };
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                for (int k = 0; k < n; k++)
                    tmp[i][j]+=a[i][k]*m.a[k][j]; // умножение матриц (строка на столбец)
        a = tmp;
        n = m.n;
        return *this;
    };


};




int main ()
{
    setlocale(LC_ALL, "Rus");
    Matrix B;
    cout << "Введите размерность матрицы: ";
    B.read();
    cout << "Исходная матрица:";
    B.random();
    B.print();
    B=cub(m);
    cout << "Матрица в 3 степени:";
    B.print();
    cout << "Матрица в 4 степени:";
    B=cub(m)*m;
    B.print();
    system("pause");
}
 
Здравствуйте. Дайте совет. Нужно определить наличие в сети устройства с заданным айпи(по сути пинг, только без вычисления времени). В какую сторону копать? Winsock с ручной реализацией пинга? Или есть более рациональный и быстрый способ?
 
За кривизну не ругать, си изучаю мало. А вот от советов и рекомендаций не отказался бы.
Совет и рекомендация: прочитай любой учебничек по C++. Страницы две, кроме "От автора". Это очень поможет, наверное.

Здравствуйте. Дайте совет. Нужно определить наличие в сети устройства с заданным айпи(по сути пинг, только без вычисления времени). В какую сторону копать? Winsock с ручной реализацией пинга? Или есть более рациональный и быстрый способ?
Если только определить, то да, ICMP echo - оно, по идее, для этого и создавалось. Можно пошарить в сторону Boost, там наверняка есть готовая реализация ICMP-пакетов. Если нужно еще и что-то передавать, то достаточно ограничиться TCP.
 

    Yeti

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

Сарт

Ословед
Есть задание: написать программу, которая будет выводить серийный номер жесткого диска и информацию о месте на нем (сколько занято, сколько свободно).
Обязательное условие - форма, элементы формы, получение данных, реализуется исключительно на WinApi.
Собственно что интересует: есть (русскоязычная) литература, которая позволит это реализовать за неделю, на каких англоязычных форумах можно задать подобный вопрос, какова точная формулировка вопроса на английском?
 

enzo

Ословед
Кто может написать программу/игру на движке DarkGDK (не очень сложную, может какая-то ваша старая разработка подойдет), разумеется за деньги, пишите в личку.
 
Сверху