Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: akaGM
Дата сообщения: 09.10.2014 16:48
kkuuhhaa

ну, например, пусть функа не int, а указатель на SGP возвращает...
Автор: kkuuhhaa
Дата сообщения: 09.10.2014 17:06
ITsJustMe
дык пробовал же     sgp = new SGP(t); тот же результат, так же разрушается?
akaGM
разве SGP *sgp не должна возвращать указатель. Ведь рядом tl * t возвращает.

Автор: akaGM
Дата сообщения: 09.10.2014 17:06

только чтоб память глобальная выделялась, а не на стеке размещалось...
Автор: kkuuhhaa
Дата сообщения: 09.10.2014 18:02
akaGM
static SGP sgp = SGP(t);
function(&sgp, &t);

int function(SGP *sgp, tl *t)
{
sgp= &SGP(t); // неправильно же
return 0;
}
если выделять в функе static SGP sgp = SGP(t); // записываем в статическую память, как её адрес передать выше? Вроде параметр как раз указатель. Обычное присвоение указателя тоже не канает.
ЗЫ говорю же, в ДНК проблемы, плюсы не моё пока. Как можно создать по адресу уже выделенной памяти, не пересылкой же!
Автор: akaGM
Дата сообщения: 09.10.2014 19:18
kkuuhhaa

new "внутрях"
и
1) возврат параметра так: return sgp; или так: **sgp
2) или sgp -- глoбальный указатель, а не параметр функи...
Автор: kkuuhhaa
Дата сообщения: 09.10.2014 20:25
akaGM
SGP func(tl *t,int *ret)
{SGP * sgp;
sgp=new SGP(*t);
return *sgp;
}
sgp = new SGP4(tle); // всё равно надо инициализировать
*sgp=func(&t,&ret);
почему-то так (а не sgp или **sgp), спасибо. А надо память освобождать, если в цикле к функе обращаться?


Автор: akaGM
Дата сообщения: 09.10.2014 21:15
kkuuhhaa

не очень понятно что не так...

Цитата:
А надо память освобождать, если в цикле к функе обращаться?
а ты последи за памятью через GlobalMemoryStatus() ;)
Автор: ItsJustMe
Дата сообщения: 09.10.2014 23:51

Цитата:
говорю же, в ДНК проблемы

Если проблемы в ДНК, то тут надо спрашивать с предков...


Код: void function(SGP **sgp, tl *t)
{
*sgp = new SGP(t);
}

int main()
{
SGP *sgp;
tl *t;
//some code
function(&sgp, t);
//do something
delete sgp;
return 0;
}
Автор: Grikontarkingov
Дата сообщения: 12.10.2014 14:36
Привет)) Осваиваю циклы и в примере не осилил пару моментов.
Тело:

Код: int i,summ=0, temp=0;

for (i=0;i<10;i++){
printf("\nVvedite chislo: ");
scanf("%d",&temp);
summ+=temp;
}
Автор: Vostrikovskiy
Дата сообщения: 12.10.2014 15:52
Grikontarkingov

Цитата:
summ+=temp? очень дикая для меня строчка

Советую открыть учебник по C.
Автор: unreal666
Дата сообщения: 12.10.2014 16:17

Цитата:
2) И что значит summ+=temp? очень дикая для меня строчка))

то же, что и в других ЯП. Укороченная запись

Код: summ = summ + temp
Автор: Grikontarkingov
Дата сообщения: 12.10.2014 17:15
Правильно ли я понимаю, сначала строчкой
Код: int i,summ=0, temp=0;
Автор: unreal666
Дата сообщения: 12.10.2014 19:03
угу.
А temp сразу инициализирована скорее всего из-за того, что мало ли что придет тебе в голову. Вдруг тебе захочется вывести значение temp до его считывания или еще чего. В таком случае в temp будет "мусорное" число.
Автор: Grikontarkingov
Дата сообщения: 12.10.2014 19:55
Блин. Когда я начинаю думать о том, что summ равен summ плюс temp, мой мозг начинает вскрываться открывашкой для консервов))) Я почему то представляю себе это 1=1+2, что никак не является верным выражением почему то...
Автор: Abs62
Дата сообщения: 12.10.2014 20:03
Grikontarkingov
Вырубайте математика, врубайте программиста и начинайте воспринимать "=" не как знак равенства, а как оператор присваивания.
Автор: Grikontarkingov
Дата сообщения: 12.10.2014 21:18
Созрел новый вопрос по этой же теме. Вот программа:

Код: #include <stdio.h>
int main(void)
{
    int N=0, a=1;
    scanf("%d",&N);
    for(int i=1;i<=N;i++)
    {
        a=a*i;
    }
    printf(" %d \n",a);
    return (0);
}
Автор: ne_viens
Дата сообщения: 12.10.2014 21:27
for(int i=1; i<=N; i+=2)
Автор: unreal666
Дата сообщения: 12.10.2014 21:30
Grikontarkingov

Код: for(int i=1;i<=N;i+2)
Автор: vlary
Дата сообщения: 12.10.2014 21:42
Grikontarkingov
Код: for(int i=1;i<=N;i+2)
Автор: Grikontarkingov
Дата сообщения: 12.10.2014 21:48
Спасибо, понял))
Автор: akaGM
Дата сообщения: 13.10.2014 12:31
Abs62

Цитата:
начинайте воспринимать "=" не как знак равенства, а как оператор присваивания.
+1
Автор: Grikontarkingov
Дата сообщения: 25.10.2014 18:45
И снова я))) Вопрос по задаче, ломаю голову, никак не могу понять, что не так.
Вот текст задачи:
На вход программе подается два числа.Первое сумма двух неизвестных чисел х и у, а второе произведение х и у. По двум введенным числам, найти х и у. х и у не превосходят 1000.
Мое решение:

Код: #include <stdio.h>
#include <math.h>
int main(void)
{
    int a=0,b=0,x=0;
    scanf_s("%f %f",&a,&b);
    for(int y=0;y<=a;y++)
    {
        x=a-y;
        if(x*y==b)
        {
            printf("x=%d y=%d\n",x,y);
            break;
        }
    }
    return(0);
}
Автор: ne_viens
Дата сообщения: 25.10.2014 19:07
scanf_s("%d %d",&a,&b);
Автор: Grikontarkingov
Дата сообщения: 25.10.2014 19:13
Блииин, а ларчик то был так близко))) Забыл исправить, а кампилятор даж не заругался)) Спасибо большое))
Автор: Daniyar91
Дата сообщения: 25.10.2014 21:47
Grikontarkingov
http://ru.wikipedia.org/wiki/Квадратное_уравнение - Сперва читай до содержания, потом про дискриминант и корни, потом про теорему Виета, ну а дальше думай как сделать без цикла.
Автор: Grikontarkingov
Дата сообщения: 25.10.2014 23:30
Да там урок про цикл был, в этом вся фишка. Так то понятно, что можно и без него))
Автор: Grikontarkingov
Дата сообщения: 15.11.2014 21:44
Вот условие задачи:
Задан целочисленный массив из N элементов. N<=30. Пользователь задает некоторое целое число. Необходимо посчитать, количество элементов массива меньших по модулю этого числа.
Мой код:

Код: #include <stdio.h>
int main(){

    int pred=0;
    printf("Vvedite predel:");
    scanf_s("%d",&pred);

    int mass[30];
    for(int i=0;i<=29;i++){
        printf("Vveditee %d element massiva:",i+1);
        scanf_s("%d",&mass[i]);
    }
    int kol=0;
    for(int i=0;i<=29;i++){
        if(mass[i]>0){
            if(mass[i]<pred){
                kol++;
            }
        }
        else{
            if(-mass[i]<pred){
                kol++;
            }
        }
    }
    printf("Kolichestvo elementov= %d",kol);
    return(0);
}
Автор: GretSOX
Дата сообщения: 15.11.2014 22:21
Смотри в сторону динамического выделения памяти


Код:
#include <stdio.h>
int main(){
int N = 0;
int *mass;
printf("Vveditee razmer buffera:");
scanf_s("%d",N);
if(N<=0)N = 30;
mass = new int[N];


int pred=0;
printf("Vvedite predel:");
scanf_s("%d",&pred);


for(int i=0;i<N;i++){
printf("Vveditee %d element massiva:",i+1);
scanf_s("%d",&mass[i]);
}
int kol=0;
for(int i=0;i<N;i++){
if(mass[i]>0){
if(mass[i]<pred){
kol++;
}
}
else{
if(-mass[i]<pred){
kol++;
}
}
}
printf("Kolichestvo elementov= %d",kol);
return(0);
}
Автор: V0lt
Дата сообщения: 16.11.2014 16:29
Есть текстовый файл. Возможно ли использовать его как начальное значение для строки?
Автор: ne_viens
Дата сообщения: 16.11.2014 16:53
Да, надо открыть файл с fopen(), прочитать в буффер с fread(), закрыть с fclose(); Всё, в буффере начальное значение строки из файла.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.