Gå til innhold

ProgrammeringsBaren! Småprat, om det du elsker!


Anbefalte innlegg

Videoannonse
Annonse

Hvordan kan jeg få vist en grafisk fremstilling av resultatet?

Terningkast:

#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;


int main()

{
int pid, value;
int ones 	= 0;
int twoes	= 0;
int threes 	= 0;
int fours 	= 0;
int fives 	= 0;
int sixes 	= 0;

pid = getpid();
srand(pid);

int throws;
cout	<< "Number of throws: ";	
cin 	>> throws;
cout 	<< endl;	

for (int i = 0; i < throws; i++)
{
	value = rand()%6 + 1;
	// cout << value;

	if (value == 1) {ones++;}
	if (value == 2)	{twoes++;}
	if (value == 3)	{threes++;}
	if (value == 4)	{fours++;}
	if (value == 5)	{fives++;}
	if (value == 6)	{sixes++;}

}	

cout << "ones: "	<< ones		<< endl;
cout << "twoes: "	<< twoes 	<< endl;
cout << "threes: " 	<< threes 	<< endl;
cout << "fours: " 	<< fours 	<< endl;
cout << "fives: " 	<< fives 	<< endl;
cout << "sixes: " 	<< sixes 	<< endl; 	

cout << endl << endl;

return 0;
}

Endret av Senyor de la guerra
Lenke til kommentar

Hvordan kan jeg få vist en grafisk fremstilling av resultatet

 

#include <iomanip>
...
       cout << setfill ('*');
       cout << "ones:  " << setw(ones)   << "*" << endl;
       cout << "twoes: " << setw(twoes)  << "*" << endl;
       cout << "threes:" << setw(threes) << "*" << endl;
       cout << "fours: " << setw(fours)  << "*" << endl;
       cout << "fives: " << setw(fives)  << "*" << endl;
       cout << "sixes: " << setw(sixes)  << "*" << endl;        
       cout << setfill (' ');

Lenke til kommentar

Hvordan kan jeg få vist en grafisk fremstilling av resultatet

 

#include <iomanip>
...
       cout << setfill ('*');
       cout << "ones:  " << setw(ones)   << "*" << endl;
       cout << "twoes: " << setw(twoes)  << "*" << endl;
       cout << "threes:" << setw(threes) << "*" << endl;
       cout << "fours: " << setw(fours)  << "*" << endl;
       cout << "fives: " << setw(fives)  << "*" << endl;
       cout << "sixes: " << setw(sixes)  << "*" << endl;        
       cout << setfill (' ');

 

Meh, ikke helt slik jeg tenkte. Mer praktisk med en fremstilling via f.eks gnuplot når jeg opererer med store verdier.

Lenke til kommentar

Meh, ikke helt slik jeg tenkte. Mer praktisk med en fremstilling via f.eks gnuplot når jeg opererer med store verdier.

 

Da burde du ha opplyst om det i meldingen. Det er ganske mange muligheter for grafisk output. Du kan skrive rgb verdier direkte inn i et framebuffer, du kan bare skrive ut verdiene og lese dem inn i matlab/excel, du kan generere PostScript, osv.

 

Du kan bruke metoden ovenfor med store verdier også, men du må bare finne den største verdien og skalere alt til å passe på en linje.

 

Videre så har du nok C++ kunnskap til å løse dette (hvis du i tillegg kan åpne en fil). Problemet ditt ser ut til at du ikke har slått opp dokumentasjonen til gnuplot og hvordan du lager en gnuplot control fil. Her er et eksempel. Først åpne en datafil i programmet ditt:

 

#include <fstream>
...
      {
         ofstream cplot("gnuplot-curve.dat", ios::out);
         cplot << setw(10) << "ones   " << setw(10) << ones   << endl;
         cplot << setw(10) << "twos   " << setw(10) << twoes  << endl;
         cplot << setw(10) << "threes " << setw(10) << threes << endl;
         cplot << setw(10) << "fours  " << setw(10) << fours  << endl;
         cplot << setw(10) << "fives  " << setw(10) << fives  << endl;
         cplot << setw(10) << "sixes  " << setw(10) << sixes  << endl;
       }

 

Så kan du lage en gnuplot control fil, f.eks. gnuplot-curve.cmd (du kan bruke en annen font, eller bare skrive 'set term png' for å få default font og størrelse)

 

 

set term png font '/usr/share/fonts/ttf-bitstream-vera/VeraSe.ttf' 10 size 800,600
set output 'gnuplot-curve.png'
set boxwidth 1 relative
set style data histograms
set style fill solid 1.0

plot 'gnuplot-curve.dat' using 2:xticlabels(1) notitle

 

Deretter:

 

gnuplot gnuplot-curve.cmd

 

Så får du en gnuplot-curve.png som inneholder et histogram.

  • Liker 2
Lenke til kommentar

Jeg skrev min eksamen i IT2 i Microsoft Visual Web Developer Express, og programmet jeg lagde måtte kjøre i nettleseren. (C#, aspx, silverlight)

Kan jeg på noen måte skrive om/kompilere slik at sluttproduktet blir en .exe?

Du kan skrive om ja, men da må du installere Visual C# Express eller Visual Studio. Kan ikke gjøre dette i Visual Web Devloper.

Lenke til kommentar

@longwinded hadde dem byttet ut verbose java med python hadde jeg vært fornøynd :whistle:

Den var er nok artigere for personer som er interessert i programmring.

For noen som ikke har hørt om java/.NET kan den nok bli litt rar.

 

@Senyor de la guerra koden er vel grei når du er ny innen programmring.

Tips når du har 6 if/cout statement da bør du tenke på en loop.

For mage gjentakelser av samme kode er noe som ikke er populært innen programmering.

 

Ikke for og si noe stygt om C++,men du bør kansje se på språk som python/C# når man skal ha det gøy på privat basis.

 

For oppgaven din hadde jeg valg og lagrer resultat i dictionary/hashtable da har enn mye større frihet når det gjelder vise resutalet i en grafisk fremstilling og lagre og oppdatere resultatet.

 

Tar bare skriver om koden kjapt hvordan jeg ville løst dette python.

Viser også matplotlib en av python mange veldige gode 3 part`s bibilotek.

Python stiller veldig sterkt i et forsking miljø med bibilotek som scipy/numpy/matplotlib.

 

Denne koden skrevet i "procedural programming" stil altså uten funksjoner/klassser.

Som både C++ og python støtter.

Selv liker og bruke funksjonen og klasser viss koden skal ha noe lengde,gjør ting mye lettere.

Kan godt skrive om kode senere til og bruke funksjoner viss det er ønskelig senere(er på ferie nå)

import random

my_dict = {}
my_list = []
user = input('How many trows? ')

#make a list of dices
for item in range(user):
   dice = random.randrange(6)+1
   my_list.append(dice)

#Count occurence of dices
for item in my_list:
   my_dict[item] = my_dict.get(item, 0) + 1

print my_dict   ##We need this for a graphical show in matplotlib
items = my_dict.keys()
items.sort()
print 'Occurrence of dices in %s trows' % user
for item in items:    
   print "%s Occurrence %d times" % (item, my_dict[item])    

'''--->Out
How many trows? 200
{1: 21, 2: 45, 3: 26, 4: 39, 5: 44, 6: 25}
Occurrence of dices in 200 trows
1 Occurrence 21 times
2 Occurrence 45 times
3 Occurrence 26 times
4 Occurrence 39 times
5 Occurrence 44 times
6 Occurrence 25 times
'''

 

Koden for matplotlib.

from pylab import *

def bar_graph(name_value_dict, graph_title='', output_name='bargraph.png'):
   figure(figsize=(4, 2)) # image dimensions  
   title(graph_title, size='x-small')

   #Add bars
   for i, key in zip(range(len(name_value_dict)), name_value_dict.keys()):
       bar(i + 0.25 , name_value_dict[key], color='red')   
   #Axis setup
   xticks(arange(0.65, len(name_value_dict)),
       [('%s: %d' % (name, value)) for name, value in
       zip(name_value_dict.keys(), name_value_dict.values())],
       size='xx-small')
   max_value = max(name_value_dict.values())
   print max_value
   tick_range = arange(0, max_value, (max_value / 4))
   yticks(tick_range, size='xx-small')
   formatter = FixedFormatter([str(x) for x in tick_range])
   gca().yaxis.set_major_formatter(formatter)
   gca().yaxis.grid(which='major')   
   savefig(output_name)    

def main():    
   my_dict = {1: 8319, 2: 8568, 3: 8332, 4: 8329, 5: 8240, 6: 8212}
   bar_graph(my_dict, graph_title='Dice')

if __name__ == "__main__":
   main()

 

500 teringkast

bargraph200.jpg

By snippsat at 2010-06-28

 

5000 teringkast.

bargraph5000.jpg

By snippsat at 2010-06-28

 

50000 teringkast.

bargraph50000.jpg

By snippsat at 2010-06-28

Endret av SNIPPSAT
  • Liker 1
Lenke til kommentar

Ble ganske fornøyd i går da jeg klarte å redusere telefonregningen til gamlingene med en ganske god del ved hjelp av et lite bash og python skript. De hadde opprinnelig telenor basis som koster 159,- i mnd som jeg endret til telenor mini til 79,- i mnd. Dette i kombinasjon med å bruke voipbuster til å ringe gjør at de sparer over 1000,- i året.

 

Måten dette fungerer på er at du kan logge inn hos voipbuster for så å starte en telefonsamtale derfra, men dette syntes jeg var for tungvint og ville ha en bedre løsning på det. Etter litt python programmering i kombinasjon med bash og zenity i ubuntu har de nå et ikon på skrivebordet sitt som får opp en dialog der de skriver inn nummeret de vil ringe til.

 

Koden ser slik ut og er enkel å tilpasse til andre nettsider:

 

import urllib2, urllib, sys

# http post values
voipuser = “yourusernamehere”
voippass = “youpasswordhere”
yournumber = “outnumber on international format”

# get the number you’re calling from commandline
othernumber = sys.argv[1]

# use firefox with tamper data extension to get these
# urls in case of another provider or other use of script
voiploginurl = “https://www.voipbuster.com/myaccount/index.php?part=tplogin”

# again use firefox with tamper data extension to get the url
voipcallurl = “https://www.voipbuster.com/myaccount/phone-to-phone.php?panel=”

o = urllib2.build_opener(urllib2.HTTPCookieProcessor())
urllib2.install_opener(o)

# these are the post values for the voiploginurl to login
# and recieve a cookie found with tamper data for firefox
data = urllib.urlencode({“user” : voipuser, “pass” : voippass})

# opening the page to perform the post action
f = o.open(voiploginurl, data)

s = f.read()
f.close()

# these http post values are specific to voipbuster.com and has
# to be customized for other providers, again found with tamper data
data = urllib.urlencode({“action” : “initcall”, “anrphonenr” : yournumber, “bnrphonenr” : othernumber})

# opening the page to perform the post action
# in this case start the call
f = o.open(voipcallurl, data)

s = f.read()
f.close()

 

Bash skriptet er bare en enkel zenity input dialog som gir et tall som output og som sendes til python skriptet.

Lenke til kommentar

Er det noen som vet hva den store annonseringen Knuth skulle komme med under TUG-2010?

 

Jeg ser det er en del forslag på nettet som:

bildelink

og bildelink

 

 

Det var også rykter om en ny bok om kompilatorteknikk.

 

Men hva var den egentlige annonseringen?

 

[edit: fikk ikke img til å funke]

Endret av asicman
Lenke til kommentar

Ikke for og si noe stygt om C++,men du bør kansje se på språk som python/C# når man skal ha det gøy på privat basis.

 

 

 

Skal man ha det virkelig gøy programmerer man i Common Lisp :new_woot:

 

Hehe, bra det er mye forskjellige meninger. Jeg har det selv helt klart morsomst når jeg programmerer i C/C++.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...