Jump to content

C++ Pāris jautājumi.


Remus
 Share

Recommended Posts

Attieciigais kompileris karaas uz manis rakstiitaam programmaam, bet no tutoriaalja njemtaas kompileejaas kaa tam jaabuut.

luudzu pasakat kur manis rakstiitajaa kodaa kljuuta kas pie taa noved.

#include<iostream.h>



int main ()

{

int i;

cout << "ievadiet veertiibu: ";

cin  >> i;

cout << "juus ievdiijaat"<<i;

cout <<"tas dubultaa ir "<<i*2<<endl;

return 0;

}

 

shobriid staav pakaaries pie "linking"

P.S kljuudas netika atrastas.

 

Topika nosaukums ir mainīts, un uzmaniiba jaapievērš manam postam Wed Aug 03, 2005 1:13 am

Link to comment
Share on other sites

Iegūta pa sānu celjiem.

Bet taa manupraat nav kompilera, bet gan mana vaina. Un es veelos izskaust kluudas kameer veel maacos.

 

P.S aizmirsu pateikt, ka taa ir 6.0 versija.

Link to comment
Share on other sites

Labi man izdevaas kljuudu noveerst! To izrasiija situaacija, kad starp peedijnjaam un << nebija atstarpes. Vai tas ir normaali?

Link to comment
Share on other sites

idejiski kodā nav kļūdu.. varbūt kaut kur paslēpies kāds viltīgs sintakses brāķism, bet tad normālam kompilatoram būtu jāuzrāda sintakses kļūda, ja vien dēļ šīs kļūdas viņš neinterpretē uzrakstīto pavisam savādāk nekā tu esi domājis(bet neizskatās ka tas tā ir šajā gadījumā)..

jebkurā gadījuma kompilatora pakāršanās nav normāla reakcija - iesaku pārinstalēt vai dabūt normālu kompilatoru..

 

Iespējams šajā gadījumā ir problēma ar liekiem " ", taču cik atceros parasti tas neizsauc nekādas problēmas.. pamēģini tikt vaļā no visiem liekajiem " ".. teiksim pamēģini kas notiek ar šādu kodu..

#include<iostream.h> 



int main () 

{ 

  int i; 

cout<<"ievadiet veertiibu: "; 

cin>>i; 

cout<<"juus ievdiijaat "<<i; 

cout<<"tas dubultaa ir "<<i*2<<endl; 

return 0; 

}

edit: tā kā pakarās linking procesā uz šādu vienkāršu programmu, tad pieņemu ka kompilators ir kaut kā nepareizi uzstādijiesuzinstalējies vai ir vienkārši sačakarēt - piemēram nevar atrast standarta bibliotēkas..

vēl ir gadījies ka šāda iostream iekļaušana neit cauri:

#include<iostream.h>

pamēģini šādi:

#include<iostream>

using namespace std;

Link to comment
Share on other sites

Straadaa! Vieniiigaa starpiiba kaadu redzu starp 1 un 2 variantu ir mazaak space.

Itkaa manuaali kas naaca liidzi bija maaciits rakstiit

#include<iostream> 

using namespace std;

 

Bet principaa straadaa abi varianti.

Link to comment
Share on other sites

.....b.cpp(3) : error C2447: missing function header (old-style formal list?)

 

piereizes pajutaashu ko tas noziimee.

kompileris raada ka kljuuda ir

#include<iostream.h>

int main ();

{<-----------------------------------------------SHEIT

int a=256 //konta atlikums

int i //ievadāmais skaitlis

 cout<<"Jūsu konta atlikums ir "<<a<<"Ls"<<endl;

 cout<<"Ievadiet summu kuru vēlaties izņemt ";

 cin>>i;

 cout<<"Jūsu kontā paliek "<<a-i<<"Ls"<<endl;

return 0;

}

Link to comment
Share on other sites

Guest bubu

Tev tur ir nodefinēta funkcija int main(); bez koda!! semikols aiz fjas pabeidz tās deklarāciju. Tāpēc { ... } daļa vairs neattiecās uz funkcijas deklarāciju.

Link to comment
Share on other sites

Oij cik stulba kljuuda no manas puses :oops:

Paldies Dawis un Bubu.

Link to comment
Share on other sites

M$ VC++ 6.0 ir daudzi gljuki. :( Pats esmu sastapies ar dazjiem no tiem. Labaakais bija tas, ka Debug versijaa viss gaaja labi, bet Release versijaa optimizators kaukaa maaceeja nooptimizeet saskaitiishanu taa, ka nekas negaaja (t.i. saskaitiija nepareizi). :lol:

 

Iesaku pameegjinaat sho kodu uz citiem kompilatoriem vai arii iegaadaaties VS.NET 2003. Mosh buus izlabots. ;)

Link to comment
Share on other sites

Varbuut panjemt pro edition? taa mosk ir kaartiigaaka.

Kaads ir nesaiisinaatais nosaukums VS.NET? visual ..........

Link to comment
Share on other sites

VS.NET2003 = Visual Studio .NET 2003. Vislielaakaa pacinja saucas "Enterprise Architect". To arii iesaku njemt. ;)

Link to comment
Share on other sites

M$ VC++ 6.0 ir daudzi gljuki. :( Pats esmu sastapies ar dazjiem no tiem. Labaakais bija tas, ka Debug versijaa viss gaaja labi, bet Release versijaa optimizators kaukaa maaceeja nooptimizeet saskaitiishanu taa, ka nekas negaaja (t.i. saskaitiija nepareizi). :lol:

 

Iesaku pameegjinaat sho kodu uz citiem kompilatoriem vai arii iegaadaaties VS.NET 2003. Mosh buus izlabots. ;)

 

visdrīzāk tu gļukains, vai tavs kods (bez apvainojumiem).

Pasaulē ļoti daudz lieto šo te un nesūdzās :)

 

un vispār, jāpariet uz GCC + kaut kāds GTK+, kamēr nav pa vēlu :) [vismaz crossplatform būs kaut kāds]

Link to comment
Share on other sites

Nee, nee, tas patiesi bija VC++ 6.0 gljux! Toreiz es veel taas lietas maaciijos, un man ar to bugu paliidzeeja viens riktiigs Guru. Vinjsh panjeema, uztaisiija ASM source listingu tai progai un tur atklaajaas briinumu lietas. ;) Tas patiesi BIJA VC++ 6.0 optimaizera gljux.

 

Nupat veel atcereejos - ja taam rindinjaam pielika priekshaa kaut ko taadu kaa x=x; tad viss saaka straadaat. :) Un taas gljukojoshaas rindinjas patiesi bija kaukaadas skalaaras operaacijas ar int tipa mainiigajiem (vairs neateros, kas tieshi).

 

Vot. 8)

Link to comment
Share on other sites

Nee, nee, tas patiesi bija VC++ 6.0 gljux! Toreiz es veel taas lietas maaciijos, un man ar to bugu paliidzeeja viens riktiigs Guru. Vinjsh panjeema, uztaisiija ASM source listingu tai progai un tur atklaajaas briinumu lietas. ;) Tas patiesi BIJA VC++ 6.0 optimaizera gljux.

 

Nupat veel atcereejos - ja taam rindinjaam pielika priekshaa kaut ko taadu kaa x=x; tad viss saaka straadaat. :) Un taas gljukojoshaas rindinjas patiesi bija kaukaadas skalaaras operaacijas ar int tipa mainiigajiem (vairs neateros, kas tieshi).

 

Vot.  8)

 

nu nez. vai tas optimizer vajadz'igs,... bet kods uzreiz ir jaraksta smuks.

+ lietojam kādu kompresoru.

 

PS: ja esi paranoikis, tad vari uzreiz inline asm bakstīt un neuztraukties par gļukiem :)

Link to comment
Share on other sites

Nu, pag! Debug modee vinjsh tiishaam sajaaj kodu, iekljaujot tajaa lielu cjupu ar Debug info utml. lietaam. Kods sanaak daudz leenaaks un lielaaks, bet ir debugojams. Release modee vinjsh to visu vaac sasodīts aaraa un taisa kodu daudz aatraaku, mazaaku un vispaar! Protams, optimaizoshanu var atsleegt saglabaajot paareejaas Release modes iipashiibas, bet vai tam jeega, ja 99% gadiijumu tas patiesi nostraadaa? Sho gadiijumu es arii kaut kaa paarraxtiiju biki savaadaak un viss aizgaaja!

Link to comment
Share on other sites

Es negribeeju taisiit jaunu topiku, taapeec paarsaucu sho te.

 

Probleema sekojosha: Programma itkaa straada, bet tikai liidz briidim, kameer jaaizpildaas if un else. Tad taa vienkaarshi beidz darbu. Pats esmu iestreedzis, un man nesanaak sho kljuudu labot.

Luuk kods.

#include <iostream>

using namespace std;



int main ()

{

int a=256; //konta atlikums

int i; //ievadāmais skaitlis



 cout<<"Jusu konta atlikums ir "<<a;

 cout<<"Ls"<<endl;

 cout<<"Ievadiet summu kuru vēlaties iznemt ";

 cin>>i;

 cout<<"juus ievadiijaat veertiibu "<<i<<endl;

 if (i<=a)

 {cout<<"Jusu konta paliek "<<a-i<<"Ls"<<endl;}

 else 

 {cout<<"pa maz naudas"<<endl;

 	cout<<"nospiediet enter lia beigtu"<<endl;}

return 0;

}

 

P.S kompiltors kljuudas neatrod.

Link to comment
Share on other sites

Guest bubu

Pamēģini ielikt a-i iekavās, tb ..<<(a-i)<<..

 

P.S. Tu par tādu lietu kā debugošanu (atkļūdošanu) un debugeri esi dzirdējis?

Link to comment
Share on other sites

Pamēģini ielikt a-i iekavās, tb ..<<(a-i)<<..

 

P.S. Tu par tādu lietu kā debugošanu (atkļūdošanu) un debugeri esi dzirdējis?

 

Debugeris kljuudas neuzraada. nav. vieniigi kaut kaadus murgojums saraksta peec tam kad jamaa apgaazhas.

Ko ,lai man taa lieta leeni iet uz priekshu.

Link to comment
Share on other sites

Ieliku iekavaas, un pakaaraas svaigi paarinstaleetais kompileris :evil:

shitaa var dabuut nervu sabrukumu......

Link to comment
Share on other sites

Guest bubu

Debugeris kļūdas nekad neuzrāda. Debueris palīdz cilvēkam, kas ar to strādā, vieglāk atrast kļūdas.

Link to comment
Share on other sites

Guest bljaaviens

es nesaprotu, vai tieshaam gruuti salikt liekus probelus (atstarpes)!??? buus arii vieglaak lasiit savu kodu.

 

cout<<"Ls"<<endl; - nu kursh taa raksta!?

cout << "Ls" << endl; - kapeec nevar shitaa?

 

un vispaar, mozh vajag iesleegt pilnos warningu/erroru pazinojumus (ja M$ kompilerim tas vispaar ir iespejams) tad tachu visas shiis sintakses kljuudas uzreiz izleks un nekas vispaar netiks linkots, kameer neizlabos! ne ar gcc, nedz bcc man nekad nav bijushi shaadi paarpratumi...

Link to comment
Share on other sites

remus, nokompilēju tavu kodu, notestēju - viss strādā :)

Tev liekas, ka nestrādā, jo programma, tūlīt pēc izvades, beidz darbu un logs pazūd. Man, izmantojot MinGW izstrādes vidi, pati vide uztaisa pauzi pēc programmas beigšanās un tur es visu outputu redzu :)

 

bljaaviens, programmēšanas stils ir jautājums, par kuru daudzi un dikti strīdās, bet jēga??? Varbūt ka citam kods liekas lasāmāks bez liekām atstarpēm...

Link to comment
Share on other sites

remus, palaid "command prompt", aizlien līdz vietai, kur dzīvo tava sakompilētā programma (*.exe) un tad palaid... redzēsi kā strādā :)

 

p.s. Izskatās, ka tev ir viena neliela loģiska kļūda programmā, bet to jau pats vari atrast :)

Link to comment
Share on other sites

Guest bljaaviens
programmēšanas stils ir jautājums, par kuru daudzi un dikti strīdās, bet jēga???
iesacejam, manuprat, vieglaak buus orienteeties un debugeet shaadu kodu:
int xtoint(char xdigit) {

  if (isxdigit(xdigit)) {

     if (xdigit <= '9') {

        return xdigit - '0';

     }

     return toupper(xdigit) - 'A' + 10;

  }

  return -1;

}

nekaa to pashu saiisinaatajaa formaa:

int xtoint(char xdigit){if(isxdigit(xdigit)){if(xdigit<='9')

{return xdigit-'0';}return toupper(xdigit)-'A'+10;}return -1;}

Link to comment
Share on other sites

2 PiRX

To ka vinja straadsaa es zinaaju, bet vinja priekshlaiciigi beidza straadaat neprasot nospiest ENTER.

 

Cik es saprotu nestraadaa taa dalja kas seko peec "else" Tikai nesaprotu kaapeec.

 

2 Bubu

Tad aciim redzot nemaaku ar debuggeri riikoties(nevienaa tutoriaali neesmu redzeejis taa pamaaciibu.). lai atrasutu kljuudas es izmantoju "go to error/tag"

 

 

Jaa programmeeshana ir smaga lieta :roll:

Link to comment
Share on other sites

Tā daļa pēc else strādā. Varbūt vienīgi nedara to, ko tu vēlējies panākt. Konkrētajā gadījumā tiek izvadīts

pa maz naudas

nospiediet enter lia beigtu

 

nekur nekas netiek prasīts ievadīt

 

P.S. cik ātrumā iečekoju gūglē - gaidīt entera ievadi iekš C++ nav nemaz tik vienkārši

Link to comment
Share on other sites

Guest aija

Nevar būt tā, ka neprasa nospiest ENTER, jo kodā nemaz nav norādīts? Tur laikam kaut kāds getch() bija jāraksta...

Link to comment
Share on other sites

Guest bubu

He, aijux arī te ira!

getch() bija iekš C (vai arī ja grib bez streamiem darīties). Iekš C++ to var izdarīt šitā:

cin.get();

Link to comment
Share on other sites

bubu, man cin.gec() nenostrādāja :(

 

izrādās - vajadzēja dubultā. Laikam jau no tā skaitļa ievades viens enter paliek kkādā rindā

 

tb, vajadzēja:


cin.get();

cin.get();



Link to comment
Share on other sites

O paarkompileeju, un pazuda gljuks, kad neipildiijas else dalja.

Paldies visiem kas paliidzeeja.(liidz naakamajai reizei)

Link to comment
Share on other sites

Ceru ka veel neesmu sakritis jums visiem uz nerviem, bet ko lai citu iesaak.

taatad kaa lai noveersh gluku kura rezultaataa saakuma atlikums ir 308 nevis 256.(ja i deklaree ar int skaitlis ir lielaaks.)

nu luuk kods

#include <iostream>

using namespace std;



int main ()

{



char i; //ievadāmais skaitlis

int a=256; //konta atlikums	

sakums:

 cout<<"Jusu konta atlikums ir "<<a-i;

 cout<<"Ls"<<endl;

 cout<<"Ievadiet summu kuru velaties iznemt ";

 cin>> i;

 cout<<"juus ievadiijaat veertiibu "<<i<<endl;

 if (i<=a)

 cout<<"Jusu konta paliek "<<a-i<<"Ls"<<endl;

 else 

 cout<<"pa maz naudas"<<endl;

 cout<<"Vai velaties iznjemt veel naudu?"<<endl;

 

izvele:

 int b;

 cout<<"Nospiediet 1, lai beigtu darbu, 2, lai turpinātu"<<endl;

 cin>>b;

 if (b==1) goto beigas;

 if (b==2) goto sakums;

 if (b!=1,2) 

 cout<<"nepareiza komanda"<<endl; goto izvele;

beigas:

return 0;

}

 

Paldies visiem, kas grasaas paliidzeet.

Link to comment
Share on other sites

Guest bubu

Nezinu kādus skaitļus tu tur ievadi, ka tā sanāk, bet iesaku padomāt par mainīgā i tipu (char = 0..255). Tam tu robežas nepārsniedz? Nebūtu labāk to par int nodeklarēt!? Un pasaki kādus skaitļus tu ievadi, ka tādu rezultātu saka.

 

P.S. goto ir evil. Iesaku padomāt par while, do vai for ciklu ciklu.

if (b!=1,2) ir ļoti nekorekts pieraksts! Pie tam padomā - ja izpidlās viens no tiem b==1 vai b==2 ifiem, tad jau no šī ifa nav nekādas jēgas - 100% b nebūs ne 1, ne 2, vispār var nelikt nekādu ifu, bet uzreiz erroru izvadīt.

Link to comment
Share on other sites

cout<<"Jusu konta atlikums ir "<<a-i;

pirmo reizi izpildot rindiņu i vēl nav ievadīts, un nekur arī nav norādīts, kādam tam būtu jābūt, tāpēc i var gadīties dajebkāds skaitlis...

Link to comment
Share on other sites

Guest bubu

Gljuks: un ko pēc tavām domām nozīmē šī rindiņa:

   int a=256; //konta atlikums    

 

Remius: vēl pie tam ņem vērā, ka char mainīgajā var ievadīt tikai vienu ciparu! Ja ievadīsi '0', tad tā ascii vertība būs 48, kas tiks izmantota tajā aritmētiskajā operācijā (atņemšanā) ar a.

Link to comment
Share on other sites

   char i; //ievadāmais skaitlis 

  int a=256; //konta atlikums    

sakums: 

     cout<<"Jusu konta atlikums ir "<<a-i;

vietā

   int i=0; //ievadāmais skaitlis

  int a=256; //konta atlikums

sakums:

    cout<<"Jusu konta atlikums ir "<<a-i;

es jau nesaku, ka a nav zināms, nav zināms i

Link to comment
Share on other sites

Guest bubu

Āh pārlasījos, likās, ka teici par a. Nu ja, bet i gan nav definēts.

Link to comment
Share on other sites

Iesaku paarraxtiit shitaa:

#include <iostream> 

using namespace std; 



int main () 

{ 

  int i; //ievadāmais skaitlis 

  int a=256; //konta atlikums    

  int b=1; 

  do

  {

     cout<<"Jusu konta atlikums ir "<<a; 

     cout<<"Ls"<<endl; 

     cout<<"Ievadiet summu kuru velaties iznemt "; 

     cin>> i; 

     cout<<"juus ievadiijaat veertiibu "<<i<<endl; 

     if (i<=a) 

        cout<<"Jusu konta paliek "<<a-i<<"Ls"<<endl; 

     else 

        cout<<"par maz naudas"<<endl; 

     cout<<"Vai velaties iznjemt veel naudu?"<<endl; 

     while(1)

     {

        cout<<"Ievadiet 1, lai beigtu darbu, 2, lai turpinātu"<<endl; 

        cin>>b; 

        if ((b!=1) && (b!=2)) 

           cout<<"nepareiza komanda"<<endl;

        else

           break;

     }

  }

  while (b == 1);

  return 0; 

}

Dazji gan var piesieties pie while(1). Manupraat, taa ir optimaalaak. :mrgreen:

Link to comment
Share on other sites

Labi... es ar vienu jautājumu uzprasīšu... jūtos varen debils C++...

#include <iostream>

#include <fstream>

using namespace std;



int main()

{

   int speisi = 0;

   int chari = 0;

   int teikumi = 0;

   char ch;

   string ca;

   cout << "Kura faila statistiku gribi zinaat?" << endl;

   cin >> ca;

   ifstream fails("/etc/mtab");



   if (! fails)

   {

       cout << "A vot nevaru atveert!" << endl;

       return -1;

   }



   while (fails.get(ch))

   {

       switch (ch) {

           case ' ':

               speisi++;

               break;

           case 'n':

           case 't':

               break;

           case '.':

               teikumi++;

               break;

           default:

               chari++;

               break;

       }

   }



   cout << "Taatad ir " << speisi << " atstarpes, " << chari << " burti/ziimes/hvzkas, " << teikumi << " teikumi" << endl;



      return EXIT_SUCCESS;



}



tas kods strādā... bet ja es nomainu ifstream fails("/etc/mtab"); uz ifstream fails(ca); šams izgrūž error.. kā to labot?

Link to comment
Share on other sites

Negribas taisīt jaunu topiku...

Tātad uzdevums ir šeit

Mans variants testā savāc 8 no 10 punktiem, 2 nedabū, jo uzdevumam ir 3 sekunžu ierobežojums :( Tā, kā boot.lv forumā apgrozās daudzi gudri programmētāji/matemātiķi/utt. ,ceru, ka kāds palīdzēs un ieteiks veidus, kā uzlabot programmas ātrdarbību :wink: , vai parādīs, kā šo pašu uzdevumu izpildīt savādāk :twisted:

Ar programmēšanu sāku (nopietni) ņemties šovasar, tāpēc nenolīdziniet mani ar zemi, ja kaut kas nav tā kā pieņemts, bet padomi - welcome :)

Mans variants:

#include <fstream.h>

#include <math.h>



int main()

{

//mainigo definesana

int sakuma_skaitlis,beigu_skaitlis,ne_pirmskaitli=0;

ifstream input;

ofstream output;



//mainigo nolasisana

input.open("primes.in");

input>>sakuma_skaitlis;

input>>beigu_skaitlis;

input.close();



//parbauda cik skaitlu dotaja intervala nav pirmskaitli	

for(int i=sakuma_skaitlis,kvadratsakne;i<=beigu_skaitlis;i++)

{	

 //ja ir kads dalitajs, tad tas ir mazaks, vai vienads ar kvadratsakni

 kvadratsakne=(int)sqrt(i); 

 

 for(int j=2;j<=kvadratsakne;j++) 

 {

 	if(i%j==0)           

 	{

   ne_pirmskaitli++;

   break;

 	}

 }	

}



//datu izvade

output.open("primes.out");

output<<(beigu_skaitlis-sakuma_skaitlis+1-ne_pirmskaitli);

output.close();



return 0;

}

Pats esmu mēģinājis izslēgt no cikla visus pāra skaitļus, un ja godīgi vairāk ideju man arī nav...

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...