9 svar
839 visningar
Bockarns behöver inte mer hjälp
Bockarns 10
Postad: 13 sep 2022 14:05

Inlämningsuppgift Programmering 1

Hej,

Har precis börjat med Programmering 1 via komvux och stött på en fråga som lämnar mig lite förvirrad och undrar om en putt i rätt riktning.

 

3.
Vad gör nedan kodstycke och ge ett exempel på när nedan skulle kunna användas?

using namespace std;


float add (float x, float y);

float sub (float x, float y);

float multi (float x, float y);

float divi (float x, float y);
Ditt svar:

 

Jag vet att float är en variabel som tar decimaler, men jag förstår inte uppbyggnaden av detta kodstycke.

jag har gått igenom hela kursboken utan att det någonsin nämns något liknande oavsett variabel. jag har sökt igenom på nätet utan att hitta något liknande.

Jag har även försökt testa lite i Code:Blocks utan att komma på hur man skulle kunna använda detta.

Min första tank var att det är någon form av grund till en miniräknare, men kan inte förstå varför man skulle göra på detta sätt istället för att använda tex "char" variabeln för att kunna använda räknesätt.

 

Någon som skulle kunna ge mig lite klarhet eller buffa mig i en riktning?

 

MVH

Jerome

joculator 5296 – F.d. Moderator
Postad: 13 sep 2022 14:13

Bara så du vet, jag kan inte C++.

Men det ser ut som funktionsdeklarationer, typ:
return_type function_name( parameter list );

Läs mer om  functions
under Function Declarations

Bockarns 10
Postad: 13 sep 2022 14:38

Hej,

 

Jag funderade på det också, men kunde inte komma på hur man skulle definiera funktionerna i så fall. jag provade som sagt det också i codeblocks men utan att jag kom på hur jag skulle göra. 

Laguna Online 30712
Postad: 13 sep 2022 15:25

Gör gör den väl inget alls. Jag förstår inte heller frågan.

joculator 5296 – F.d. Moderator
Postad: 13 sep 2022 15:49

float add (float x, float y);

definierar att det finns en funktion som heter add som har 2 invärden

Du skulle senare i din kod kunna skriva tex:

int main () {
   // local variable declaration:
   float a = 100;
   float b = 200;
   float ret;
 
   // calling a function to get max value.
   ret = add(a, b);
   cout << "Sum of values is : " << ret << endl;
 
   return 0;
}
 
// function returning the max between two numbers
int add(float num1, float num2) {
   // local variable declaration
   float result;
   result = num1+num2;
 
   return result; 
}

Detta hade failat eftersom main kommer före funktionen vilket gör att funktionen inte är definierad än.
Men genom att ha float add (float x, float y); 
Före main kommer funktionen vara definerad när main hänvisar till den.

(jag tror man kan komma runt detta genom att skriva alla funktioner först och main sist)

 

Jag har för mig att man gör såhär för att få struktur på koden.
Först definierar man alla funktioner, sedan har man main och till slut skirver man koden till alla funktioner.

Men som sagt, vad vet jag. Jag kan ju inte C++

anders_k 237
Postad: 13 sep 2022 17:17 Redigerad: 13 sep 2022 17:22
using namespace std;


float add (float x, float y);

float sub (float x, float y);

float multi (float x, float y);

float divi (float x, float y);

Ovan är så kallade funktionsprototyper, dvs man har deklarerat funktionerna för att sedan definiera funktion någon annanstans.

Man brukar skriva sådana prototyper ovanför "main()" för att sedan ha funtions definitionerna efter main()

float multi(float x, float y);

int main()
{
  cout << multi(12.0,13.0) << endl;
}

float multi(float x, float y)
{
  return x*y;
}

Om man inte har deklarerat/definierat en funktion och ropar den vet inte kompilatorn vad det är för funktion. I C får funktionen t.o.m. en default returtype av integer och ger bara en varning - vilket kan ibland ställa till det. 

För att göra en miniräknare läser du in en sträng från användaren, splittar strängen i tokens och sedan evaluerar du dessa tokens. Så när du hittar en operand konverterar du till float, och när du hittar operatorn dvs "*" vet du att du skall ropa mult(float,float) - fast du får göra det först du har konverterat bägge operanderna till float.

Fermatrix 7841 – Fd. Medlem
Postad: 13 sep 2022 17:42

Vill bara notera att det är bad practice att skriva:

using namespace std;

Kanske inte relevant för TS ännu men det är bra att vänja sig redan från början. 

Bockarns 10
Postad: 14 sep 2022 10:23

Hej,

 

Tack för alla svar :)

Nu förstår jag lite mer hur och vad man skulle kunna använda det till :)

Bockarns 10
Postad: 14 sep 2022 10:24
anders_k skrev:
using namespace std;


float add (float x, float y);

float sub (float x, float y);

float multi (float x, float y);

float divi (float x, float y);

Ovan är så kallade funktionsprototyper, dvs man har deklarerat funktionerna för att sedan definiera funktion någon annanstans.

Man brukar skriva sådana prototyper ovanför "main()" för att sedan ha funtions definitionerna efter main()

float multi(float x, float y);

int main()
{
  cout << multi(12.0,13.0) << endl;
}

float multi(float x, float y)
{
  return x*y;
}

Om man inte har deklarerat/definierat en funktion och ropar den vet inte kompilatorn vad det är för funktion. I C får funktionen t.o.m. en default returtype av integer och ger bara en varning - vilket kan ibland ställa till det. 

För att göra en miniräknare läser du in en sträng från användaren, splittar strängen i tokens och sedan evaluerar du dessa tokens. Så när du hittar en operand konverterar du till float, och när du hittar operatorn dvs "*" vet du att du skall ropa mult(float,float) - fast du får göra det först du har konverterat bägge operanderna till float.

Jag förstår inte riktigt hur du menar med att splittra en sträng i tokens, men eftersom det är bara andra veckan med första inlämningsuppgiften så hoppas jag att få mer förståelse under kursen lopp :)

Bockarns 10
Postad: 14 sep 2022 10:25
Dracaena skrev:

Vill bara notera att det är bad practice att skriva:

using namespace std;

Kanske inte relevant för TS ännu men det är bra att vänja sig redan från början. 

Hehe jo jag har läst det medans jag googlat runt massa, men inlämningsuppgiften har det redan förifyllt och kursboken vill att man ska använda det så jag antar att det är bästa att göra som dom vill :)

Svara
Close