Tehtävä: Tee C-kielinen ohjelma:
-joka kysyy erillisiin muuttujiin 5 vastuksen arvot aliohjelmassa.
-joka laskee näiden viiden vastuksen arvoista niiden rinnankytkentä vastuksen toisessa aliohjelmassa
-joka näyttää lasketun keskiarvon pääohjelmassa
Ohjelmassa ei siis lukuja kysytä eikä lasketa pääohjelmassa
Miten tällainen ohjelma tehdään? Miten tehdään aliohjelmia? miten aliohjelmista siirretään arvoja toiseen aliohjelmaan tai pääohjelmaan?
jaska123 kirjoitti:
Miten tehdään aliohjelmia? miten aliohjelmista siirretään arvoja toiseen aliohjelmaan tai pääohjelmaan?
Molempiin kysymyksiin löydät vastauksen Ohjelmointiputkan C-oppaasta.
Kuvittelisin myös, että siellä, mistä tuo tehtävä on peräisin, (koulussa tms.) on jaettu jotain oppimateriaalia (suullista tietoa, monisteita, oppikirja tms.), josta löytyy melko pienellä vaivalla vastaus kaikkiin kotitehtäviin.
Mahdoton tehtävä :(
Ehkä seuraavalla kerralla kuuntelet kun se opettaja selittää noi asiat etkä facebookkaa?
Aloittajan arvostelu ei kaiketi kuitenkaan auta asiassa, vaan ohjeistus koulun oppimateriaalin pariin lienee järkevä ratkaisu. Sinällään melko helppo tehtävä, toteuttaa, kunhan perusteet on ensin opeteltu. Tarvitset siis aliohjelmia (funktioita) noiden tehtävien tekemiseen. Ohjelman rakenne olisi varmaan jotenkin tämän näköinen.
#include <stdio.h> int koko = 5; float vastukset[5] = {0}; void kysy_vastusarvot(int koko); float laske_rinnankytkennan_kokonaisvastus(float* vastukset, int koko); float laske_keskiarvo(float* vastukset, int koko); int main(void) { /** Ei palautusarvoa tallennetaan globaaliin taulukkoon **/ kysy_vastusarvot(koko); printf("Rinnankytketty vastus = %f \r\n", laske_rinnankytkennan_kokonaisvastus(vastukset, koko)); printf("Vastusten keskiarvo = %f \r\n", laske_keskiarvo(vastukset, koko)); return 0; }
Tähän sinun pitää vielä toteuttaa nuo funktiot.
kiitos avusta, onnistuin jotenkuten :)
En tiedä oliko Teuron tarkoitus ottaa nuo globaalit vain esimerkiksi, että noinkin voi tietoja eri alirutiinien välillä välittää, koska noita globaaleja muuttujia turhaan kuljetetaan parametrina funktioille. Yleisesti ottaen kannattaa ottaa säännöksi, että älä käytä koskaan globaalia muuttujaa, ellei siihen ole hyvää perustetta. Tässä tapauksessa sille ei ole mitään perustetta. Toinen sääntö on, että jos kuitenkin käytät/joudut käyttämään globaaleja, niin tee selväksi, että kyseessä on globaali. Älä missään nimessä käytä samaa nimeä lokaaleissa muuttujissa.
Olen monesti törmännyt tilanteeseen, jossa linkkeri onkin poiminut symbolitaulukosta aivan eri muuttujan kuin on ollut tarkoitus. Ja useimmiten vielä tilanteissa, joissa globaaleille symboleille ei edes olisi mitään tarvetta.
Tässä tuo Teuron antama pohja ilman globaaleja.
#include <stdio.h> #define KOKO 5 void kysy_vastusarvot(float* vastukset, int koko); float laske_rinnankytkennan_kokonaisvastus(const float* vastukset, int koko); float laske_keskiarvo(const float* vastukset, int koko); int main(void) { float vastukset[KOKO]; /* Ei palautusarvoa. Arvot tallennetaan parametrina annettuun taulukkoon. */ kysy_vastusarvot(vastukset, KOKO); printf("Rinnankytketty vastus = %f \r\n", laske_rinnankytkennan_kokonaisvastus(vastukset, KOKO)); printf("Vastusten keskiarvo = %f \r\n", laske_keskiarvo(vastukset, KOKO)); return 0; }
Aivopierusta pahoitteluni Torgon versio on oleellisesti parempi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.