Diskuze: Prý lehký úkol
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
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í.
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++
1/ seznamit se s postupem souctu a soucinu matic
Nemá náhodou zadavatel sečíst(vynásobit) prvky dané matice mezi sebou?
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 ...
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
Ú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.
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ěď.
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];
}
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.
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
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áš
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
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:
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).
Zobrazeno 14 zpráv z 14.