Lehký úkol, který nezvládám – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Lehký úkol, který nezvládám – C / C++ – Fórum – Programujte.comLehký úkol, který nezvládám – C / C++ – Fórum – Programujte.com

 

Mrcrywolf
~ Anonymní uživatel
4 příspěvky
10. 4. 2018   #1
-
0
-

Dobrý den . Jsem uplný amatér a dostal jsem úkol ve škole z C++ . Nevím si rady . Našel by se někdo, kdo by mi prosím mohl nějak tuto úlohu vysvětlit ? mělo by se jednat o jednoduchý úkol. No posudte sami. Pokud by to někdo dokázal napsat nebo alespon vysvětli byl bych moc vděčny :) Děkuji za odpovědi.

Uloha:

Je dána celošíselná matice A typu m x n .

Sestavte uživatelskou funkci Soucet_soucin, která vypočte součet a součin všech prvků matice A:

Nahlásit jako SPAM
IP: 78.45.255.–
gna
~ Anonymní uživatel
1891 příspěvků
10. 4. 2018   #2
-
0
-

Nemyslím si, že byste dostali úkol na něco, co jste neprobírali. Pravděpodobně budeš mít v poznámkách něco takového:

void spocitej(int **matice, int m, int n, int *vysledek)
{
    int soucet = 0;
    for (int i = 0; i < m; ++i)
        for (int j = 0; j < n; ++j)
            soucet += matice[i][j];
    *vysledek = soucet;
}
Nahlásit jako SPAM
IP: 213.211.51.–
Kit+15
Guru
10. 4. 2018   #3
-
0
-

#2 gna
Podle zadání by to neměla být procedura, ale funkce.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Mrcrywolf
~ Anonymní uživatel
4 příspěvky
10. 4. 2018   #4
-
0
-

#2 gna
proč tam jsou ty pointry když s nimi nepracujete  ? ty potom pužíváme při volání funkce v mainu ?


Nahlásit jako SPAM
IP: 78.45.255.–
gna
~ Anonymní uživatel
1891 příspěvků
10. 4. 2018   #5
-
0
-

#3 Kit
Céčko má jen funkce (a funkce nefunkce :))

Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1891 příspěvků
10. 4. 2018   #6
-
0
-

#4 Mrcrywolf
Nechápu, s oběma ukazateli se tam přece pracuje. Jestli vás to učí pořádně, tak tam místo nich budeš mít reference.

Nahlásit jako SPAM
IP: 213.211.51.–
Mrcrywolf
~ Anonymní uživatel
4 příspěvky
10. 4. 2018   #7
-
0
-


void soucet_soucin(int **a, int m, int n, int *sum ,int *nas){  // vytvoreni funkce s parametry

             int soucet = 0; // vynulovaní souctu

              int soucin = 0 ;// vynulovani soucinu

     for (int i = 0; i < m; ++i) {               // cykl pro radky

           for (int j = 0; j < n; ++j) {          //cykl pro sloupce

}

        soucet += a[i][j];   //  scitani prvku matice

        soucin *= a [i][j];  //  prvku nasobeni matice ( nejsem si jist jestli se to nasobeni da realizovat timto   stylem)

}

   return (soucet,soucin);   // navratova hodnota funkce

}

Je to takto celé správně podle zadaní tedy ?  jinak děkuji za pomoc chlapi ;)

Nahlásit jako SPAM
IP: 78.45.255.–
KIIV
~ Moderátor
+43
God of flame
11. 4. 2018   #8
-
0
-

#7 Mrcrywolf

Kod, jako takovy, spravne ani vzdalene neni.

To co mas u return, to je uplna blbost. Zaprve se nic neceka, zadruhe operator carka zpusobi, ze by se beztak vracela jen jedna hodnota a to ta co je posledni.

Promenne sum a nas vubec nepouzivas. Hodilo by se pouzit referenci a rovnou se vykaslat na lokalni promenny soucet a soucin.

Smycky sou taky blbe, vnitrni je ted uplne k nicemu, vnejsi bude hazet chyby, protoze neexistuje promenna j.

--

A jestli to ma byt C++, tak tohle je takovy typicky C bastl (tam se to ale ani moc jinak udelat neda). V C++ se to da udelat mnohem lepe. Ostatne bych takove reseni v C++ ani neuznal.

Nahlásit jako SPAM
IP: 81.30.230.–
Program vždy dělá to co naprogramujete, ne to co chcete...
peter
~ Anonymní uživatel
4016 příspěvků
11. 4. 2018   #9
-
0
-

          for (int j = 0; j < n; ++j) {           //cykl pro sloupce

}
Kdyz se uvnitr te smycky nic nedela, proc ji tam mas?

void soucet_soucin
Vystup funkce mas 'void', prazdny, nic a presto pouzivas v kodu 'return' a pokousis se neco vratit.
Gna ma sice vystup nastaven jako void, ale nepouziva 'return' a vystup vraci pres vstupni parametr funkce.
Mozna by ti stacilo upravit ten jeho kod, pridat spravne zavorky, souciny a tak.

Nahlásit jako SPAM
IP: 2001:718:2601:258:5952:7f...–
11. 4. 2018   #10
-
0
-

Pokud mám int matice[m] [n] mohu to považovat za jednorozměrné pole o (m * n) prvcích. Takže by mohl stačit jeden cyklus. Za předpokladu, že při dynamické alokaci někdo nejdříve nealokuje pole ukazatelů na řádky a pak nealokuje jednotlivé řádky samostatně po jednom.

V C++ (je to v zadání) bych uvažoval o zabalení všeho do třídy pojmenované např. matice a pak udělal metodu součet_soucin. Metoda je vlastně také funkce, lépe to vyplývá z anglického označení Member Function ( = členská funkce). Možná by se dalo uvažovat i o metodě bez parametrů.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
MilanL+1
Grafoman
11. 4. 2018   #11
-
0
-

#7 Mrcrywolf
nulování bez vytváření lokálních proměnných, tzn bez "int"

smyčka j ukončovací závorka až za výpočty.

otázkou je zda se součin vejde do int zde bude záležet na rozměrech matice a rozsahu čísel v ní.

Nahlásit jako SPAM
IP: 91.139.9.–
Kit+15
Guru
11. 4. 2018   #12
-
0
-

#5 gna
Ano, C++ má jen funkce, ale když je návratový typ void, tak je vhodné takovou funkci nazvat procedurou. Procedury obvykle něco dělají, ale nevracejí stav. Funkce naopak nic nedělají, ale jen vrací stav. Podobně se zachází i s metodami.

V daném případě se hodnota vrací prostřednictvím parametru, takže je to skutečně taková podivná funkce-nefunkce. V C to často jinak nešlo, ale v C++ by se to už používat nemělo.

V OOP by se na to použily 2 metody bez parametrů - soucet() a soucin().

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Mrcrywolf
~ Anonymní uživatel
4 příspěvky
11. 4. 2018   #13
-
0
-

#8 KIIV
reference se dělá pomocí adresy a pointru ?

No netušim jestli to je c nebo c++ náš učitel už je takový veterán a možná nás učí spíš c ale říka tomu c++.

Ja jako amater nepoznám rozdíl. Jediné co vím že c++ je objekotvě orientovaný jazyk tudíž se tam dělají objekty,třídy a zabalujou se věci do sebe. Ale to jsme nedělali snad jen v Javě jsem se s tím setkal...

Nahlásit jako SPAM
IP: 78.45.255.–
Kit+15
Guru
11. 4. 2018   #14
-
0
-

#13 Mrcrywolf
Jazyk C++ je jen C rozšířené o některé možnosti objektového programování. Podle zadání učitel sice používá C++, ale strukturovaně.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
KIIV
~ Moderátor
+43
God of flame
11. 4. 2018   #15
-
+1
-
Zajímavé
Kit +

#13 Mrcrywolf
V C reference neexistujou, je tam jen ziskani adresy a predani pointeru.

V C++ jde udelat reference primo:

void prohod(int & ref1, int & ref2)
{
  int tmp = ref1;
  ref1 = ref2;
  ref2 = tmp;
}

// volani je pak:
int a = 19;
int b = 20;
prohod(a,b);

Dost se take pouziva konstantni reference, ktera zabranuje zbytecnym kopiim ruznych objektu:

void neco(std::string const& retezec)
{
  // retezec nelze menit, ale urcite se nebude kopirovat
}

// volani:
std::string test{"nejaky retezec"};
neco(test);

// nicmene lze pouzit i implicitni konverze a zadat retezec primo:
neco("nejaky retezec"); // u reference bez modifikatoru const toto nemuze projit

No a v C bys proste musel predat pointer. Plus kontrolovat, jestli ti nekdo z venku neposila null pointer.

Ucitel veteran, takze pri trose smuly jeste programujete v Turbo C z roku 94 (jako vetsina Indie). V te dobe bylo C++ opravdu jen rozsireni C. V soucasnosti je to proste uplne jiny jazyk, ve kterem se za jistych omezeni da zkompilovat i C program. Ted je C++ "rozsirene C" asi jako "Java je vyklesteny C++" coz puvodne opravdu byla. Ted se do ni ale vraci veci, co C++ ma od zacatku.

Nahlásit jako SPAM
IP: 81.30.230.–
Program vždy dělá to co naprogramujete, ne to co chcete...
gna
~ Anonymní uživatel
1891 příspěvků
12. 4. 2018   #16
-
+1
-
Zajímavé
Kit +

#12 Kit
Já ti rozumím, ale šlo mi právě o tu terminologii, že zadání sestavit funkci nemusí znamenat "skutečnou" funkci.

To jeho řešení vypadá, že složené typy nezná, takže by vrácení dvou hodnot asi řešil právě přes dva parametry.

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 14 hostů

Podobná vlákna

Emal? Který? — založil TenKterySeTaze

Který engine? — založil III

Který si vybrat? — založil mustafa

Error, který nepochopím — založil Aresak

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý