Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++ alkukompurointi

Sivun loppuun

Spirit [20.09.2004 12:03:30]

#

Nyt kun vähän aikaa sitten jaksoin siirtyä Basicin ja Pascalin kautta C++:aan, niin tuli eteen pieniä ongelmia.
Aika vaikeeta näin aluksi sisäistää tätä uutta tyyliä.

Eli. MIten tekstiä saa tiettyyn kohtaan ruutua. Löytyykö tähän ollenkaan keinoa vakiokirjastoista?
Toinen kysymys olisi, että miten tieto liikkuu pääohjelman ja funktioiden välillä?

rndprogy [20.09.2004 12:15:02]

#

En tiedä miten tekstin saa tiettyyn kohtaan ruutua kun ei ole koskaan ollut tarvetta niin tehdä mutta funktiot toimii yksinkertaistettuna näin:

#include <iostream.h>
//funktio niminen funktio
funktio()
{
	cout << "funktio juu";
}
int main()
{
funktio();     //tässä kohtaa kutsutaan funktio nimistä funktiota
return 0;
}

hunajavohveli [20.09.2004 12:16:13]

#

Jos määrittelet muuttujan koodin alussa main- ja muiden funktioiden ulkopuolella, muuttujista tulee jaettuja kaikkien funktioiden kesken.
Tekstin kirjoituskohdan määrittämiseen en tiedä muuta keinoa kuin Gotoxy, joka löytyy conio.h:sta. Tätä headeria ei kyllä löydy kaikista kääntäjistä.

hunajavohveli [20.09.2004 13:20:13]

#

Monissa tapauksissa tieto funktiosta toiseen on tietysti hyvä siirtää parametrien avulla.

Deewiant [20.09.2004 13:40:31]

#

-Spirit kirjoitti:

Eli. MIten tekstiä saa tiettyyn kohtaan ruutua. Löytyykö tähän ollenkaan keinoa vakiokirjastoista?

Eipä löydy. hunajavohvelin mainitsema conio.h löytyy ainakin Borlandin kääntäjistä vakiona, joten jos sinulla on se, se ratkaisee ongelmasi.

Muuten (ja ehkä Borlandinkin kanssa, on tämä sen verran kätsy) kannattaa käyttää monipuolista PDCurses-kirjastoa.

Metabolix [20.09.2004 14:52:47]

#

Kun kerran olet käyttänyt Pascalia, niin pääsääntöisesti sanoisin, että tieto liikkuu aivan samalla tavalla. Palautusarvon määrittely vain on erilainen:
int funktio(int a, int b) on funktio, jonka syötteenä on kaksi int-arvoa ja joka palauttaa int-arvon.
Palauttaminen tapahtuu return-komennolla, ja siihen katkeaa funktion suorittaminen. Result-muuttujaa ei siis ole. Palautusarvona on usein void eli tyhjä, jolloin funktio vastaa Pascalin procedurea.

rndprogyn esimerkkiä kommentoisin sen verran, että funktion eteen olisi hyvä määritellä palautusarvo, vaikka se olisikin void.

Millä olet Pascalissa tulostanut tekstiä tiettyyn kohti ruudulla? Pascalin vakiokirjastoilla se nimittäin ei onnistu, kuten ei myöskään C++:n.

rndprogy [20.09.2004 22:21:05]

#

lainaus:

rndprogyn esimerkkiä kommentoisin sen verran, että funktion eteen olisi hyvä määritellä palautusarvo, vaikka se olisikin void.

Miksi? Ja tuo oli vain yksinkertaistettu. Ja juuri noin taisi oli yhdessä tutoriaalissakin.

firebug [20.09.2004 22:30:01]

#

rndprogy kirjoitti:

Miksi? Ja tuo oli vain yksinkertaistettu. Ja juuri noin taisi oli yhdessä tutoriaalissakin.

Ei kaikkea kannata uskoa ;)

Tuon funktion palautusarvon lisäksi iostream.h:n tilalla sijasta kuuluisi käyttää iostreamia. Tällöin mm. cout on määritelty std-nimiavaruudessa.

Metabolix [20.09.2004 22:31:18]

#

warning C4508: 'funktio' : function should return a value; 'void' return type assumed
Näin sanoo VC++ -kääntäjä. Vaikkei tuo ohjelman toimintaan vaikutakaan, niin tämä on täysin tyylikysymys. Muistelisin vielä, että jokin kääntäjä sanoo 'int' return type assumed ja valittaa seuraavaksi, että funktiosta puuttuu return.
Hieman sama asia kuin tyypinmuunnokset; eiväthän nekään ole pakollisia:

double D = 0.1231231;
int I = (int)D;

Spirit [21.09.2004 13:32:33]

#

lainaus:

Millä olet Pascalissa tulostanut tekstiä tiettyyn kohti ruudulla? Pascalin vakiokirjastoilla se nimittäin ei onnistu, kuten ei myöskään C++:n.

Siis "Turbo" Pascalissa?
Ja DJGPP:tä käytän, rhiden kanssa.

Mutta kiitoksia vastauksista.

kaviaari [22.09.2004 08:23:58]

#

rndprogy kirjoitti:

En tiedä miten tekstin saa tiettyyn kohtaan ruutua kun ei ole koskaan ollut tarvetta niin tehdä mutta funktiot toimii yksinkertaistettuna näin:

#include <iostream.h>
//funktio niminen funktio
funktio()
{
	cout << "funktio juu";
}
int main()
{
funktio();     //tässä kohtaa kutsutaan funktio nimistä funktiota
return 0;
}

Itseasiassa asia hoidetaan oikeasti näin:

#include<iostream.h>
using namespace std;

void funkkari(); // Funktion prototyyppi

void funkkari()  // Funktion määrittely
{
   cout << "Ollaan funktiossa\n";
}

int main()
{
   cout << "Ollaan mainissa\n";
   funkkari();  // Funktion kutsu
   return 0;
}

ja ajattelin että pistän vielä tälläsen funktion joka antaa paluuarvoja.

#include<iostream.h>
using namespace std;

int yhteen(int a, int b); // Funktion prototyyppi

int yhteen(int a, int b)  // Funktion määrittely
{
   return a+b;
}

int main()
{
   cout << "Kutsutaan yhteen funktiota arvoilla 8 ja 9\n";
   cout << yhteen(8,9);
   return 0;
}

rndprogy [22.09.2004 10:25:24]

#

kaviaari kirjoitti:

Itseasiassa asia hoidetaan oikeasti näin:

Kyllä se ainakin kääntäjästä meni läpi ja kirjoitti sen tekstin. Sitä paitsi olenkin käyttänyt lähinnä C:tä. Siksi tuli laitettua se noin.

Deewiant [22.09.2004 14:00:33]

#

Kaviaari kirjoitti:

Itseasiassa asia hoidetaan oikeasti näin:

Ei tarvitse prototyypata funktiota jos se on ennen toista funktiota, jossa sitä kutsutaan. Eli esimerkissäsi kannattaisi joko siirtää funktion "funkkari()" määrittely main()-funktion jälkeiseksi, tai prototyyppi poistaa. Eipä ole tietenkään pakko, mutta turhaan se prototyyppi nyt on siellä.

kaviaari [23.09.2004 19:26:54]

#

Hmm mmulla ei kyllä menny läpi, g++:aa käytän. Sori joo menihän se läpi ... ehem. sori :<

Metabolix [23.09.2004 22:18:40]

#

Eihän tuota funktion prototyyppiä tarvita jos funktio on koodin alussa. Tilanne olisi toinen, jos:

#include <stdio.h>
void funktio();

int main()
{
  funktio();
  return 0;
}

void funktio()
{
  printf("Moi!");
}

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta