Forum » Programiranje » Kako bi naredil en ultra simple programček?
Kako bi naredil en ultra simple programček?
AtaStrumf ::
Imel bi tri polja:
1) vneseš frame number
2) izbereš iz seznama ali vneseš FPS
3) izpiše HH:MM:SS
Kaj rabim, da to naredim, pa naj bo čim bolj enostavno.
sid_dabster ::
#include <stdio.h> int main() { int frm,fps; printf("Enter number of frames\n"); scanf("%d", &frm); printf("Enter frame rate (frames per second)\n"); scanf("%d", &fps); printf("\n ->Total movie length: %d:%d:%d", (frm/fps)/3600, ((frm/fps)%3600)/60, ((frm/fps)%3600)%60); return 0; }
[edit - koda - vsc]
The sound of her own blood dripping
Like sacred tears from a bleeding rose...( Embraced, Within)
Zgodovina sprememb…
- spremenil: Vesoljc ()
Brilko ::
sid_dabster ::
The sound of her own blood dripping
Like sacred tears from a bleeding rose...( Embraced, Within)
AtaStrumf ::
Koda deluje, ampak samo za cela števila FPS-jev. Sem int nadomestil z float pa ni delal . Kako je treba zdaj to popravt za tri mestne decimalke?
speed machine ::
int main()
{
int frm,h,m,s;float fps,h2,m2;
printf("Enter number of frames:\n");
scanf("%d", &frm);
printf("Enter frame rate (frames per second):\n");
scanf("%f", &fps);
h=(frm/fps)/3600;
h2=((frm/fps)/3600)-h;
m=h2*60;
m2=(h2*60)-m;
s=m2*60;
printf("\n ->Total movie length: %d:%d:%d.\n",h,m,s);
system("PAUSE");
}
AtaStrumf ::
h=(frm/fps)/3600; -- assigment to 'int' from 'float'
m=h2*60; -- assigment to 'int' from 'float'
s=m2*60; -- assigment to 'int' from 'float'
system("PAUSE") -- system je undeclared
Sem naredil še eno verzijo programčka po napotkih v članku, samo isto dela samo celoštevilčne, s floati pa noče delat .
Sem hotel dat kodo not, sam mi za vsak drek teži, da je neveljaven HTML bla, bla. Zakaj noče iti noter vsaj kot običan text???
Pa zakaj %60 recimo noče delat če imaš floate?
AtaStrumf ::
// omogočimo uporabo V/I tokov
#include <iostream>
float sekundefull(float FrameNo, float FRT)
{
return(FrameNo / FRT);
}
int minute(int FrameNo, int FRT)
{
return(FrameNo / FRT %3600 /60);
}
int sekunde(int FrameNo, int FRT)
{
return(FrameNo / FRT %60);
}
int ure(int FrameNo, int FRT)
{
return(FrameNo / FRT /3600);
}
// funkcija main
int main()
{
// uporabljamo imenski prostor "std"
using namespace std;
// potrebujemo tri spremenljivke
int FrameNo, FRT, Rezultat;
// pozdrav
cout << "Program za preracunavanje FPS v Cas!" << endl;
// vpisujemo prvo stevilo
cout << "Vnesite stevilo slik, ter pritisnite ENTER:";
cin >> FrameNo;
// vpisujemo drugo stevilo
cout << "Vnesite stevilo slik na sekundo (FPS), ter pritisnite ENTER:";
cin >> FRT;
// ure
Rezultat = ure(FrameNo, FRT);
cout << "h= " << Rezultat << endl;
// minute
Rezultat = minute(FrameNo, FRT);
cout << "min= " << Rezultat << endl;
// sekunde
Rezultat = sekunde(FrameNo, FRT);
cout << "sec= " << Rezultat << endl;
// vrnemo nič in pavza
cout << "Pritisnite ENTER za izhod..." << endl;
cin.ignore();
cin.get();
return(0);
}
Pa ne se smejat kakšnim začetniškim gluparijam .
Vesoljc ::
AtaStrumf ::
// omogočimo uporabo V/I tokov #include <iostream> float sekundefull(float FrameNo, float FRT) { return(FrameNo / FRT); } int minute(int FrameNo, int FRT) { return(FrameNo / FRT %3600 /60); } int sekunde(int FrameNo, int FRT) { return(FrameNo / FRT %60); } int ure(int FrameNo, int FRT) { return(FrameNo / FRT /3600); } // funkcija main int main() { // uporabljamo imenski prostor "std" using namespace std; // potrebujemo tri spremenljivke int FrameNo, FRT, Rezultat; // pozdrav cout << "Program za preracunavanje FPS v Cas!" << endl; // vpisujemo prvo stevilo cout << "Vnesite stevilo slik, ter pritisnite ENTER:"; cin >> FrameNo; // vpisujemo drugo stevilo cout << "Vnesite stevilo slik na sekundo (FPS), ter pritisnite ENTER:"; cin >> FRT; // ure Rezultat = ure(FrameNo, FRT); cout << "h= " << Rezultat << endl; // minute Rezultat = minute(FrameNo, FRT); cout << "min= " << Rezultat << endl; // sekunde Rezultat = sekunde(FrameNo, FRT); cout << "sec= " << Rezultat << endl; // vrnemo nič in pavza cout << "Pritisnite ENTER za izhod..." << endl; cin.ignore(); cin.get(); return(0); }
Upam, da je to sedaj malo bolj berljivo, da mi lahko kdo razloži v čm je problem, da noče računat s decimalkami.
Vesoljc ::
AtaStrumf ::
Zdaj sem si za silo naredil programček v Excelu, samo ni tolk cool kakor v DOS-u . Na kakšen GUI si pa sploh več ne upam niti pomisliti, glede na to da me že konzolna verzija tolk zeza.
jype ::
http://www.python.org/
Pa se na vseh sistemih, ki jih podpira Python bo delalo: win32, MacOS, MacOS X, Linux, *BSD, Solaris, HP-UX, OpenVMS in se kaj :)
#!/usr/bin/env python
frames = float(raw_input('Stevilo slik (npr 149234): '))
fps = float(raw_input('Stevilo slik na sekundo (npr. 29.97): '))
sec = frames/fps
hours = sec / 3600
minutes = sec % 3600 / 60
seconds = sec % 60
print 'Cas predvajanja filma: %d:%02d:%02d' % (hours, minutes, seconds)
Zgodovina sprememb…
- spremenilo: jype ()
speed machine ::
Noče skompilirat al kako se temu reče.
Ni ti ga hotl skompilirat zato ker si ga kompiliru z prevajalnikom za c++. Program pa je pisan v C-ju. Men ga čisto lepo skompilira v C-ju.
No tak pa je potem skompiliran program.
AtaStrumf ::
Bom probal še z Pythonom.
speed machine ::
Drgač pa sem probu:
1000frame-ov 23FPS=0:0:43
1000frame-ov 23.976FPS=0:0:41
Hey nobody's perfect.
jype ::
Python ve, da ce zelis modulo, zelis modulo. Pac pred operacijo ustrezno pretvori tip spremenljivke v najprimernejsega za tako operacijo.
Primeri:
>>> 3.0 % 2
1.0
>>> 3.2 % 2.0
1.2000000000000002
>>> 3 % 2
1
>>> 3 % 0.16
0.11999999999999994
V tretjem primeru je Python vrnil int, v ostalih pa float, kar je logicno, saj smo le v tretjem primeru racunali samo s podatki tipa int.
Ravno zato je program v Pythonu (ali kakem podobnem visokonivojskem jeziku) bistveno krajsi, razumljivejsi in hitreje napisan, posledicno pa ga je bistveno lazje debugirati.
Vse to ima svojo ceno: performancno se Python ne more meriti z jeziki kot so C, C++ ali recimo Java, vendar lahko kriticne dele kode enostavno napisemo v katerem od teh jezikov. Pri taki matematiki, kot jo zahteva vas program pa mislim, da ni razloga za kakrsnokoli optimizacijo.
Poskusite, poberite Python in pozenite python test.py, v test.py pa skopirajte moj program. Poskusite najt kaksen bug (ce ne vpises stevila kot vhodni podatek program jasno odleti, ce koga zanima kako se temu izogne pa naj napise, pa bom povedal).
Aja, se to: Python je Interpretiran jezik (programov v Pythonu ne prevajamo, podobno kot ne prevajamo php, asp, perl, ruby, smalltalk ali lisp kode).
Zgodovina sprememb…
- spremenilo: jype ()
AtaStrumf ::
speed machine ::
AtaStrumf: dej piko pri 23.976, ne vejice(23,976). Pol pa bi mogl delat.
AtaStrumf ::
AtaStrumf ::
speed machine ::
#include<stdio.h> int main() { int frm,h,m,s;float fps,h2,m2; printf("Enter number of frames:\n"); scanf("%d", &frm); printf("Enter frame rate (frames per second):\n"); scanf("%f", &fps); h=(frm/fps)/3600; h2=((frm/fps)/3600)-h; m=h2*60; m2=(h2*60)-m; s=m2*60; printf("\n ->Total movie length: %d:%d:%d.\n",h,m,s); system("PAUSE"); }
Kompilirano je bilo z DEV-C++.
jype ::
Na windows se to ne da naredit lepo, zato shranis to v nek file, ki ga poljubno poimenujes. Jaz sem predlagal ime test.py.
Potem pozenes cmd, not pa napises:
c:\nekje> python test.py
In bi moralo delovat (ce si prej instaliral Python za Windows).
AtaStrumf ::
Tudi Phyton sem usposobil. Kar direkt copy/paste v test.py zaženeš iz cmd-ja in dela. Škoda edino da ni kake pavze na koncu, ker te če ne greš prek cmd-ja ven vrže preden sploh vidiš rezultat .
Zdaj bi rad pa samo še eno zankico na koncu, ki te vpraša a bi rad še enkrat računal ali je to konec. Kako pa to naredim?
jype ::
raw_input('Pritisni Enter') v bistvu dovoli, da vneses karkoli, ampak konec koncev caka, da pritisnes enter. Ce rezultata ne rabis ga pac ne shranis v nobeno spremenljivko in to je to.
Sicer pa takole
#!/usr/bin/env python
while True:
frames = float(raw_input('Stevilo slik (npr 149234): '))
fps = float(raw_input('Stevilo slik na sekundo (npr. 29.97): '))
sec = frames/fps
hours = sec / 3600
minutes = sec % 3600 / 60
seconds = sec % 60
print 'Cas predvajanja filma: %d:%02d:%02d' % (hours, minutes, seconds)
answer = None
while answer not in ('d', 'n'):
answer = raw_input('Se enkrat (D/N)?').lower()
if answer == 'n':
break
AtaStrumf ::
Evo tolk, da smo si glede tega na jasnem, če bi pa kdo rad naredil opioidni analgetik iz zdravila proti kašlju, ali pa iz kakšne rastlince izoliral takšne ali drugačne substance pol se pa pri meni oglasite.
Zdaj rabim pa samo še zanko za C.
CCfly ::
while(pogoj izstopa) {}
do { } while(pogoj izstopa);
jype ::
#include <stdio.h>
#include <math.h>
int main(void) {
char ans = 0;
float fps = 0.0;
long frames = 0L;
float fsec = 0.0;
long lsec = 0L;
long hours = 0, minutes = 0, seconds = 0;
while (1) {
printf("Vnesi FPS (npr. 29.97): ");
scanf("%f", &fps);
printf("Vnesi stevilo slicic (npr. 198234): ");
scanf("%ld", &frames);
fsec = frames / fps;
lsec = lroundf(floorf(fsec));
hours = lsec / 3600;
minutes = (lsec % 3600) / 60;
seconds = lsec % 60;
printf("Trajanje filma je %d:%02d:%02d\n", hours, minutes, seconds);
while (1) {
if (ans != '\n') printf("Se enkrat (D/N)? ");
scanf("%c", &ans);
if (ans == 'd' || ans == 'n' || ans == 'D' || ans == 'N') {
break;
}
}
if (ans == 'n' || ans == 'N') break;
}
return 0;
}
AtaStrumf ::
Kljub vsemu se ne morem znebiti občutka, da bi se dalo tole še enostavneje naredit in to z GUI-jem in Win aplikacijo. Nekje sem slišal o drag and drop programiranju. Osebno sem v forrest&trees-u ene 100 let nazaj naredil eno šolsko aplikacijo, k si delal vnosna polja, padajoče sezname, gumbe itd. pa je bilo dost simple. Sigurno obstaja nekaj takega tudi za win-se ali se motim.
OwcA ::
Drugače si poglej bodisi Delphi, bodisi Visual Basic, oboje je RAD in zelo intuitivno.
AtaStrumf ::
sid_dabster ::
The sound of her own blood dripping
Like sacred tears from a bleeding rose...( Embraced, Within)
speed machine ::
kako si to naredil?
To je blo narejeno z borland c++ 6 builder-jem. Sam sem še čisti začetnik v njem. Smo mel nek tečaj v šoli, sam je blo od predvidenih 60h, ga sam 10h. Pol pa je blo konc šolskega leta.
AtaStrumf ::
kihc ::
HVALA
CCfly ::
AtaStrumf ::
speed machine ::
Vesoljc ::
celo temo, ki se imenuje C++ povezave imate v oddelku Programiranje...
ce tam ne najdete kako se dela gumbe & stuff, pol vam ni pomoci... zal!
Vesoljc ::
AtaStrumf ::
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C++] vprašanja (strani: 1 2 3 4 5 6 7 8 9 )Oddelek: Programiranje | 27315 (11861) | aljazko1995 |
» | C# in slika iz kamereOddelek: Programiranje | 1351 (1235) | ql000 |
» | [C#] IndexOutOfRange ExceptionOddelek: Programiranje | 1299 (1144) | ql000 |
» | [C#] Sesutje aplikacijeOddelek: Programiranje | 1614 (1449) | Jean-Paul |
» | [c] char zadevaOddelek: Programiranje | 2248 (2046) | TheCyborg |