Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 29.04.2018
Сообщений: 44

Вывод строк через указатель

01.05.2018, 19:36. Показов 4886. Ответов 19

Студворк — интернет-сервис помощи студентам
Здравствуйте! Не могу понять, почему в функции print() в поле "входная строка" выводится преобразованная строка str1, а не та str1, которая была заполнена в самом начале в функции set()? Заметил такой момент, что, если убрать копирование строк str2=str1 (копирование происходит через перегрузку "=", в 43 строке кода), то выводится str1 в начальном виде. Почему так? Ведь str2=str1, это не то же самое, что str1=str2. str1 на протяжении всей функции rabota() должно оставаться в неизменном виде, но этого не происходит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <cstring>
 
using namespace std;
 
class String
{   
    public: 
    char *str1,*str2;
    operator=(char *);
    String();
    ~String();
    set();  
    rabota();   
    print();
};
 
String::String()
{
    str1=new char[80];
    str2=new char[80];
}
 
String::~String()
{
    delete [] str1;
    delete [] str2;
}
 
String::operator =(char *s)
{
    strcpy(str2,s);
}
 
String::set()
{
    cout<<"введите строку: "<<endl;
    cin>>str1;
}
 
String::rabota()
{
    str2=str1;
    if((strlen(str2))%2!=0)
    {
        int kolvo=strlen(str2), mid=kolvo/2;
        for(int r=mid;r<kolvo;r++)
        {
            stdr2[r]=str2[r+1];
            str2[r+1]=0;    
        }
    }
    else
    {
        cout<<"необходимо ввести нечетное количество символов в строку!"<<endl;
        str2="error";
    }
}
 
String::print()
{
    cout<<"входная строка: "<<str1<<endl;
    cout<<"выходная строка: "<<str2<<endl;
}
 
int main()
{
    setlocale (0,"");
    String object;
    object.set();
    
    object.rabota();
    object.print();
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.05.2018, 19:36
Ответы с готовыми решениями:

Вывод массива через указатель
Небольшой набросок, есть функция, вычисляющая значения произвольного выражения. Эти значения потом скидываются в массив. Хочу возвратить...

Вывести заданную строку из массива строк через указатель
char lines = { { 'hell' }, {'Dirt' }, {'Mane'}, {'LLLL'} }; char *pl = &amp;lines; нужно вывести строку LLLL через указатели. Даны...

Вывод двумерного массива через указатель
в пятой главе Прохоренка приведен такой фрагмент кода #include &lt;iostream&gt; using namespace std; int main() { const short ROWS =...

19
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.05.2018, 20:20
На строку 43 посмотри. Если конструктор выделяет память, то изменять str1 и str2 вообще нельзя, не освободив её предварительно.
У всех функций, кроме конструктора и деструктора, должно быть возвращаемое значение или void.
0
0 / 0 / 0
Регистрация: 29.04.2018
Сообщений: 44
01.05.2018, 20:30  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
На строку 43 посмотри. Если конструктор выделяет память, то изменять str1 и str2 вообще нельзя, не освободив её предварительно.
У всех функций, кроме конструктора и деструктора, должно быть возвращаемое значение или void.
ну, хорошо, voidы я в функции подставил. Каким образом тогда можно оставить str1 без изменений? str2 ведь меняется нормально и в итоге я получаю преобразованную строку, как и должно быть. Предварительное освобождение каким образом?
C++
1
2
delete [] str2;
str2=str1;
не так же?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.05.2018, 20:38
Копию строки делай, а не присваивай указатель - strcpy().
0
0 / 0 / 0
Регистрация: 29.04.2018
Сообщений: 44
01.05.2018, 22:49  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Копию строки делай, а не присваивай указатель - strcpy().
так я что делаю? копию.
C++
1
str2=str1;
или ты имеешь ввиду сделать копию в третью, буферную строку? Чтобы ее очистить в конце работы, ее так же надо будет объявлять через указатель, я пробовал, проблема остается такой же: выводится преобразованная строка. Если же объявить без указателя, то перегрузка не сработает. Убрать указатель из перегрузки? так тогда она работать не будет. сразу вылезает ошибка [Error] prototype for 'void String::operator=(char)' does not match any in class 'String'

Добавлено через 15 минут
Цитата Сообщение от nmcf Посмотреть сообщение
Копию строки делай, а не присваивай указатель - strcpy().
а, я так понял, все дело в том, что в моем случае идет не столько копия строки, сколько именно присвоение указателя в str2. Но, если написать вот так
C++
1
2
3
4
5
void operator=(char);
void String::operator =(char s)
{
    strcpy(str2,s);
}
, то вылезает такая ошибка
[Error] invalid conversion from 'char' to 'const char*' [-fpermissive]
на строке
C++
1
strcpy(str2,s);
и прога тупо не хочет компилироваться
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
01.05.2018, 23:43
Цитата Сообщение от serega99 Посмотреть сообщение
то вылезает такая ошибка
[Error] invalid conversion from 'char' to 'const char*' [-fpermissive]
Сделай (const char* s).
0
0 / 0 / 0
Регистрация: 29.04.2018
Сообщений: 44
02.05.2018, 01:18  [ТС]
проблема осталась
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <cstring>
 
using namespace std;
 
class String
{   
    public: 
    char *str1,*str2;
    String();
    ~String();
    void operator=(const char *);
    void set(); 
    void rabota();  
    void print();
};
 
String::String()
{
    str1=new char[80];
    str2=new char[80];
}
 
String::~String()
{
    delete [] str1;
    delete [] str2;
}
 
void String::operator =(const char *s)
{
    strcpy(str2,s);
}
 
void String::set()
{
    cout<<"введите строку: "<<endl;
    cin>>str1;
}
 
void String::rabota()
{
    str2=str1;
    if((strlen(str2))%2!=0)
    {
        int kolvo=strlen(str2), mid=kolvo/2;
        for(int r=mid;r<kolvo;r++)
        {
            str2[r]=str2[r+1];
            str2[r+1]=0;    
        }
    }
    else
    {
        cout<<"необходимо ввести нечетное количество символов в строку!"<<endl;
        str2="error";
    }
}
 
void String::print()
{
    cout<<"входная строка: "<<str1<<endl;
    cout<<"выходная строка: "<<str2<<endl;
}
 
int main()
{
    setlocale (0,"");
    String object;
    object.set();
    
    object.rabota();
    object.print();
    return 0;
}
Миниатюры
Вывод строк через указатель  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
02.05.2018, 01:40
Цитата Сообщение от serega99 Посмотреть сообщение
C++
1
str2=str1;
Думаешь, здесь твой оператор присваивания работает?
0
0 / 0 / 0
Регистрация: 29.04.2018
Сообщений: 44
02.05.2018, 01:46  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Думаешь, здесь твой оператор присваивания работает?
Разумеется! Более того, можно в этом легко убедиться, просто убрав метод rabota():
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <cstring>
 
using namespace std;
 
class String
{   
    public: 
    char *str1,*str2;
    String();
    ~String();
    void operator=(const char *);
    void set(); 
    //void rabota();    
    void print();
};
 
String::String()
{
    str1=new char[80];
    str2=new char[80];
}
 
String::~String()
{
    delete [] str1;
    delete [] str2;
}
 
void String::operator =(const char *s)
{
    strcpy(str2,s);
}
 
void String::set()
{
    cout<<"введите строку: "<<endl;
    cin>>str1;
    str2=str1;
}
 
/*void String::rabota()
{
    str2=str1;
    if((strlen(str2))%2!=0)
    {
        int kolvo=strlen(str2), mid=kolvo/2;
        for(int r=mid;r<kolvo;r++)
        {
            str2[r]=str2[r+1];
            str2[r+1]=0;    
        }
    }
    else
    {
        cout<<"необходимо ввести нечетное количество символов в строку!"<<endl;
        str2="error";
    }
}*/
 
void String::print()
{
    cout<<"входная строка: "<<str1<<endl;
    cout<<"выходная строка: "<<str2<<endl;
}
 
int main()
{
    setlocale (0,"");
    String object;
    object.set();
    //object.rabota();
    object.print();
    return 0;
}
и получить вот такой результат. как видишь, копирование строк перегрузкой происходит в 39ой строке
Миниатюры
Вывод строк через указатель  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
02.05.2018, 01:57
Цитата Сообщение от serega99 Посмотреть сообщение
Разумеется!
Неужели? Точку останова поставь в своём операторе присваивания (или вывод на консоль сообщения там сделай), и посмотрим, зайдёт ли код в него?

Добавлено через 2 минуты
Цитата Сообщение от serega99 Посмотреть сообщение
копирование строк перегрузкой происходит в 39ой строке
С чего бы это? Нет там никакого копирования строк, есть копирование указателей, после чего оба указателя содержат адрес одной строки.

Добавлено через 1 минуту
Чтобы твой оператор работал, слева, от знака присваивания должен быть объект класса, справа - константный указатель на char. А где у тебя такое есть?
0
0 / 0 / 0
Регистрация: 29.04.2018
Сообщений: 44
02.05.2018, 02:08  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Неужели? Точку останова поставь в своём операторе присваивания (или вывод на консоль сообщения там сделай), и посмотрим, зайдёт ли код в него?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <cstring>
 
using namespace std;
 
class String
{   
    public: 
    char *str1,*str2;
    String();
    ~String();
    void operator=(const char *);
    void set(); 
    //void rabota();    
    void print();
};
 
String::String()
{
    str1=new char[80];
    str2=new char[80];
}
 
String::~String()
{
    delete [] str1;
    delete [] str2;
}
 
void String::operator =(const char *s)
{
    strcpy(str2,s);
}
 
void String::set()
{
    cout<<"введите строку: "<<endl;
    cin>>str1;
    str2=str1;
    cout<<str2<<endl;
}
 
/*void String::rabota()
{
    str2=str1;
    if((strlen(str2))%2!=0)
    {
        int kolvo=strlen(str2), mid=kolvo/2;
        for(int r=mid;r<kolvo;r++)
        {
            str2[r]=str2[r+1];
            str2[r+1]=0;    
        }
    }
    else
    {
        cout<<"необходимо ввести нечетное количество символов в строку!"<<endl;
        str2="error";
    }
}*/
 
void String::print()
{
    cout<<"входная строка: "<<str1<<endl;
    cout<<"выходная строка: "<<str2<<endl;
}
 
int main()
{
    setlocale (0,"");
    String object;
    object.set();
    //object.rabota();
    //object.print();
    return 0;
}
так? все равно ведь выводит то, что надо. если же убрать присвоение(39 строка) и оставить вывод str2(40 строка), которой уже ничего не присваивается, то выводится "А". Хз что бы это значило. Наверное, неинициализированную строку.

С чего бы это? Нет там никакого копирования строк, есть копирование указателей, после чего оба указателя содержат адрес одной строки.

Добавлено через 1 минуту
Чтобы твой оператор работал, слева, от знака присваивания должен быть объект класса, справа - константный указатель на char. А где у тебя такое есть?
честно говоря, я не понимаю, о чем идет речь. можешь привести пример перегруженного оператора, чтобы он копировал не указатель, а саму строку, как в моем случае? Я весь инет перерыл, так и не могу разобраться с синтаксисом перегрузки. Наглядно все же лучше воспринимаю.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
02.05.2018, 02:20
Лучший ответ Сообщение было отмечено serega99 как решение

Решение

Цитата Сообщение от serega99 Посмотреть сообщение
как в моем случае?
Можно и твой использовать, но правильно (в смысле, чтобы вызывался), т.е., в rabota():
C++
1
2
3
(*this)=str1;
//...
(*this)="error";
Добавлено через 1 минуту
Цитата Сообщение от serega99 Посмотреть сообщение
C++
1
str2=str1;
Это, из set(), убери.

Добавлено через 6 минут
Оператор присваивания, для класса, перегружается так, чтобы можно было использовать присвоение одного объекта класса другому объекту класса (например: a = b; // a и b - объекты String), и такой, в твоём классе, должен быть (потому что указатели, и "правило трёх"), а для того, что ты делаешь в коде, можно обойтись и просто использованием strcpy() в нужных местах.
1
0 / 0 / 0
Регистрация: 29.04.2018
Сообщений: 44
02.05.2018, 02:23  [ТС]
спасибо огромное! все заработало. а какой еще был вариант использования? Изменить перегрузку оператора? Где вообще можно почитать материал на эту тему, ибо хоть у меня теперь и работает все, но яснее от этого не стало. Как понять, как передаются указатели в перегруженном операторе, почему теперь все работает адекватно и как можно было обойтись без указателей? *this это объект класса? Что дает const?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
02.05.2018, 02:25
Цитата Сообщение от serega99 Посмотреть сообщение
*this это объект класса?
Да.

Добавлено через 1 минуту
Распространенные ошибки
0
0 / 0 / 0
Регистрация: 29.04.2018
Сообщений: 44
02.05.2018, 03:08  [ТС]
поизучал немного тему и решил попробовать сделать примерно то же, но не через *this, а через формальный объект в методе rabota(String& jk)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <cstring>
 
using namespace std;
 
class String
{   
    public: 
    char *str1,*str2;
    String();
    ~String();
    void operator=(char *);
    void set(); 
    void rabota(String&);   
    void print();
};
 
String::String()
{
    str1=new char[80];
    str2=new char[80];
}
 
String::~String()
{
    delete [] str1;
    delete [] str2;
}
 
void String::operator =(char *s)
{
    strcpy(str2,s);
}
 
void String::set()
{
    cout<<"введите строку: "<<endl;
    cin>>str1;
}
 
void String::rabota(String& jk)
{
    jk=str1;
    if((strlen(str2))%2!=0)
    {
        int kolvo=strlen(str2), mid=kolvo/2;
        for(int r=mid;r<kolvo;r++)
        {
            str2[r]=str2[r+1];
            str2[r+1]=0;    
        }
    }
    else
    {
        cout<<"необходимо ввести нечетное количество символов в строку!"<<endl;
        str2="error";
    }
}
 
void String::print()
{
    cout<<"входная строка: "<<str1<<endl;
    cout<<"выходная строка: "<<str2<<endl;
}
 
int main()
{
    setlocale (0,"");
    String object;
    object.set();
    object.rabota(String&);
    object.print();
    return 0;
}
компилятор все послушно скушал до 71 строки, выкинув ошибку [Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
02.05.2018, 03:53
Цитата Сообщение от serega99 Посмотреть сообщение
решил попробовать сделать примерно то же, но не через *this, а через формальный объект в методе rabota(String& jk)
Это не о чём. Назначение твоего класса какое?
0
0 / 0 / 0
Регистрация: 29.04.2018
Сообщений: 44
02.05.2018, 12:41  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Это не о чём. Назначение твоего класса какое?
ни о чем-это не ответ. Ты имеешь ввиду, что это в принципе невозможно? Или возможно, но ты не симпатизируешь данному методу решения? Ну так я интересуюсь исключительно в целях познания Си. До 71 строки ведь ни одной ошибки нет. Назначение класса-прием исходной строки, создание новой строки путем копирования старой и обработка новой строки (удалить центральный символ в строке, если в строке нечетное количество символов)
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
02.05.2018, 12:53
Цитата Сообщение от serega99 Посмотреть сообщение
Ты имеешь ввиду, что это в принципе невозможно?
Нет я не об этом, в принципе всё возможно.
Цитата Сообщение от serega99 Посмотреть сообщение
Или возможно, но ты не симпатизируешь данному методу решения?
Решения чего? Вот этого?
Цитата Сообщение от serega99 Посмотреть сообщение
Назначение класса-прием исходной строки, создание новой строки путем копирования старой и обработка новой строки (удалить центральный символ в строке, если в строке нечетное количество символов)
А зачем для этого класс? Класс - это пользовательский тип данных. Зачем нужны объекты твоего класса? Всё, что ты описал, удобней делать просто функциями. Поэтому я и написал, что твой класс - не о чём.
Цитата Сообщение от serega99 Посмотреть сообщение
До 71 строки ведь ни одной ошибки нет.
И какие выводы ты из этого делаешь? Что верной дорогой идёшь?
0
0 / 0 / 0
Регистрация: 29.04.2018
Сообщений: 44
02.05.2018, 13:13  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
А зачем для этого класс? Класс - это пользовательский тип данных. Зачем нужны объекты твоего класса? Всё, что ты описал, удобней делать просто функциями. Поэтому я и написал, что твой класс - не о чём.
так ведь, так оно и есть) это действительно выглядит слишком нагромождено и гемморно через класс, но таково идиотское задание в универе. так бы я и сам рад идти через обычные функции))
Цитата Сообщение от nd2 Посмотреть сообщение
И какие выводы ты из этого делаешь? Что верной дорогой идёшь?
ну, вроде бы верной)) можно ведь подставить не указатель на объект this, а сам объект, пусть и формальный?)
поэтому и интересует с точки зрения возможностей языка Си , раз в принципе это возможно
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
03.05.2018, 00:03
Цитата Сообщение от serega99 Посмотреть сообщение
но таково идиотское задание в универе.
Задания я не видел.
Цитата Сообщение от serega99 Посмотреть сообщение
можно ведь подставить не указатель на объект this, а сам объект, пусть и формальный?)
Это всё - пустое. Я тебе написал: для чего делается оператор присваивания в классе, а когда я тебе показал вариант с this, то специально сделал оговорку: что это правильно только в том смысле, чтобы твой оператор присваивания вызывался, и не более того. А так - это такая же муть, как и твой вариант с объектом класса.
Цитата Сообщение от serega99 Посмотреть сообщение
интересует с точки зрения возможностей языка Си
Это не Си, в Си нет классов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.05.2018, 00:03
Помогаю со студенческими работами здесь

Создание функции инициализации двумерного массива строк через указатель
Здравствуйте,имеется двумерный массив: in_data_up=_T(&quot;00&quot;); in_data_up=_T(&quot;01&quot;); ...

Вывод двумерного массива на экран, переданного через указатель
Выводит совсем не то, что нужно исправить в функции вывода ? // labrab2.12.cpp: определяет точку входа для консольного приложения. // ...

Указатель типа void. Использование косвенного связывания через универсальный указатель
Необходимо использовать косвенного связывания через универсальный указатель, примерный вид: struct обобщение{ключ; void* на что угодно}...

Степень вывести через указатель,a десятичный логарифм через функцию рекуренционную
Написать функции,где 3 натуральных числа a,b,c(a/b-десятичный логарифм).Чтобы степень вывести через указатель,a десятичный логарифм через...

Быстрее ли вывов функции, переданной через параметр шаблона, чем через простой указатель на функцию?
Здравствуйте! Есть два варианта передачи некоторой переменной типа &quot;указатель на функцию&quot; в класс - через параметр шаблона и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru