Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Prý lehký úkol

Aktivity
Avatar
Crywolf
Člen
Avatar
Crywolf:10.4.2018 20:38

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. Dále by mě zajímalo jedná-li se opravdu o leký ukon nebo je to už pokročilejší ůroven .

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:

 
Odpovědět
10.4.2018 20:38
Avatar
martanec
Člen
Avatar
martanec:11.4.2018 7:47

Tato uloha sa radi medzi lahke ulohy. Je to pekny priklad ako si precvicit pracu s dvoj-rozmernymi poliami. Pokial ste na hodine prebrali teoriu, do 1 hodiny by si to mal zvladnut.

 
Nahoru Odpovědět
11.4.2018 7:47
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Crywolf
Petr Čech:11.4.2018 14:12

V zásadě je třeba jen umět udělat si 2-rozměrné pole a umět se dostat ke všem jeho prvkům (pomocí vnořených cyklů).
Vlastně jediné, co je na tom složitého je absurdní syntaxe deklarace polí.

Nahoru Odpovědět
11.4.2018 14:12
the cake is a lie
Avatar
Roman
Člen
Avatar
Roman:11.4.2018 15:06

Asi by jsi nemel byt uplny amater, kdyz vam dali takovy ukol ve skole. Urcite jste uz probirali pole a cykly. Takze nakoukni do ucebniho materialu zkus neco sesmolit a poklud se nekde zaseknes napis kde. Urcite se tady najde spousta lidi kteri ti radi poradi.
Kratce jak postupovat:
1/ seznamit se s postupem souctu a soucinu matic
2/ implementovat pricpip reseni do C++

 
Nahoru Odpovědět
11.4.2018 15:06
Avatar
nickname01
Člen
Avatar
Odpovídá na Roman
nickname01:11.4.2018 16:01

1/ seznamit se s postupem souctu a soucinu matic

Nemá náhodou zadavatel sečíst(vynásobit) prvky dané matice mezi sebou?

 
Nahoru Odpovědět
11.4.2018 16:01
Avatar
Roman
Člen
Avatar
Odpovídá na nickname01
Roman:11.4.2018 17:05

Me je to jasne vam taky ale tazatel se zda byt vydeseny - proto jsem se snazil pomoct pri prvnich krocich reseni. Vas nevytaci lidi s temito "debi.nimi" dotazy a jeste houpejsimi zavery?

mělo by se jednat o jednoduchý úkol. No posudte sami ...

Ja nevim co mu prijde slozite jestli programovani v C++ nebo matematicky vypocet. "Nikdo z nas tady prece nechodil do skoly a nevime ze se dostavaji ukoly jen z probrane latky. "

A jak se rika na hloupou otazku ...

 
Nahoru Odpovědět
11.4.2018 17:05
Avatar
nickname01
Člen
Avatar
Odpovídá na Roman
nickname01:11.4.2018 17:17

Vas nevytaci lidi s temito "debi.nimi" dotazy a jeste houpejsimi zavery?

Zdá se mi sice trochu divné, že na to někdo nechce přijít sám a napíše to do diskuze, ale takoví lidé mě nevytáčí.

Ja nevim co mu prijde slozite jestli programovani v C++ nebo matematicky vypocet.

Mně osobně se to nezdá tak nepochopitelné - já, když jsem se učil cykly(c++ jsem se sice nikdy neučil, ale to je jedno), měl jsem v tom guláš a i proiterování dvourozměrného pole mi přišlo složité. To samé s poli, a tohle je obojí v jednom. To dle mě prostě patří k programátorským začátkům

Editováno 11.4.2018 17:19
 
Nahoru Odpovědět
11.4.2018 17:17
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Crywolf
DarkCoder:11.4.2018 19:06

Úloha bude tak těžká, jak se k ní postavíš.

Dobrý dojem a vizitku si uděláš když:

Načteš data (rozměry matice) ze souboru nikoli z klávesnice. Alokuješ si paměť pro 2D pole dynamicky nikoli staticky. Načteš ze souboru zbylá data (hodnoty prvků matice). Provedeš volání funkce jejíž parametry budou rozměry matice, ukazatel na 2D pole, ukazatel na proměnnou představující výsledek součinu a ukazatel na proměnnou představující výsledek součtu. Vypíšeš hodnoty proměnných pro součin a součet. Budeš využívat výhod odděleného překladu a instrukcí preprocesoru. Řádně uvolníš paměť, uzavřeš soubor, provedeš kontrolu všeho čeho je třeba a okomentuješ svůj kód.

Nahoru Odpovědět
11.4.2018 19:06
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Rickert Brandsen:11.4.2018 20:16

Vzhledem ke stylu zadání otázky bych řekl, že mu tvůj popis moc nepomůže. Když ani neví základy k procházení matic. Ale samozřejmě dobrá odpověď.

Editováno 11.4.2018 20:17
 
Nahoru Odpovědět
11.4.2018 20:16
Avatar
Crywolf
Člen
Avatar
Crywolf:11.4.2018 20:22

Hele chlapi popravdě jsem spíš čekal , že mi někdo poradí. Jako já zvládám syntax ale prostě nechápu tu programatorskou filozifii a algoritmizaci ulohy a nevím, kde se to naučit. školní skripta mi co mám k dispozici mi za 1. nepříjdou tak přehledná a za 2. látka tam končí 1 rozmerným polem.Nic méně i tak jsem pohledal na internetu a sesmolil jsem tento kod. Mohl by se na něj někdo podívat a popřípadě rici co je spravně nebo zle ?

int soucet_soucin(int **a, int n, int m){
int j, i, sum,nas;
for(i=0;i<=n;i++)
{
for(j=0;j<=m;j++)
{

sumM += a[i][j];
nas *= a[i][j];

}

 
Nahoru Odpovědět
11.4.2018 20:22
Avatar
Crywolf
Člen
Avatar
Odpovídá na DarkCoder
Crywolf:11.4.2018 20:30

Všechny tyto ukoly nejsou součástí tohotu ukolu. Mám udělat pouze tentu uživatelskou funkci, naplnění matice,alokace paměti a volání funkce jsou mimo rozsah úlohy.

 
Nahoru Odpovědět
11.4.2018 20:30
Avatar
nickname01
Člen
Avatar
Odpovídá na Crywolf
nickname01:11.4.2018 20:30

Jako já zvládám syntax ale prostě nechápu tu programatorskou filozifii a algoritmizaci ulohy a nevím, kde se to naučit.

Programátorskou filozofii a algoritmizaci se nenaučíš jinak, než že budeš programovat :-P

 
Nahoru Odpovědět
11.4.2018 20:30
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Crywolf
Petr Čech:11.4.2018 21:17

Skoro dobře, ale pole začínají na 0 a proto končí i na indexu o jedno nižší než jejich délka, proto

double sum = 0;
double mult = 1;
for(int y=0;y<m;y++)
{
        for(int x=0;x<n;x++)
        {
                sum += a[x][y];
                mult *= a[x][y];
        }
}

změnil jsem <= na < . Na té pozici o jedna větší může být cokoliv od náhodného bordelu do nemilosrdného zabití operačním systémem, protože hrabeš někam, kam nemáš :D
Ještě jsem prohodil cykly, typicky se matice zpracovávají po řádcích (je to celkem fuk, ale je dobré dodržovat konvence).
Další věc, které je třeba se vyvarovat je míchání Čj a Aj, nikdy to nekončí dobře ;)

Nahoru Odpovědět
11.4.2018 21:17
the cake is a lie
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Crywolf
DarkCoder:11.4.2018 21:44

Hele chlapi popravdě jsem spíš čekal , že mi někdo poradí.

Výše jsem Ti popsal velmi podrobně postup krok za krokem, potřebný k napsání tvé úlohy. Dokonce i blíže popsal funkci, kterou máš vytvořit.

Pokud je tvým úkolem pouze vytvořit definici funkce Soucet_soucin(), pak musíš pochopit, jak funkce bude pracovat. Jaká (zda-li) bude její návratová hodnota a jaké (zda-li) budou její parametry.

Mohla by vypadat třeba takto (pouze popis):

Návratová hodnota:
Bez hodnoty (void) nebo vrácená chybová hodnota int (konkrétně 0 nebo -1). 0 může reprezentovat informaci, že hodnota součtu nebo součinu nepřekročila požadovaný rozsah typu a že vše proběhlo v pořádku. -1 že rozsah typu byl překročen a funkce tak výsledek neurčila správně. Toho bys v programu mohl dále využít.

Parametry:

  1. ukazatel na dvourozměrné pole typu int
  2. nezáporná celočíselná proměnná přebírající šířku matice
  3. nezáporná celočíselná proměnná přebírající výšku matice
  4. ukazatel na proměnnou udávající výsledek součtu
  5. ukazatel na proměnnou udávající výsledek součinu

Zde máš detailní popis funkce.

K tvému kódu:
Lokální proměnné nejsou-li inicializovány obsahují náhodnou hodnotu. Nelze je tedy použít pro výpočet bez předchozí inicializace. Proměnná sum musí být inicializována na hodnotu 0. Proměnná nas musí být inicializována na hodnotu 1. Podmínka cyklu for je chybně, nesmí být rovnost, indexy jsou mimo povolený rozsah (Pokud bude matice např. 3x3 nelze přistupovat ke čtvrtému prvku, povolené indexy jsou 0 až 2). Překladač by navíc zahlásil chybu u nedeklarované proměnné sumM (ale zde předpokládám, že si se pouze upsal).

Nahoru Odpovědět
11.4.2018 21:44
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 14 zpráv z 14.