Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  16 1332
har har lært meg litt c++ i dag..

jeg bestemte meg for å prøve å lage en kalkulator:

jeg kalte tråden komedie for jeg er sikker på at alle som leser koden kommer til å le..

Kode

#include <iostream>
#include <string>
using namespace std;

int pluss (int a, int b) {
int s = a + b;
return (s);
}

int minus (int a, int b) {
int s = a - b;
return (s);
}

int gange (int a, int b) {
int s = a * b;
return (s);
}

int dele (int a, int b) {
int s = a / b;
return (s);
}

int gjorno (int c, int d, int (*rmetode)(int, string)) {
int s = (*rmetode)(c, d);                 //feilen er her..
return (s);
}

int main () {
int x, y, ikkeno;
string metode;

cout << "velkommen til tobbes kalkulator\n\n";
cout << "trykk enter for A fortsette..";
cin >> ikkeno; cout << "\n\n\n";

cout << "for A plusse skriv \"pluss\"\n" << "for minus skriv \"minus\" b\n" << "for å gange skriv \"gange\"\n" << "for å dele skriv \"dele\": ";
getline(cin, metode);

cout << "\n\n" << "ok, sA du skal " << metode << "\n\n";
cout << "skriv fOrste siffer: ";
cin >> x;
cout << "\n\n" << "skriv andre siffer: ";
cin >> y; cout << "\n\n";

int f = gjorno (x,y,metode);
cout << f;

cout << "trykk enter for å avslutte.."
cin >> ikkeno;

return 0;
}
Sist endret av torby34; 6. august 2008 kl. 20:55.
Jeg ler ikke, men synes det interessant at du prøver å løse dette med funksjonspekere.

Det ser ut som om du prøver å kalle en funksjon ved å oppgi navnet til den som en streng. Dette er egentlig ikke mulig i C++ siden du må ha minne-addressen til funksjonen for å vite hvor den er, og ikke navnet til den.

Det du prøver hadde fungert bedre i ett high-level språk som støtter evaluering av kode og symboler run-time. Eksempler er interpreterte språk som Python, Perl og lignende.

For å løse dette med funksjonspekere i C++ så må du nok gjøre en sammenligning av strenger, for å se hvilken funksjons minne-adresse som skal passeres til "gjorno" rutinen din.
Gratulerer med dine første barndomssteg i (den vidunerlige) C++ verdenen. Synes det er bra du leker litt med funksjoner og slikt. Men jeg kunne satt litt pris på en forklaring på hva det er du egentlig prøver å gjøre med gjorno-funksjonen din. Funksjonspeker? Småtrøtt og sliten idag, så jeg orker rett og slett ikke gjette eller lese meg fram til det og se rundt hva det er du prøver å gjøre. Skriver du det med ord, kan jeg/vi kanskje komme med en liten løsning til deg!

Edit: Skreiv et lynkjapt eksempel på hvordan du kan bruke en funksjonspeker. Antar at det er det du prøvde på.

http://nigger.pastebin.com/f450583aa

Kode

#include <iostream>

using namespace std;

int dothis( int a, int b )
{
	return a + b;
}

int dothat( int a, int b )
{
	return a * b;
}

int execute( int a, int b, int (*pt)(int, int) )
{
	return pt( a, b );
}


int main( void )
{
	cout << "Resultat: " << execute( 5, 6 &dothis );

	return 0;
}
Sist endret av m0b; 6. august 2008 kl. 22:34.
Sitat av rkruger
Jeg ler ikke, men synes det interessant at du prøver å løse dette med funksjonspekere.

Det ser ut som om du prøver å kalle en funksjon ved å oppgi navnet til den som en streng. Dette er egentlig ikke mulig i C++ siden du må ha minne-addressen til funksjonen for å vite hvor den er, og ikke navnet til den.

Det du prøver hadde fungert bedre i ett high-level språk som støtter evaluering av kode og symboler run-time. Eksempler er interpreterte språk som Python, Perl og lignende.

For å løse dette med funksjonspekere i C++ så må du nok gjøre en sammenligning av strenger, for å se hvilken funksjons minne-adresse som skal passeres til "gjorno" rutinen din.
Vis hele sitatet...

takk for svar.. men trodde c++ var mest high-level av alle språk jeg..
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av tobbe654
takk for svar.. men trodde c++ var mest high-level av alle språk jeg..
Vis hele sitatet...
Når det kom var det eit høgnivåspråk. I dag er det ein god del som reknar C og C++ som relativt lavnivå, fordi du må tenke på ting som minneallokering o.l. medan ekte høgnivåspråk som python og java abstraherer deg fullstendig for maskinvara du jobber med.
Absolutt ikke, innenfor dagens "standarder" så er faktisk C++ relativt lavnivå. Selv bruker jeg mest C# i jobbsammenheng og privat, så jeg er noe smårusten hva C++ angår.
Sitat av |d13m0b
Gratulerer med dine første barndomssteg i (den vidunerlige) C++ verdenen. Synes det er bra du leker litt med funksjoner og slikt. Men jeg kunne satt litt pris på en forklaring på hva det er du egentlig prøver å gjøre med gjorno-funksjonen din. Funksjonspeker? Småtrøtt og sliten idag, så jeg orker rett og slett ikke gjette eller lese meg fram til det og se rundt hva det er du prøver å gjøre. Skriver du det med ord, kan jeg/vi kanskje komme med en liten løsning til deg!

Edit: Skreiv et lynkjapt eksempel på hvordan du kan bruke en funksjonspeker. Antar at det er det du prøvde på.

http://nigger.pastebin.com/f450583aa

Kode

#include <iostream>

using namespace std;

int dothis( int a, int b )
{
	return a + b;
}

int dothat( int a, int b )
{
	return a * b;
}

int execute( int a, int b, int (*pt)(int, int) )
{
	return pt( a, b );
}


int main( void )
{
	cout << "Resultat: " << execute( 5, 6 &dothis );

	return 0;
}
Vis hele sitatet...
ja, det var det jeg prøvde på, men jeg vil at brukeren skal velge siffere og regnemåte.. men hvordan gjør jeg det uten string?
char-array??


---EDIT---

ok.. så å lære c++ er bare tull??

jeg vurderte python før jeg begynte.. er det smartere?
Sist endret av torby34; 6. august 2008 kl. 22:42.
Nope C++ er ikke high level i den forstand Python og Perl er high level, c++ er kompilert språk og kommer da inn under sjangeren compiled languages slik som C, Fortran og til en viss grad java.
Sånnsett. Er litt usikker på hvordan man kan konvertere strenger til funksjonspekere for øyeblikket. Men kan muligens se på det i morgen eller til helga dersom ingen andre har kommet med noe svar på det. Tar det ikke rett fra hukommelsen idag for å si det slik.

Nei, C++ er absolutt ikke tull å lære seg. Det er et kjempenyttig språk, men dersom du har tenkt til å lage deg rimelig store applikasjoner med GUI og slikt kan det nok bli en lang lærekurve. Bare så det i det minste er nevnt. Finnes dog en del bibliotek som gjør det enklere, men.

Hvis du vil være kjapt ute med å produsere funksjonelle applikasjoner med GUI og diverse, så kan jeg anbefale C# på det varmeste. Det i kombinasjon med Visual Studio er det en nærmest orgasmisk opplevelse.
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av bashrc
Nope C++ er ikke high level i den forstand Python og Perl er high level, c++ er kompilert språk og kommer da inn under sjangeren compiled languages slik som C, Fortran og til en viss grad java.
Vis hele sitatet...
Om det er eit kompilert eller tolka språk har ingenting å sei for om det er eit høgnivåspråk eller ikkje. Det finst inteprenters for C, men det gjer det ikkje meir høgnivå fordi. Java er kompilert vanligvis, men er høgnivå.

Skillet mellom kompilert og tolka språk er for alle vesentlige formål eit totalt idiotisk skille i mine auge.
Nope C++ er ikke high level i den forstand Python og Perl er high level, c++ er kompilert språk og kommer da inn under sjangeren compiled languages slik som C, Fortran og til en viss grad java.
At det low-level betyr ikke at det ikke er ansett som avansert/kraftig nok. Fullt brukbart språk, men mer maskinnært enn språk med automagisk minnehåndtering og lignende.

Jo mer maskinnært du kommer, jo mer kontroll har du over hva som egentlig skjer, men i noen tilfeller har du mest lyst til at ting bare fungerer - framfor å ende opp med helt tilfeldige feil du ikke skjønner noe av (jmf. C; A C program is like a fast dance on a newly waxed dance floor by people carrying razors).
<?php echo 'VIF'; ?>
datagutten's Avatar
Er ikke C++ egentlig mer mellomnivå? Man har en viss kontroll på maskinvaren, men man er fortsatt ikke like direkte på prosessoren som med assembly.
med fruktkjøtt.
Tias's Avatar
Crew
datagutten: Alt er relativt. C er et høynivåspråk sammenlignet med assembly, helt klart - og det er et av de virkelig store høynivåspråkene der ute. På den annen side så er det ikke på et like høyt nivå som f.eks. Java eller Python.

I stedet for å fokusere på om det er høynivå eller lavnivå (det er et fåtall av dere som kommer til å leke med lavnivåspråk, mao. assembly eller binærkode) så kan det være lurt å heller se på det som generasjoner:

1. Generasjon programmeringsspråk var maskinkode. Mao. binærkode som kan kjøres. All kode du skriver vil tolkes og omsettes til maskinkode før det kjøres, men det er ingen som skriver binary i dag (unntaket er utviklingen av nye systemer som enda ikke har fått assembly).

2. Generasjon programmeringsspråk er assembly. Her er det ikke så mye å si, assembly har stort sett få eller ingen strukturer og abstraherer såvidt vekk alle detaljene ved at du bruker ord eller utrykk fremfor binære setninger.

3. Generasjon programmeringsspråk er de prosedyrelle språkene som blir brukt mest i dag. Disse er laget for å være lett å lese for mennesker, og inneholder typisk datastrukturer, variabler og algebraisk syntaks. Eksempler her er Fortran, COBOL fra gamledager, men også moderne språk som C, C++ og Java.

4. Generasjon programmeringsspråk er laget for et bestemt formål, samtidig som de inneholder alle fordelene og egenskapene til 3. gen språk. Typiske eksempler her er SQL, PL/SQL, Matlab, ColdFusion og CSS.

5. Generasjon er typisk språk som skrives ut ifra hva man vil ha gjort, fremfor hva man vil gjøre. Brukes mye til kunstig intelligens, logikk og så videre. Typisk eksempel her er Prolog.

I dag brukes stort sett 3., 4. og 5. gen språk, pluss noe assembly her og der. Det er ikke slik at språk som lages i dag nødvendigvis må tilhøre 5. generasjon, men generasjonene reflekterer tiden denne typen språk først ble laget. Vet ikke om dette gir så mye mening akkurat nå, men det er en god måte å se på språk. Les gjerne mer på wikipedia hvis dere er interessert: http://en.wikipedia.org/wiki/First-g...mming_language
jeg vurderte python før jeg begynte.. er det smartere?
Vis hele sitatet...
Pyhton er et veldig bra valg.

Litt hjelp for og komme igang.

Hvorfor Python?
http://www.stanford.edu/~pgbovine/python-teaching.htm

Online stoff som er bra.
http://www.swaroopch.com/byteofpython/
http://hetland.org/writing/instant-hacking.html
http://en.wikibooks.org/wiki/Non-Pro...ython/Contents
http://python.objectis.net/index_html#begin

Kalulator program i python.

Kode

# kalkulator program
 # Meny blir lagd her,med funksjoner som onskes
def menu():
    #Valg som er mulig
    print "1) Addisjon "
    print "2) Subtraksjon"
    print "3) Subtraksjon"
    print "4) Divisjon"
    print "5) Ferdig"
    print " "
    return input ("Ditt valg er: ")
    
# Addisjon
def add(a,b):
    print a, "+", b, "=", a + b
    
# Subtraksjon
def sub(a,b):
    print b, "-", a, "=", b - a
    
# Multiplikasjon
def mul(a,b):
    print a, "*", b, "=", a * b
    
# Divisjon
def div(a,b):
    print a, "/", b, "=", a / b
    
# Her blir koden kjort
loop = 1
choice = 0
while loop == 1:
    choice = menu()
    if choice == 1:
        add(input("Legge til: "),input("til dette: "))
    elif choice == 2:
        sub(input("Trekk fra: "),input("fra dette: "))
    elif choice == 3:
        mul(input("Gange dette: "),input("med dette: "))
    elif choice == 4:
        div(input("Dele dette: "),input("med dette: "))
    elif choice == 5:
        loop = 0

print "Kalulator slutt"

# Program slutt
For og kjøre dette.
http://www.python.org/download/

En god editor er bra og ha.
http://www.activestate.com/Products/...odo_edit.mhtml

Lim kakulator inn i editor og du kan kjøre programmet.
Sitat av |d13m0b
Er litt usikker på hvordan man kan konvertere strenger til funksjonspekere for øyeblikket.
Vis hele sitatet...
Klarer ikke se noen annen måte enn at programmet leser sin egen symboltabell. Dette er mulig å gjøre på unix plattformer med dlopen() og venner. Men programmet må kompileres som et bibliotek for at symbolene skal eksporteres riktig. (Ellers ansees de som debugging symboler og blir strippet vekk i noen tilfeller.)

Det virker litt uvanlig og ekkelt at et program er sitt eget bibliotek.
Dersom han vil gjøre det enkelt kan han jo bare koble de sammen selv i programmet.

Kode

int f;
if (!strcmp(metode, "minus"))
f = minus(x, y);
else if (!strcmp(metode, "pluss"))
f = pluss(x, y); //Eller droppe funksjonene og skrive x+y direkte her
...