Sida 2 av 3

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 10:07
av Jarulf
Om du inkluderar <conio.h> istället kanske det går bättre.

Vad cout gör är att den skriver text och dylikt till standard output(stdout) som default är ut till terminalen.

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 10:24
av Lulle
Jarulf skrev:Om du inkluderar <conio.h> istället kanske det går bättre.

Vad cout gör är att den skriver text och dylikt till standard output(stdout) som default är ut till terminalen.

Får samma fel med : #include <conio.h> som med conio.

Just nu så va det, den skriver ut till skärmen. :)

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 10:45
av Osprey
Jag får ut det här när jag söker på det:
Wikipedia skrev: conio.h is a header file used in old MS-DOS compilers to create text user interfaces, however, it is not part of the C programming language, the C standard library, ISO C or required by POSIX.
Så det verkar helt enkelt som att du kan skippa den raden... :)

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 11:29
av Lars
Jo, conio.h är en gammal DOS-fil, det är synd att de inte håller sig till standarden i kursen. Det finns risk att du stöter på fler problem av det slaget, men fråga här så kan säkert någon hjälpa dig.

Variabeln cout är en så kallad ström (stream), "console output" kan jag tänka mig att det står för. "cin" och "cerr" finns också. Senare i kursen kommer du att lära dig hur man skriver och läser filer på liknande sätt.

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 11:49
av Jarulf
Lars skrev:Variabeln cout är en så kallad ström (stream)
Fel. Cout är inte en ström, Cout skriver till en ström.

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 13:57
av Lulle
Den sista Pseudokod uppgiften.
Sedan är det slut på dom och jag avancerar mig till att hitta fel i program tydligen enligt kursplanen.

UPPGIFT:
Ta fram ett kaffefilter lägg det i kaffebryggaren. Fyll kaffebryggaren med vatten. Ta bara sex skopor kaffepulver om kaffet inte ska vara så starkt. För starkt kaffe, ta tolv skopor. Brygg kaffet. Brygg sedan fler kannor tills alla gäster fått kaffe.


LÄSNINGAR!

Kod: Markera allt

START
REPETERA
   ta fram kaffefilter
   lägg det i kaffebryggaren
   fyll kaffebryggaren med vatten
OM svagt kaffe
   ta 6 skopor
ANNARS
   ta 12 skopor kaffe
Brygg kaffet
   har alla gäster fått kaffe?
SÅ LÄNGE nej
   STOPP

Så har jag fått in snitsen?

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 14:22
av Lulle
Har försökt mig på att bygga ett program av pseukoden ovan men det går inte så bra då mina kunskaper tydligen är begränsade.
Någon som har lust att fylla i där jag har missat och förklara lite om dom olika saker ni fyller i?
Iaf, så här ser programmet ut just nu:

Kod: Markera allt

#include <iostream>

int main(int argc, char** argv)
{
   using namespace std;
   
   int skopor;
   
   skopor = 6;
   
   cout << "Ta fram kaffefiltret.";
   getchar();
   cout << "Lägg filtret i kaffebryggaren.";
   getchar();
   cout << "Fyll på kaffebryggaren med vatten.";
   getchar();
   cout << "starkt eller svagt kaffe?";
   // Här vill jag sätta in så att man kan svara svagt eller starkt kaffe.
   cout << "Ha nu i " << skopor << "skopor kaffe.";	// svaret om dom vill ha svakt kaffe.
   
   skopor = + 6;
   cout << "Ha nu i " << skopor << "skopor kaffe."; // svaret om dom vill ha starkt kaffe.
   getchar ();
   cout << "Brygg kaffet.";
   getchar();
   cout << "Har alla gästerna fått kaffe?";
   // Här vill jag sätta så man kan svara ja eller nej.
   // Om man svarar nej så ska det gå en "loop" upp till där programmet startade.
   // Om man svarar ja så ska programmet visa det jag har skrivit nedan.
   cout << "Grattis, nu har du bryggt kaffe och alla gästerna är nöjda.";
	return 0;
}

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 14:51
av micke_nordin
Kanske skulle man kunna göra ungefär så här:

Kod: Markera allt

#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
   
	int skopor = 6; //Antal skopor för svagt kaffe
	char temp; //En temporär variabel som tar input från användaren
	bool alla_fatt = false; //Så länge alla inte fått kaffe fortsätter programmet
   
	while(alla_fatt == false) //Loopen börjar här
	{
		cout << "För att brygga kaffe:\n";  //Skriver ut instruktioner
		cout << "1. Ta fram kaffefiltret.\n";
		cout << "2. Lägg filtret i kaffebryggaren.\n";
		cout << "3. Fyll på kaffebryggaren med vatten.\n";
		cout << "Välj styrka:\n1. starkt\n2. svagt\n";
		cout << "→_\b";  //Skriver ut prompten
		cin.get(temp);  //Läser in svar från användaren, kollar inte om det är ett gilltigt svar vilket är en svaghet
		cin.get(); //Slänger bort vagnretur


		if(temp == '1') //Om det önskas starkt kaffe
		{
			skopor = + 6; //Dubbla  antalet skopor
		}

		cout << "\nHa nu i " << skopor << " skopor kaffe.\n";   //Skriv ut antal skopor
   		cout << "Brygg kaffet.\n";  //Skriver ut fler instruktioner
		cout << "Har alla gäster fått kaffe?\n"; //Kollar om alla fått kaffe
		cout << "1. ja\n2. nej\n";
		cout << "→_\b";  //Prompten igen

		cin.get(temp);  //Läser in ett tecken
		cin.get(); //Slänger bort vagnretur
	
		if(temp == '1') //Om alla fått
		{
			alla_fatt = true;  //Sätt alla_fatt till sant, vilket avsutar loopen, annars börjar den om igen 
		}
	}
   
	cout << "Grattis, nu har du bryggt kaffe och alla gästerna är nöjda.";  //Berättar att gästerna är lätta att behaga
	return 0; //Avslutar programmet
}
Programmet är dock rätt så dumt och kollar inte om den får gilltigt input. Dessutom dubbleras en del kod vilket man skulle kunna flytta till en egen funktion (inläsningen av input). Men du fattar kanske hur loopen funkar, ditt sätt att skriva hade förutsatt en GOTO-sats vilket anses vara ett stort no-no.

/Micke

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 15:00
av Lulle
micke_nordin skrev:Kanske skulle man kunna göra ungefär så här:

Kod: Markera allt

#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
   
	int skopor = 6; //Antal skopor för svagt kaffe
	char temp; //En temporär variabel som tar input från användaren
	bool alla_fatt = false; //Så länge alla inte fått kaffe fortsätter programmet
   
	while(alla_fatt == false) //Loopen börjar här
	{
		cout << "För att brygga kaffe:\n";  //Skriver ut instruktioner
		cout << "1. Ta fram kaffefiltret.\n";
		cout << "2. Lägg filtret i kaffebryggaren.\n";
		cout << "3. Fyll på kaffebryggaren med vatten.\n";
		cout << "Välj styrka:\n1. starkt\n2. svagt\n";
		cout << "→_\b";  //Skriver ut prompten
		cin.get(temp);  //Läser in svar från användaren, kollar inte om det är ett gilltigt svar vilket är en svaghet
		cin.get(); //Slänger bort vagnretur


		if(temp == '1') //Om det önskas starkt kaffe
		{
			skopor = + 6; //Dubbla  antalet skopor
		}

		cout << "\nHa nu i " << skopor << " skopor kaffe.\n";   //Skriv ut antal skopor
   		cout << "Brygg kaffet.\n";  //Skriver ut fler instruktioner
		cout << "Har alla gäster fått kaffe?\n"; //Kollar om alla fått kaffe
		cout << "1. ja\n2. nej\n";
		cout << "→_\b";  //Prompten igen

		cin.get(temp);  //Läser in ett tecken
		cin.get(); //Slänger bort vagnretur
	
		if(temp == '1') //Om alla fått
		{
			alla_fatt = true;  //Sätt alla_fatt till sant, vilket avsutar loopen, annars börjar den om igen 
		}
	}
   
	cout << "Grattis, nu har du bryggt kaffe och alla gästerna är nöjda.";  //Berättar att gästerna är lätta att behaga
	return 0; //Avslutar programmet
}
Programmet är dock rätt så dumt och kollar inte om den får gilltigt input. Dessutom dubbleras en del kod vilket man skulle kunna flytta till en egen funktion (inläsningen av input). Men du fattar kanske hur loopen funkar, ditt sätt att skriva hade förutsatt en GOTO-sats vilket anses vara ett stort no-no.

/Micke

Aha okej, har som sagt just börjat lärt mig "cin" och "cout" hehe.
Men ska ta och försöka bygga om den där koden osv lite så jag kan se och lära mig istället för att bara läsa i boken.
Ska ge mig in i den där koden återkommer med mitt resultat :)


Edit:
Den ger inte korrekt antal skopor, det står 6 skopor hela tiden.
Får inte riktigt till detta.
Någon som ser felet?

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 17:58
av Lulle
Gjorde om koden lite så fungerade den sedan.
Jag tog bort skopor kommandot.
Och satte dit else efter if satsen.

Det blev så här:

Kod: Markera allt

/*
 *      untitled.cpp
 *      
 *      Copyright 2008 Robin Sandberg <robin@PHILIPS>
 *      
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *      
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *      
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 */

/*---  PROGRAM 5  ----*/
// program5.cpp
// Att deklarera och tilldela i EN C++ sats. Att slå ihop (to concatenate) 
// flera 'blandade' (dvs "text" OCH int-variabler) cout-satser till EN.

#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
      
   char temp; //En temporär variabel som tar input från användaren
   bool alla_fatt = false; //Så länge alla inte fått kaffe fortsätter programmet
   
   while(alla_fatt == false) //Loopen börjar här
   {
      cout << "För att brygga kaffe:\n";  //Skriver ut instruktioner
      cout << "1. Ta fram kaffefiltret.\n";
      cout << "2. Lägg filtret i kaffebryggaren.\n";
      cout << "3. Fyll på kaffebryggaren med vatten.\n";
      cout << "Välj styrka:\n1. starkt\n2. svagt\n";
      cout << "→_\b";  //Skriver ut prompten
      cin.get(temp);  //Läser in svar från användaren, kollar inte om det är ett gilltigt svar vilket är en svaghet
      cin.get(); //Slänger bort vagnretur


      if(temp == '1') //Om det önskas starkt kaffe
      {
         cout << "Ha nu i 12 skopor kaffe.\n";
      }
else
      cout << "\nHa nu i 6 skopor kaffe.\n";   //Skriv ut antal skopor
         cout << "Brygg kaffet.\n";  //Skriver ut fler instruktioner
      cout << "Har alla gäster fått kaffe?\n"; //Kollar om alla fått kaffe
      cout << "1. ja\n2. nej\n";
      cout << "→_\b";  //Prompten igen

      cin.get(temp);  //Läser in ett tecken
      cin.get(); //Slänger bort vagnretur
   
      if(temp == '1') //Om alla fått
      {
         alla_fatt = true;  //Sätt alla_fatt till sant, vilket avsutar loopen, annars börjar den om igen
      }
   }
   
   cout << "Grattis, nu har du bryggt kaffe och alla gästerna är nöjda.";  //Berättar att gästerna är lätta att behaga
   return 0; //Avslutar programmet
}

Hoppas det är korrekt gjort.


Någon som vet hur man får sina filer till .exe i geany?
Jag ska skicka ett relativt enkelt program till en windows användare därför jag undrar.

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 19:34
av Lulle
Jag skulle göra ett program som räknade ut 2 värden som skrevs in i programmet.
Jag gjorde det programmet som ni kan se nedan, jag skulle också förklara vad det olika linjerna betyder, har jag förstått dom rätt?
Betyder om det jag har skrivit?
Kan tillägga att jag är relativt stolt :) gjorde detta program utan att kolla på någon annan kod eller ta hjälp :)

Kod: Markera allt

#include <iostream>                                // Hämtar information från iostream bibloteket som är en headfil.

int main(int argc, char** argv)                    // Skickar information till processorn.
{
  using namespace std;                             // Läser in och använder namespace detta föränklar skrivandet av vissa kommandon.
  int tal1, tal2, summa;                           // Deklarerar en heltalsvariabel.
   cout << "-----------------------------\n";      // skriver ut information till skärmen.
   cout << "Uträkningsprogrammet\n";
   cout << "Skapat av Robin Sandberg.\n";
   cout << "-----------------------------\n";
   cout << endl;                                   // Gör ett radbyte.
   cout << "Mata in ett tal (tryck på Enter): ";
   cin >> tal1;                                    // Läser in det första talet som skrivs in.
   cout << endl;
   cout << "Mata in ett tal till: ";
   cin >> tal2;                                    // Läser in det andra talet som skrivs in.
   cout << endl;
   cout << endl;
   cout << tal1;                                   // Visar det inskrivna värdet av tal1.
   cout << " + ";
   cout << tal2;                                   //Visar det inskrivna värdet av tal2.
   cout << " = ";
   summa = tal1 + tal2;                            // Räknar ut tal1 & tal2 med +.
   cout << summa;                                  // Skriver ut den totala summan av tal1 + tal2 till skärmen.
   cout << endl;
   cout << tal1;
   cout << " * ";
   cout << tal2;
   cout << " = ";
   summa = tal1 * tal2;                           // Räknar ut tal1 & tal2 med *.
   cout << summa;                                 // Skriver ut den totala summan av tal1 * tal2 till skärmen.
	
	return 0;                                     // Medelar till int main() att programmet har slutförts, detta leder till att operativsystemet
	                                              // kan stänga ner programmet.
}

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 20:01
av micke_nordin
Tänk också på att du kan slå ihop flera utskrifter på samma rad:

Kod: Markera allt

 cout << endl << endl << tal1 << " + " << tal2 << " = ";
eller ännu hellre:

Kod: Markera allt

 cout << "\n\n" << tal1 << " + " << tal2 << " = ";
istället för:

Kod: Markera allt

 cout << endl;
   cout << endl;
   cout << tal1;                                  
   cout << " + ";
   cout << tal2;                                  
   cout << " = ";
/Micke

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 20:20
av Lulle
micke_nordin skrev:Tänk också på att du kan slå ihop flera utskrifter på samma rad:

Kod: Markera allt

 cout << endl << endl << tal1 << " + " << tal2 << " = ";
eller ännu hellre:

Kod: Markera allt

 cout << "\n\n" << tal1 << " + " << tal2 << " = ";
istället för:

Kod: Markera allt

 cout << endl;
   cout << endl;
   cout << tal1;                                  
   cout << " + ";
   cout << tal2;                                  
   cout << " = ";
/Micke

Okej, det ska jag tänka på i framtiden, jag testade att göra det nu men kom inte på hur man skrev det korrekt, och jag ville göra programmet fungerande utan hjälp så jag kollade inte upp det.
ÄR mina förklaringar i programmet korrekta då?

Tack så mycket Mickel för alla din hjälp, tack till er andra också, kommer inte ihåg era namn.
Utan er så skulle jag stå som ett frågetecken.

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 20:37
av Lars
Du får pluspoäng för att använda GPL :) Och en liten guldstjärna i kanten.

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 20:46
av micke_nordin
Lulle skrev:
Okej, det ska jag tänka på i framtiden, jag testade att göra det nu men kom inte på hur man skrev det korrekt, och jag ville göra programmet fungerande utan hjälp så jag kollade inte upp det.
För att göra det korrekt gör du typ så här;

Kod: Markera allt

#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
	int tal1 = 1;
	int tal2 = 2;
	cout << endl << endl << tal1 << " + " << tal2 << " = " << tal1 + tal2;
	return 0;
}
Kommentarerna är väl typ rätt, här skulle jag dock säga:

Kod: Markera allt

int main(int argc, char** argv)                    // Tar emot information från operativsystemet 
main är den funktion där exekveringen startar, den har också möjlighet att ta emot parametrar precis som andra funktioner/metoder men eftersom det är operativsystemet som anropar den funktionen så är det också operativsystemet som skickar parametrar dit. Du kan själv ange sådana genom att exekvera programmet ./mitt_program parameter1 parameter2 parameter 1 och 2 lagras sedan i arrayen argv medan antalet parametrar som skickas med lagras i variabeln argc. Operativet skickar alltid med programmets namn som första parameter har jag för mig.

/Micke

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 20:47
av Lulle
Lars skrev:Du får pluspoäng för att använda GPL :) Och en liten guldstjärna i kanten.

Dum fråga, vad är GPL?

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 22:55
av Lars
Lulle skrev:
Lars skrev:Du får pluspoäng för att använda GPL :) Och en liten guldstjärna i kanten.
Dum fråga, vad är GPL?
GNU General Public License som du klistrade in i filen ;) Samma licens som bl.a. Linux använder.

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 23:01
av Lulle
Lars skrev:
Lulle skrev:
Lars skrev:Du får pluspoäng för att använda GPL :) Och en liten guldstjärna i kanten.
Dum fråga, vad är GPL?
GNU General Public License som du klistrade in i filen ;) Samma licens som bl.a. Linux använder.

Jaha, jag tänkte lite fel.
Trodde du menade något med kodning nu, haha.

Ja självklart använder jag mig av den licensen, jag sitter ju med *nix baserade operativsystem osv.
Helt gått ifrån windows, så varför skulle man inte själv använda GPL?
Om jag inte hade gjort det så hade jag bara varit en dum dristig idiot och en hycklare.
Dvs äta tårtan men fortfarande ha den kvar.

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 23:29
av Osprey
Lulle skrev:Dvs äta tårtan men fortfarande ha den kvar.
Egentligen är det nog så att det är när man använder *nix baserade OS och deltar i gemenskapen som man både kan äta tårtan men samtidigt ha den kvar... :)

Presonlig synpunkt: Jag kan inte anse att Windowsanvändare varken äter någon tårta, eller har något kvar... 8)

Re: Tänker jag rätt? Har jag gjort rätt? C++, rätt mig.

Postat: 23 dec 2008, 23:48
av micke_nordin
Lulle skrev: Edit:
Den ger inte korrekt antal skopor, det står 6 skopor hela tiden.
Får inte riktigt till detta.
Någon som ser felet?
He he, jag kollade inte så noga på vad du skrivit, det skall vara:

Kod: Markera allt

 if(temp == '1') //Om det önskas starkt kaffe
      {
         skopor += 6; //Dubbla  antalet skopor
      }
inte:

Kod: Markera allt

 if(temp == '1') //Om det önskas starkt kaffe
      {
         skopor = + 6; //Dubbla  antalet skopor
      }
/Micke