Olisi tarkoitus thedä ohjelma joka kysyy käyttäjältä kokonaisluvun n (n>0) ja tulostaa luvun kertoma näytölle. Esimerkiksi n:n kertomaa merkitään merkillä n!, joka tarkoittaa lukua, joka saadaan seuraavasti 1*2*3...*n
Olen saanut seuraavan koodin aikaiseksi ja ihmettelen suuresti mikä saatana siinä on vikana? Kohta menee hermot jos kukaan ei osaa auttaa...
#include <stdio.h> int main(void){ int x, i, tulo; printf("\n Anna kokonaisluku:"); scanf("%d", &tulo, &x, &i); for (i=1 ;i <= x; i++); tulo = 1 * i; printf("Luvun %d kertoma on %.0f", tulo); return 0; }
vaihda nuo %d %i:ksi. Tälläinen toimii.
#include <stdio.h> int main(void){ int x, i, tulo; printf("\n Anna kokonaisluku:"); scanf("%i", &tulo, &x, &i); for (i=1 ;i <= x; i++); tulo = 1 * i; printf("Luvun %i kertoma on", tulo); getchar(); return 0; }
%d ja %i on sama asia.
Miksi käyttäjältä kysytään kolme lukua vaikka tarvitaan vain yksi? Lisäksi jos halutaan lukea useampaan muuttujaan, pitää scanf:ssä olla jokaista muuttujaa varten %d, tuossa luetaan arvo vain muuttujaan 'tulo'. Muuttujaan 'x' ei lueta mitään arvoa, joten silmukka pyörii satunnaisen määrän kiertoja. Lisäksi silmukka ei tee muuta kuin pyörii määränsä ympäri, koska sen lopussa on puolipiste. Kun silmukan suoritus on loppunut, kerrotaan silmukan pyörimä määrä yhdellä ja sen jälkeen näytetään tuloksena saatu kokonaisluku liukulukuna nollan desimaalin tarkkuudella. Ei muuta kuin kurssin oppikirja esille ja alkeita kertaamaan, kyllä se sieltä valkenee.
Meca kirjoitti:
%d ja %i on sama asia.
Miksi käyttäjältä kysytään kolme lukua vaikka tarvitaan vain yksi?
Eikös tuossa niin että käyttäjältä kysytään yksi luku vaikka tarvitaan kolme? :)
Onpas tuo rndprogyn koodi outoa... Eihän tuo voi toimia.
Tässä toimiva versio:
#include <stdio.h> int main() { int n=0; //tämä luetaan käyttäjältä int tulos=1; //tähän lasketaan tulos printf("\nAnna luku josta lasketaan kertoma: "); scanf("%i", &n); int i; for (i=1; i<=n; i++) { //for-silmukan perään EI puolipistettä! tulos=tulos*i; //kerrotaan tulos laskurimuuttujalla } printf("\n\nLuvun kertoma on %i", tulos); return 0; }
Ps. Aloittelija2: Laita koodisi [ koodic] ja [ /koodic] -tagien väliin keskustelualueella.
tejeez kirjoitti:
Eikös tuossa niin että käyttäjältä kysytään yksi luku vaikka tarvitaan kolme? :)
Ei tarvita kuin yksi luku mutta yritetään lukea tietoa kolmeen muuttujaan.
Vielä yksi esimerkkitoteutus mahtuu mukaan...
#include <stdio.h> int main(void) { int luku, tulos, i; printf("Kirjoita luku: "); scanf("%i", &luku); tulos = luku; for (i = 2; i < luku; i++) { tulos *= i; } printf("%i! = %i", luku, tulos); return 0; }
Heikin esimerkki on myös ihan hyvä, mutta C:ssä muuttujia ei saa määritellä kesken kaiken, vaan ne täytyy määritellä heti funktion alussa.
Antti Laaksonen kirjoitti:
C:ssä muuttujia ei saa määritellä kesken kaiken, vaan ne täytyy määritellä heti funktion alussa.
Kyllä niitä saa, se ei vain ole suositeltavaa koodin selkeyden takia.
Deewiant: ANSI-C:ssä EI saa, uudemmassa C99-standardissa kyllä. Ihan normaali ANSI-C on kuitenkin enemmän käytössä ja jos puhutaan vain "C:stä", niin yleensä tarkoitetaan ANSI-C:tä.
edit: ja en ole todellakaan samaa mieltä siitä, että tuollainen kaikissa tapauksissa selventäisi yhtään mitään :)
Antti Laaksonen kirjoitti:
Heikin esimerkki on myös ihan hyvä, mutta C:ssä muuttujia ei saa määritellä kesken kaiken, vaan ne täytyy määritellä heti funktion alussa.
Niinhän se olikin... en ole itse C:tä opiskellut, vaan mennyt suoraan C++:aan, jossa tätä sääntöähän ei ole.
Ja ainakin minusta on selkeämpi määritellä joku laskuri tms. muuttuja vasta kun sitä tarvitaan...
Henk. koht. koodailen itekkin c++:lla ja mun mielestä mikään ei oo selkeempää kun jaoteltu koodi joten määrittelen kaikki muuttujat samassa kohdassa, noh jokainen tallaa(luetaan koodaa) tyylillään.
Juu kyllä näillä ohjeilla sain tuon toimimaan. Löytyiskö mistään c ohjelmaa jolla pystyis laskemaan koearvosanojen keskiarvon että ei itse tarvisi sitä suunnitella? Nimenomaan siis c kielellä...
Suosittelisin ottamaan pikemmiten jonkun C-kirjan käteen ja lukemaan siitä kaikki perusasiat. Tuo koearvosanojen keskiarvon laskeminen on todella helppo tehdä, kun vain vähän sitä paperilla tai päässään suunnittelee.
(Haiskahtaa kumpikin näistä tehtävistä muuten aika pahasti koulutehtäviltä :)
Keskiarvon laskijahan on erittäin yksinkertianen tehdä. Kannattaisi yrittää itse...
Tässä kuitenkin oma, kovalevyn syövereistä löytämäni keskiarvonlaskija (C++:aa, mutta eroa C:hen ainoastaan cin ja cout):
#include <iostream> using namespace std; int main(int argc, char *argv[]) { int monta, summa, temp; float tulos; cout << "Keskiarvolaskija\n\n"; cout << "Monesta luvusta lasketaan keskiarvo?\n"; cin >> monta; for (int i=0; i<monta; ++i) { cout << "\nAnna luku " << i+1 << "\n"; cin >> temp; summa+=temp; } //lasketaan lopullinen tulos tulos=summa/monta; cout << "\nLukujen keskiarvo on: " << tulos << "\n"; return 0; }
Onhan tuossa muutakin eroa: muuttuja i määritellään keskellä koodia. Se pitäisi siis siirtää alkuun.
Tuo Heikin koodi olisi parempi ilman tuota 'monta lukua' kysymystä. Eli käyttäjältä kysyttäisiin lukuja ja kun lukujen syöttäminen on lopetettu, ohjelma laskee niistä keskiarvon.
Mutta mistä tiedämme, milloin niitä ei enää syötetä? "cin >> temp" varmaankin odottaa, kunnes käyttäjä antaa luvun; ei Enter sitä masenna.
Sanokaas viisaammat miten saan tuon kysymään monta keskiarvo numeroa? Ja sen pitäisi tulostaa myös, esim. että "Ohjelmaan syötetty 5 arvosanaa."
#include <stdio.h> main() { int syotetty_luku, keskiarvo; do { printf("Ohjelma laskee syötettyjen arvosanojen keskiarvon.\nLopetus negatiivisella kokonaisluvulla.Anna arvosana (4-10):\n"); scanf("%d", &syotetty_luku); keskiarvo = syotetty_luku / syotetty_luku; if(syotetty_luku > 0) { printf("Arvosanojen keskiarvo: %d\n", keskiarvo); } else if(syotetty_luku < 0) { printf("Ohjelma lopetetaan...\n"); } } while(syotetty_luku > 0); return 0; }
tsekkaa ekaa ohjelmaani: www.freewebs.com/dungeon86/ka10.zip
Aloittelija2: Edelleen suosittelisin jotain hyvän oppaan lukemista ennenkuin edes yrität tehdä tuohon lisää. Tällä hetkellä tuo ohjelmasi ei tee mitään järkevää. Yksinkertainen toimintasuunnitelma:
1. Kysy käyttäjältä lukujen määrä
2. Talleta määrä johonkin muuttujaan
3. Kysy lukuja niin pitkään kunnes niitä on annettu maara-kappaletta; negatiivisen luvun tapauksessa lopeta ohjelma, positiiviset luvut lisätään muuttujaan summa
4. Laske keskiarvo = summa / maara
5. Tulosta keskiarvo käyttäjälle
Tästä vain lähdet vaihe vaiheelta koodaamaan ja mietit järkevästi jokaisessa kohdassa mitä ohjelman tulee tehdä. Jos tekeminen ei vieläkään onnistu täältä ja mureakuhasta saamillasi ohjeilla, niin suosittelisin jättämään koodaamisen sikseen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.