» »

c++ fukncije in procedura

c++ fukncije in procedura

roccat ::

Lepo pozdravljeni sem začetmik v tem in me zanima kako bi se lotili sledeče naloge.

Uporabnik poda besedilo .Izpiši besedilo v obratnem vrstnem redu.Če so v besedilu znaki cifer jih izpustimo.?

Nikakor nevem kako bi zapisal.

darkkk ::

Malo bolj natančno boš moral specificirat zadeve. Ali lahko uporabljaš std::string ali moraš delat s char arrayem?
Ali je tekst podan kot datoteka ali vpiše v konzolo, okno?

Načeloma je to primer šolske naloge, katere namen je "razumevanje konceptov", recept je:

prebereš tvoj tekst, nato greš po tvojem tekstu od konca proti začetku in izpisuješ znake, če pa je znak števka, se ga ne izpiše.

Ko boš probal to narest in če ne bo delalo bomo pomagali dalje.

roccat ::

Ja z poljem in podprogrami kot sta procedura in funkcija .Tudi jaz bolj nerazumem kako bi se lotil da bi izpisal obratni vrstni red .
Tako kot si rekel

menda tako da npr uparabnik poda besedilo tak ga menda program izpiše v obratnem vrstnem redu pa če so št 1 do 9 podane jih program izpusti oz ne izpiše .Tako si jaz razglagam to nalogo ,ali prav razmišljam?

Zgodovina sprememb…

  • spremenil: roccat ()

darkkk ::

Za kam rabiš to?
A compiler maš?
A hello world si že napisal? Napiš to tako, da bo izpisalo "dlrow olleh" in si že na pol poti.

roccat ::

Za šolo rabim nevem kako bi se lotil ,oz nerazumem kaj bi uporabil za izpis obratnega vrsnega red.
nekak tak samo nevem če je prav
lahko bi tui šel s string kot si omenil

cin podaš besedilo,pol za cout naj izpiše obratno ali kako,lahko bi šel s stringom

kako pa stavim primer v ta forum ker sem probal pa mi nepiše da ni html koda zaključena
če mogoče udi kateri ve za dober vodič na internetu ,da si malo pogledam

Zgodovina sprememb…

  • spremenil: roccat ()

hexor ::

Primer za array: Sprehodi se po nizu od konca proti začetku in če trenutni element na določenem indexu vsebuje števko narediš preskok v trenutni iteraciji (uporabiš continue stavek).
RootMachine ;)

darkkk ::

#include <iostream>
#include <string>

void obrni_in_izpisi(std::string str);

int main(void){
	
	std::cout << "Vnesi niz: ";
	std::string input = "";
	std::getline(std::cin, input);
	obrni_in_izpisi(input);
	
	return 0;

}


void obrni_in_izpisi(std::string str)
{
	for(int i = (str.length() - 1); i >= 0;i--){
		if(str[i] >= '0' && str[i] <= '9') continue;
		else std::cout << str[i];
	}
}


sam verjetno ti s tem delam škodo

roccat ::

Ok najlepša hvala

zanima me če iamste kakšne vodiče in navodila za programiranje itd.
Kako začeti .Teorijo še nakako razum potem pa praktično je težje

V šoli nekaj delamo samo me zanima kako najenostavnejše pognati napisan program .V katerem programu programirate najlažje

Zgodovina sprememb…

  • spremenil: roccat ()

darkkk ::

V šoli vpraši :P

roba87 ::

vaja vaja vaja... google je tvoj prijatelj.

roccat ::

Me pa zanima če je uporabljena funkcija in procedura v tem napisanu podprogramu

če mi lahhko kdo razloži napisan program ker ne razumem najbolj.

hexor ::

Najprej bi rad dopolnil darkk-ov program, glede preglednosti..V bodoče uporabljaj raje po #include notaciji še imenski prostor tj. using namespace std; da se izogneš pisanju predpone pred posameznimi I/O stavki.Zdaj pa glede programa; imaš definirano main() vseprisotno funkcijo tj. glavno funkcijo v programu v katerem izvajaš neke operacije (napolniš array, prebereš stavke in naprimer kličeš funkcijo kot v tvojem primeru) in sedaj prebereš stavek, ki ga hočeš obrniti (uporabiš getline funkcijo, ki ji kot prvi argument omeniš branje podatka (cin), kot drugi pa spremenljivko, ki jo hočeš napolniti(tj. referenco- sklic na to spremenljivko)tipa string.Naposled kličeš funkcijo "obrni_in_izpisi" kateri kot argument podaš napolnjen niz, katerega obračaš.V funkciji pa je stvar relativno preprosta....sprehodiš se po nizu znakov od konca (str.length()-1, beri zadnji znak v nizu) , do 0-tega začetnega znaka v nizu in hkrati preverjaš če vsebuje določen element v nizu na i-ti pozicijo števko na desetiškem intervalu od 0 do 9 in če preskočiš dotični indeks s to števko in nadaljuješ v naslednji iteraciji, ki (recimo??) ne vkjučuje števke in izpišeš znak na tisti poziciji.
RootMachine ;)

roccat ::

Samo to a je v tem programu vidna procedura ?

hexor ::

Zakaj nebi bila?Procedura je funkcija v C/C++ in v tvojem primeru je procedura/funkcija "obrni_in_izpisi".
RootMachine ;)

WarpedGone ::

Teorijo še nakako razum potem pa praktično je težje

Ne dečko, ti ne razumeš še ničesar, žal.
Naloga, katero si dobil, ustreza predelani snovi. Greš še Nx čez knjigo/zvezek in si magari naglas bereš napisano.
Pol pa še enkrat od konca proti začetku.
Zbogom in hvala za vse ribe

roccat ::

oK HVALA .Mam neke zapiske samo se ne znajdem .

a pozna kdo kakšne vodiče za to .mislim sem da razumem tisto kar smo napisali v zvzezek da s uporabljamo podprograme za preglednost,in da je manjša koda .itd. Čeprav mi fali en del snovi

Hvala vam za mnenja in predloge ter tako naprej

Zgodovina sprememb…

  • spremenil: roccat ()

roccat ::

Me zanima kako bi pravilno zajkjučil ta program ,da ga uporabnik zaključi !

darkkk ::

Mene tudi :)

Kockica ::

#include <iostream>
using namespace std;

int main()
{
    
    char besedilo[200]; //Deklaracija tabele, v katero lahko vnesemo 200 znakov;
    cout << "Vnesi besedilo" << endl;
    gets(besedilo);//gets = get string; --> Ko poklices tole funkcijo bo program od tebe zahteval,da
                   //vneses znake v tabelo imenovano besedilo.
    
    for(int i=strlen(besedilo); i>=0; i--) //for zanka, ker hocemo, da program prebere besedilo v obratnem vrstnemu redu, smo i
    {                                      //postavili na stevilo znakov, ki smo jih vnesli. Se pravi ce smo prej vnesli 5 znakov, bo i=5.
                                           //Tu smo si pomagali z strlen funkcijo, strlen = string length, funkcija vrne stevilo znakov, ki smo jih prej vnesli.
                                           
    
            
           if(besedilo[i]<48 || besedilo[i]>57) // if stavek --> tale stavek, bo preveril, ce smo vnesli znak in ne cifre, ce je vnesena cifra, jo ne bo izpisal.
                                                // Zakaj 48 in 57? Ker so znaki v ascii tabeli z vrednostjo od 48 do 57 stevila.
           cout << besedilo[i];        
           }
    system("pause>null");
    return 0;
}
    


Enostaven ter amaterski programčič. Če ti ni kaj jasno, kar vprašaj.
Tukaj imas tudi link do ascii tabele --> http://www.cpptutor.com/ascii.htm

mallard ::

gets = get string, overflow buffer
string besedilo;
cin >> besedilo;

roccat ::

mogoče se da z zanko zaključit

hexor ::

string niz=" "; while(true)...../tvoja koda..../ cin>>niz if(niz=="IZHOD") break;
RootMachine ;)

roccat ::

#include <iostream>
#include <string>
#using namespace std;
 
void obrni_in_izpisi(std::string str);
 
int main(void){
     
   cout << "Vnesi niz: ";
   string input = "";
   getline(std::cin, input);
    obrni_in_izpisi(input);
     system("pause");
    return 0;
 
}
 
 
void obrni_in_izpisi(std::string str)
{
    for(int i = (str.length() - 1); i >= 0;i--){
        if(str[i] >= '0' && str[i] <= '9') continue;
        else std::cout << str[i];
    }

}
void obrni_in_izpisi(std::string str);
 
int main(void){
   
   cout << "Vnesi niz: ";
    string input = "";
    getline(std::cin, input);
    obrni_in_izpisi(input);
     system("pause");
    return 0;
 
}
 
 
void obrni_in_izpisi(string str)
{
    for(int i = (str.length() - 1); i >= 0;i--){
        if(str[i] >= '0' && str[i] <= '9') continue;
        else 
        cout << str[i];
    }

}








Probal sem tud takole .me pa zanima če lahko kdo to popravi ker mi ne dela in uporabi funkcijo in proceduro v istem programu ter funkcija mora biti pred podprogramom !ker bi nuno potreboval pravilno rešen in razložen ta program .Prosim Hvala

darkkk ::

I rest my case here.

Moj nasvet: dobi si neko literaturo pa si preberi osnove.

Zgodovina sprememb…

  • spremenil: darkkk ()

roccat ::

Saj berem in pše bom samo rabil pa ta program pravilno rešen

roccat ::

#include <iostream>
#include <string>
using namespace std;
 
void obrni_in_izpisi(string str);
 
int main(void){
     
    cout << "Vnesi niz: ";
    string input = "";
    getline(cin, input);
    cout << endl;
    obrni_in_izpisi(input);
    cout << endl<< endl;
     system("pause");
    return 0;
 
}
 
 
void obrni_in_izpisi(string str)
{
    for(int i = (str.length() - 1); i >= 0;i--){
        if(str[i] >= '0' && str[i] <= '9') continue;
        else 
    cout << str[i];
    }

}

Zgodovina sprememb…

  • spremenil: roccat ()

darkkk ::

Tule si vključil header-je, pa napisal v iz katerega namespace-a jemlješ nekatere živali. (Meni slaba praksa, če že, pol raje using std::string, ampak na tem mestu nima veze, using namespace std je ok.)
#include <iostream>
#include <string>
using namespace std;


Tule si napovedal funkcijo obrni_in_izpisi, nisi je pa se definiral. Prevajalnik v nadaljevanju ve, kaka funkcija je (kaj vrne, kaj dobi noter), kaj drugega ga niti ne briga.


void obrni_in_izpisi(string str);


Na tem mestu maš main, main vodi "flow" tvojega programa.
int main(void){
     
    cout << "Vnesi niz: ";
    string input = "";
    getline(cin, input);
    cout << endl;
    obrni_in_izpisi(input);
    cout << endl<< endl;
     system("pause");
    return 0;
 
}


Tule maš definirano funkcijo obrni_in_izpisi, tule je specificirano kaj tale žival naredi.

 
void obrni_in_izpisi(string str)
{
    for(int i = (str.length() - 1); i >= 0;i--){
        if(str[i] >= '0' && str[i] <= '9') continue;
        else 
    cout << str[i];
    }

}


V tvojem primeru (tj funkcija pred mainom, postaviš pač celotno definicijo funkcije pred main) (skopiraš zadnji blok) in izbrišeš napoved.

Smurf ::

Kaj je pa tako hudo narobe s prototipom funkcije?

roccat ::

A mi lahko tukaj naprej še pomagate ! prosim
Sam probravam pa nikakor ne uspeva !

Meni je profesor v šoli rekel da je nimam navedene v tem programo
a se ne začne pp z void ali kako
mogal bi meti nekako takole zadnji izpiši in obrni nazaj v glavni program
nvaedem string isto for znak mali niz

Z DU WHILE ZANKO BI NEKAKO MORAL TA PROGRAM ZAKLJUČITI. UPORABNIK REČE KOLIKOKRAT SE NAJ PONOVI
Rabim kodo v obliki funkcije in v obliki procedure.
pp MORAM klicati ,
Kodo funkcije moram zapisati za glavnim programom ,kodo precedure pa pred.
rešitev načrtuj in kodiraj ter dokumentiraj
- v glavnem programi izvedi klic obeh PP
-ZA IZHOD UPORABI PARAMETRE in ukaz return
-Program se naj konča ko uporabnik poda funkcijo izhod.
- če je več števil uporabi polje.


NUjno bi rabil nalogo pravilno rešeno ,ker bo profesor ocenjeval.

Zgodovina sprememb…

  • spremenil: roccat ()

darkkk ::

Smurf je izjavil:

Kaj je pa tako hudo narobe s prototipom funkcije?


Čisto nič, razen da se enemu (domnevam superego srednješolskemu prfoksu) zdi odveč.


Kar se tiče pa samega programa, v while zanki izvajaš: prebereš niz (do znaka Enter), ga izpišeš obrnjeno... program zaključiš "nekako", recimo če je vnešen niz prazen. (Oz. to ni tvoj problem, to ti morajo specificirat, ker drgač ne bo nikol prav)

roccat ::

funkcija v obliki podprograma itn

roccat ::

Drugače je pa mislil funkcijo kot PP

ki se deiijo na funkcije in procedure

Navodila

-Koda naj vebuje rešitev v obliki funkcije in procedure

-kodo funkcije zaiši za glavnim programom kodo funkcije pa pred

-v glavnem programu izvedi klic obeh podprogramov ter izpiši rezultate na zaslon

-preveri pravilnost delovanja obeh podprogramov

-za prenos podatkov uporabi

-glavni program se naj konča , ko uporabnik izbere funkcijo izhod,

-če je števil dva ali več uporabi polje

Moral bi uporabiti du while in me vrača nazaj v glavni program

klic pp izpišem v pp.

Drugače pa kao bi nardil da oporabnik sam ugasne program

Zgodovina sprememb…

  • spremenil: roccat ()

darkkk ::

#include <iostream>
#include <string>
#include <sstream>
#include <cstdlib>

using std::string;
using std::cin;
using std::cout;
using std::endl;

void vnesi_obrni_izpisi();
void loveletter();

int main()
{
	string main ("Vnesi izbiro: \n");
	main += "0 - exit\n";
	main += "1 - vnesi, obrni, izpisi \n";	
	main += "2 - pocisti zaslon \n";
	main += "3 - loveletter\n";
	
	string choice;
	int izb;

	do{
		cout << main << std::endl;
		std::getline(cin, choice);
		
		std::istringstream ss(choice, std::istringstream::in);
		if((ss >> izb).fail()){izb = -1;}		
			
		
		switch(izb){
			case 0:
			{
				return 0;
				break;
			}
			case 1:
			{
				vnesi_obrni_izpisi();
				break;
			}
			case 2:
			{
				system("cls");
				break;
			}
			case 3: 
			{
				loveletter();
				break;
			}
			default:
			{
				cout << "Neznan ukaz!\n";
				break;
			}		
		}
		
		
		
	}while(true);

	return 0; //sicer sem ne sme prit
}


void vnesi_obrni_izpisi()
{
	cout << endl <<"Vpisi niz: ";
	
	string input;
	getline(cin, input);
	for(int i = input.length()-1; i >= 0; i--) {
		if(input[i]>= '0' && input[i]<= '9') continue;
		else cout << input[i];
	}
	cout << endl;

}

void loveletter()
{
	system("cls");
	std::string love("     .-.\n     | |\n     | |\n     | |\n    _| |_\n");
	love+="   | | | |-.\n  /|     ` |\n | |       |\n |         |\n";
	love+=" \\         /\n  |       |\n  |       |  ";
	std::cout << std::endl << love << std::endl << std::endl << love << std::endl << std::endl;
	
}



roccat ::

hvala
dobro si naredil


a nimate nič bolj enostavnega
void loveletter to je procedura
void vnesi:obrni je pa funkcija ???

kar zapleten program uh

a v starem programu se neda popravit ma jaz probavam nekaj pa nikakor ne gre

Zgodovina sprememb…

  • spremenil: roccat ()

darkkk ::

Da razjasnimo (Subroutine) @ Wikipedia
C/C++/C# : funkcija = procedura
Obstajajo jeziki, ki to ločijo (fortran, pascal), zanje je procedura "subroutine", ki nič ne vrne, v Cjeziku, void funkcija.

Torej: signatura funkcije, v kateri vpišeš niz in ga neki premeče in obrne bi se v pascalu imenovala procedura.

Main je pa funkcija, ker vrne int.



Dej povej, za katero šolo to rabiš, pa katero literaturo mate za predmet pa kdo je prfoks :P

Zgodovina sprememb…

  • spremenil: darkkk ()

roccat ::

elektro računalniška šola ptuj ,literature nimamo samo učitelj piše nekaj na tablo .Franc Vrbancic.

a ni main int glavni program

funkcia ma neke reko da ma ime bool,float

kot nekako takole

Zgodovina sprememb…

  • spremenil: roccat ()

roccat ::

float FC(float c,float d)//začetek funkcije [ 
{ 
			  system("cls");//počisti ekran, zaradi boljše preglednosti 
			  d=c-32;//1 del enačbe, po kateri se pretvarja iz fehrenheit v celzija
              d=d/1.8;//2 del enačbe 
			  return (d);  
}//konec funkcije


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C strukture, kazalci naloga pomoc

Oddelek: Programiranje
51385 (1280) DavidJ
»

[C++] Kopiranje char arraya v drug char array

Oddelek: Programiranje
71190 (1061) win64
»

C++ preštej število enk

Oddelek: Programiranje
111224 (1007) kihc
»

int to string v c++

Oddelek: Programiranje
272245 (1973) OwcA
»

obratno izpiši besedi - c++

Oddelek: Programiranje
131621 (1452) losnah

Več podobnih tem