Két tömb elemeit hogyan lehet egymáshoz adni?
C-ben, adott 2 tömb x és y elemszámmal. Össze kéne adni az egyik tömb 1. tagját a másik tömb 1. tagjával, és így tovább.
Ha az egyik "elfogy", akkor újra az 1. tagját adjuk hozzá a másik tömbhöz, majd a 2.-at stb. (Tehát a rövidebb tömb elemei annyiszor ismétlődhetnek, amíg a hosszabb tömb végére el nem jutunk.) A tömbök elemei +, egész számok, az utolsó elem mind2-nél a 0, az jelzi, hogy vége a tömbnek.
Végeredménynek egy 3. tömböt kell kapni az összeadott elemekkel.
Na jó, kezdem feladni... már valahogyan összeadogatja őket, de nem tudom, hogyan indítsam újra a tomb2-t ha elfogy és valahogy a tomb1-et se mindig akarja a 0-nál abbahagyni...
A legutóbbi output például ez:
50 57 21 71 77 83 95 54 49 48 57 63 63 63 65 80 81 82 83 90 62 60 66 63 58 57 53 52 54 58 64 50 57 21 71 77 83 95 54 49 48 57 63 63 63 65 80 81 82 83 90 62 60 66 63 58 57 53 52 54 58 64 52 59 23 73 79 85 97 56 51 50 59 65 65 65 67 82 83 84 85 92 64 62 68 65 60 59 55 54 56 60 66 54 61 25 75 81 87 99 58 53 52 61 67 67 67 69 84 85 86 87 94 66 64 70 67 62 61 57 56 58 62 68 58 65 29 79 85 91 103 62 57 56 65 71 71 71 73 88 89 90 91 98 70 68 74 71 66 65 61 60 62 66 72 64 71 35 85 91 97 109 68 63 62 71 77 77 77 79 94 95 96 97 104 76 74 80 77 72 71 67 66 68 72 78 70 77 41 91 97 103 115 74 69 68 77 83 83 83 85 100 101 102 103 110 82 80 86 83 78 77 73 72 74 78 84 82 89 53 103 109 115 127 86 81 80 89 95 95 95 97 112 113 114 115 122 94 92 98 95 90 89 85 84 86 90 96 54 61 25 75 81 87 99 58 53 52 61 67 67 67 69 84 85 86 87 94 66 64 70 67 62 61 57 56 58 62 68 42 49 13 63 69 75 87 46 41 40 49 55 55 55 57 72 73 74 75 82 54 52 58 55 50 49 45 44 46 50 56 48 55 19 69 75 81 93 52 47 46 55 61 61 61 63 78 79 80 81 88 60 58 64 61 56 55 51 50 52 56 62 50 57 21 71 77 83 95 54 49 48 57 63 63 63 65 80 81 82 83 90 62 60 66 63 58 57 53 52 54 58 64 50 57 21 71 77 83 95 54 49 48 57 63 63 63 65 80 81 82 83 90 62 60 66 63 58 57 53 52 54 58 64
Érdekes, nálam csak ennyi:
50 57 23 75 85 97 115 86 53 40 55 63 63 63 65 82 85 90 97 110 94 64 58 61 58 57 53 52 56 62 72
Talán a programjaink között van a különbség, persze látatlanban nehéz megítélni...
Én leírtam hogy csináld meg, igaz arra a specifikációra amit először írtál. Utána meg változtattál a specifikáción, hogy a tomb1 tömb nem rövidebb sose, ilyen tömbökre működjön. Az is igaz, hogy amit még én írtam az is teljesíti ezt a specifikációt is, hiszen ha azt teljesíti hogy bármelyik a 2 közül lehet rövidebb tömb akkor azt is teljesíti hogyha kinevezünk egyet és csak az lehet a rövidebb, arra is helyesen fog működni.
"A tomb3-nak azért van megadva méret, mert különben errort ír ki, ezért beírtam csak úgy egy számot.(nyilván ez így nem túl jó, mert az eredeti tömbök akár hosszabbak is lehetnek)."
Dinamikus tömbbel lehet, vagy úgy hogy előtte megnézzük hogy mekkora tömböt kell létrehozni, vagy pedig lefogalunk dinamikusan valamekkora tömböt és ha az kevés akkor dinamikusan növeljük, de ezt hagyjuk egyelőre, mert az alapok se mennek.
"Érdekes, nálam csak ennyi:" ...
"Talán a programjaink között van a különbség, persze látatlanban nehéz megítélni..."
Ezt tudni lehet, hogy nem ugyanazokkal a tömbökkel van vagy a többi kódrészlet az biztos nem ugyanaz mint az amit mutatott a kérdező legutóbb.
A 3.-ik érték már nem stimmel, nyilván hogy nem ugyanaz a kód állította elő. Az is igaz, hogy nem egyezne végig a különböző operációs rendszereken, c fordítók esetében, mivel tömb túlindexelés van, de csak onnastól nem egyezne ahol már túl van indexelve és maximum tomb2 végjeléig menne. Hamarabb akkor álna le ha segmentation fault hibával elszálna.
Inicialiálatlan változókkal ne dolgozzunk vagyis mindig inicializáljuk vagy pedig vegyük figylembe hogy kezdetben bármi lehet az értékük, ne éljünk előfeltételezéssel hogy az int-nek alapból 0 a kezdőértéke például, mert ez nem garatnált c-ben.
Tessék ezt fejezd be : pB5tSaNq
Csak a //??? helyett írj kódot illetve tomb1 meg tomb2-őt változtathatod a legutolsó specifikáció szerint és még megkötés hogy kevesebb legyen mint 128 elemű vagy maximum 128 elemű a 0 végjellel együtt. A j változóra is szükség van és plusz változóra nincs szükség.
„az biztos nem ugyanaz mint az amit mutatott a kérdező legutóbb”
Már az igaz: Érted a sorok közt bujkáló iróniát, mint senki más.
„Inicialiálatlan változókkal ne dolgozzunk”
Ez általános jótanácsnak nagyon is helyénvaló, de itt nemigen lehet mire vonatkoztatni. Az egész program a tömbelemek értékének beállításáról szól. Amelyiket beállítod, azt nem kell külön inicializálni, amelyiket nem, az meg nem vesz részt az egészben, tehát fölösleges (nemcsak az inicializálása, hanem maga a tömbelem is). A két számláló esetén meg eleve a működés feltétele a kezdőérték beállítása, úgyhogy nem egészen látom, mire irányul a megjegyzés, azon túl, hogy hát igen, bezony-bezony, hogy úgy van az!
„ne éljünk előfeltételezéssel”
Ühüm, például azzal, hogy 32 eredmény tárolásához 128 elemű tömb kell. Vagy ismerjük a nagy tömb méretét, és akkor elég egy ugyanakkora, vagy sem, de akkor semmi nem garantálja, hogy pont hasraütéssel lehet meghatározni a biztonságos elemszámot. És igazad van, Kérdező még nem tart a dinamikus tömböknél, de attól még a statikusak kezelésében igazodhat a józan észhez.
Én csak azt látom és veszem figyelembe ami ide van írva, nem a különböző mögöttes értelmezéseket.
"Ez általános jótanácsnak nagyon is helyénvaló, de itt nemigen lehet mire vonatkoztatni. Az egész program a tömbelemek értékének beállításáról szól."
A tomb3-nál még el lehet csúszni vele, hogy mekkora a használt mérete amikor kiíratom a végén. Ezért úgy próbáltam hogy a legegyszerűbb legyen nem elhibázni.
"Ühüm, például azzal, hogy 32 eredmény tárolásához 128 elemű tömb kell. "
Ez még csak a level 1-es szint, arra koncentráljon egyelőre a kérdező hogy működjön az általam előzőleg leírt módon. Amíg a két tömb Descartes-szorzata bejárásával próbálkozik a kérdező teljesen tévesen, utána meg egy i index változóval összvissz, addig ne erőltessük a többit, egyelőre ez menjen, ha nem tudom hány óra után se tudta megoldani, hanem teljesen rossz megoldásokat produkált. A fokozatosság elve miatt írtam úgy a kódba is, nem azért mert úgy oldanám meg és abból is helyes megoldást lehet kihozni.
Sikerült(?)
4451fCz3
Hogyan tovább? Van tovább?
Ez már végre jól működik. Mondjuk 2 if az nem lenne indokolt hozzá, de a lényeg hogy jól számol.
Az én megoldásom : d8LNy6J3 .
Ezt is nézd meg!
Tovább mindig lehet, nagymesteri szintig és még azon is túl.
Például lehetne a következő feladat, ahogy eredetileg kiírtad, hogy bármelyik lehet rövidebb a két tömb közül.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!