• Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.

дали ++i и i++ е една иста работа?

Статус
Затворена за нови мислења.
  • Ја почнал/а темата
  • #1

StMartin

Баниран/a
24 февруари 2008
172
3
дали ++i и i++ е една иста работа?
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
Зависи во кој контекст.
Ако го употребуваш само како
Код:
i++;
++i;
тогаш ја врши истата функција.
Ако го употребуваш како
Код:
int x, i=3;
x=i++;
x ќе биде 3, i ќе биде 4
Код:
int x, i=3;
x=++i;
x ќе биде 4, a i ќе биде 4.

Значи ако доделуваш вредност на некоја друга променлива (или правиш некоја друга операција), ако е i++ ќе се стави вредноста од i во x и потоа i ќе се зголеми за 1. Во другиот случај, ++i, прво i ќе се зголеми за 1 а потоа вредноста на i ќе се додели на x.
 

MetalGear

On your way to fame
14 април 2007
2,997
510
www.ibiz.mk
не не е иста работа разлика е дали прво i ke se zgolemi za еден па потоа ке се изврши операцијата или ке се изврши операција

еве еден пример
for(i=1;i<=10;++i)
cout<<i;

ке печати 234..до 10

а додека
for(i=1;i<=10;i++)
cout<<i;

ке печати 1234567..19



едит: aleksandar ме претече во секој случај ти објаснивме и 2цата
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
@MetalGear

Во двата примера исто ќе се печати. Во for циклус i++ се извршува како посебна команда и исто ќе биде и со ++i.
 

MetalGear

On your way to fame
14 април 2007
2,997
510
www.ibiz.mk
да како посебна команда работи ne sum rabotel odamna со ова но
уште пред почетокот на кодот кој се наога во for ке го инкрементира прво

и не би требало исто да печати
 
  • Ја почнал/а темата
  • #8

StMartin

Баниран/a
24 февруари 2008
172
3
Ок, јасно ми е. Фала многу дечки.
 
  • Ја почнал/а темата
  • #9

StMartin

Баниран/a
24 февруари 2008
172
3
Да не отворам нова тема, да ве прашам само уште, кога го компајлирам програмов, и му правам Build, го добивам во .exe формат. Кога го стартувам .exe фајлот после откуцувањето на вредностите и кога ќе стиснам Enter ми се гаси автоматски програмчево. Како да го средам ова?
 
  • Ја почнал/а темата
  • #12

StMartin

Баниран/a
24 февруари 2008
172
3
Не работи со двете. Инаку програмирам во C, не во C++.
 

dime

Intern
13 мај 2008
163
3
Епа арно де, стави getchar() на крај тоа мислам ќе заврши работа.
 
  • Ја почнал/а темата
  • #14

StMartin

Баниран/a
24 февруари 2008
172
3
Ок, фала. По се изгледа само со system("PAUSE"); работи.
 
  • Ја почнал/а темата
  • #15

StMartin

Баниран/a
24 февруари 2008
172
3
Не ми е јасно како во оваа задача сеедно е дали ќе биде ++i или i++.

Код:
#include <stdio.h>
#include <math.h>
double epsilon=1.0E-10;
double kosinus_kuta(double x[], double y[]);
int main(void)
{
double a[3], b[3];
double cos_phi;
int i;
printf("Unesite vektor a.n");
for(i=0;i<3;++i){
printf("a[%d]= ",[B]i+1[/B]);
scanf(" %lf",&a[i]);
}
printf("Unesite vektor b.n");
for(i=0;i<3;++i){
printf("b[%d]= ",i+1);
scanf(" %lf",&b[i]);
}
cos_phi= kosinus_kuta(a, b);
if(fabs(cos_phi) == 0){
printf("Vektori su okomiti.n");
printf("Kosinus kuta = %fn", cos_phi);
}
else{
printf("Vektori nisu okomiti.n");
printf("Kosinus kuta = %fn", cos_phi);
}
return 0;
}
double norma(double x[]) {
int i;
double suma;
suma=0.0;
for(i=0;i<3;++i) suma = suma + x[i]*x[i];
return sqrt(suma);
}
double produkt(double x[], double y[]) {
int i;
double suma;
suma=0.0;
for(i=0;i<3;++i) suma = suma + x[i]*y[i];
return suma;
}
double kosinus_kuta(double x[], double y[]) {
double cos_phi;
cos_phi=produkt(x,y);
cos_phi=cos_phi/(norma(x)*norma(y));
return cos_phi;
}
 

''TcM>>

Intern
6 јануари 2008
961
39
Popravilno ke ti bide vo for ciklusot da pises i++. Zosto?

eve primer:
for(i=0;i<3;++i) suma = suma + x*x;
return sqrt(suma);

kako sto ti e pisano na tebe (so ++i) i=0 i odma uste pred da racuna so ++i mu dava na i+=1 i vaka bi bilo: suma = suma + x[1]*x[1]; ..... sto znaci deka prviot clen "0" go skokas. E sega a mozda i taka sakas, ne znam..

E sea popravilno bi bilo:
for(i=0;i<3;i++) suma = suma + x*x;
return sqrt(suma);

A ova prvo go ostava i=0, i posle vrsenjeto na funkcijata se zgolemuva i za 1, odnosno: suma = suma + x[0]*x[0];///

Valda svati sega....
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
@''TcM>>

Не си во право, размисли малку. Разгледај како работи for циклусот.
 
  • Ја почнал/а темата
  • #18

StMartin

Баниран/a
24 февруари 2008
172
3
Не викав за тоа ''TcM>>, викав за горе... Доле таман е. Во овој дел е работата:
printf("Unesite vektor a.n");
for(i=0;i<3;++i){
printf("a[%d]= ",i+1);
scanf(" %lf",&a);

Сега ако е овака напишано би требало да му додели вредност
a[2]
a[3]
а[4]
а кога го пуштив испечати
a[1]
a[2]
a[3]
Како е ова можно?
 

''TcM>>

Intern
6 јануари 2008
961
39
Ne svakam zosto mislis deka ne sum vo pravo. Aj objasni mi sea ti mene malce zosto ne sum vo pravo, i kolku da znaes i jas sum pocetnik pa se obidov malce i jas da objasnam. Taka da nisto cudno ako sum naprail greska :p....
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
Еве како работи for циклусот преку еден пример:
for(i=1;i<=3;i++) cout << i;

Најпрво се извршува правата операција, i=1. Таа операција се извршува само еднаш и со тоа се доделува почетната вредност за i. Потоа се проверува дали условот е исполнет. Ако е исполнет тогаш се извршува блокот наредби (во овој случај само една наредба: cout << i). По извршувањето на блокот наредби се извршува наредбата i++; (или ++i) која се извршува како посебна наредба. Потоа пак се проверува дали е исполнет условот. Ако пак е исполнет пак се извршува блокот наредби во циклусот, пак се извршува i++ и пак се проверува условот. Кога условот нема да биде исполнет, циклусот завршува и програмата продолжува со извршување на кодот што следи после for.
 
  • Ја почнал/а темата
  • #21

StMartin

Баниран/a
24 февруари 2008
172
3
aleksandar_te види погоре. Нели ++i, прво ја зголемува почетната вредност за 1 па потоа продолжува со проверката и потоа се извршува блокот наредби. Епа кај мене наместо i=0 директно би се зголемило за 1 и би станало i=1. Потоа i+1 би било еднакво на 2. А кога го искомпајлирав ми даде 1. Стварно не можам да сфатам во што е проблемот.
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
++i прво ја зголемува вредноста ако го користиш при доделување на вредност, како што објаснив во првиот мој пост. Значи ако i=1, x=++i, по извршување на наредбите x=2. Доколку се користи како посебна наредба, тогаш i++ и ++i ја имаат истата функција како и i=i+1.
 
  • Ја почнал/а темата
  • #23

StMartin

Баниран/a
24 февруари 2008
172
3
Аха те разбирам.
Код:
#include <stdio.h>

int main(void)

{
	int i, x;

i=1;

x=++i;

printf("%d n", x);

return 0;

}
Ако е i++ печати 1, ако ++i печати 2. Чудно зошто во for наредба не важи.

Друго сакам да ве прашам зошто не смејам да напишам i==1, дали исто ова се користи во for наредба?
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
== не е оператор за доделување, туку оператор за релација (споредување). == можеш да користиш за споредување на 2 вредности.
 
  • Ја почнал/а темата
  • #25

StMartin

Баниран/a
24 февруари 2008
172
3
Ок, благодарам. Јас имам многу добри книги на српски, но сепак потешко ми оди со учење. Постои ли некоја добра почетничка книга за C, не за C++?
 
Статус
Затворена за нови мислења.

Нови мислења

Последни Теми

Статистика

Теми
43,569
Мислења
823,606
Членови
28,075
Најнов член
GGPPkorcula
На врв Дно