Forum » Programiranje » Spreminjanje vrednosti v polju [C]
Spreminjanje vrednosti v polju [C]
RatedR ::
Lp, poskušam rešit problem kjer imam 1 polje velikosti npr. 5, nato uporabnik zapolni to polje da vnese 5 števil, zatem pa vnese še neko število izven polja in če se to število ujema s katerim v polju, zapolni tisto mesto ujemajočega števila v polju z spodnjim številom v polju in tako se premaknejo vsi navzgor.
Primer vnosa v polje: 5, 15, 235, 7, 99
Vnos števila izven polja: 7 (ujemanje s številko 7 v polju)
Izpis: 5, 15, 235, 99, 0
Nekaj sem napisal ampak mi že predolgo nagaja stvar, da nimam več idej
Vsa težava je v vrsticah od 25 do 30, ker ne izvaja želenega zato me zanima kaj lahko naredim.
Hvala
Primer vnosa v polje: 5, 15, 235, 7, 99
Vnos števila izven polja: 7 (ujemanje s številko 7 v polju)
Izpis: 5, 15, 235, 99, 0
Nekaj sem napisal ampak mi že predolgo nagaja stvar, da nimam več idej
#include<stdio.h> #define VELIKOST 5 int main(void) { int iStevec, iStevec2, iStevec3, iStevec4, iStevec5; int iStevilo; int iPolje[VELIKOST]; for(iStevec = 0; iStevec < VELIKOST; iStevec++) { printf("Vnesite %d.stevilo: ", iStevec+1); fflush(stdin); scanf("%d", &iPolje[iStevec]); } printf("\nVnesite poljubno stevilo: "); scanf("%d", &iStevilo); for(iStevec2 = 0; iStevec2 < VELIKOST; iStevec2++) { if(iPolje[iStevec2] == iStevilo) { iStevec2 = iStevec3; while(iStevec3 < VELIKOST) { iPolje[iStevec2]=iPolje[iStevec3-1]; iStevec3++; } iPolje[VELIKOST] = 0; } } for(iStevec4 = 0; iStevec4 < VELIKOST; iStevec4++) { printf("\nPolje [%d] == %d", iStevec4, iPolje[iStevec4]); } return 0; }
Vsa težava je v vrsticah od 25 do 30, ker ne izvaja želenega zato me zanima kaj lahko naredim.
Hvala
RatedR ::
Irbis ::
V 6. vrstici samo poveš, kateri števci so, ne poveš začetnih vrednosti. V C spremenljivke nimajo garantirane začetne vrednosti 0.
Zgodovina sprememb…
- zavaroval slike: Mavrik ()
RatedR ::
V 6. vrstici samo poveš, kateri števci so, ne poveš začetnih vrednosti. V C spremenljivke nimajo garantirane začetne vrednosti 0.
Sem probal deklarirat iStevec3 na 0, malo se spremeni rezultat ampak še vedno ni pravilno.
Zgodovina sprememb…
- spremenilo: RatedR ()
specing ::
Vrstica 25. Absolutno ne spreminjat iteratorja na večih mestih
(najbrž si mislil iStevec3 = iStevec2;)
Vrstica 28: Wtf delaš tukaj?
iPolje[iStevec2]=iPolje[iStevec3-1];
^^^^^^^^ števec 2?!
Vrstica 31: noben soliden programski jezik ti ne bi omogočil tega
iPolje[VELIKOST] = 0;
čestitke, zapisal si 0 v polje takoj za arrayem => undefined behavior.
Zakaj imajo vse spremenljivke predpono i?
(najbrž si mislil iStevec3 = iStevec2;)
Vrstica 28: Wtf delaš tukaj?
iPolje[iStevec2]=iPolje[iStevec3-1];
^^^^^^^^ števec 2?!
Vrstica 31: noben soliden programski jezik ti ne bi omogočil tega
iPolje[VELIKOST] = 0;
čestitke, zapisal si 0 v polje takoj za arrayem => undefined behavior.
Zakaj imajo vse spremenljivke predpono i?
RatedR ::
Vrstica 25. Absolutno ne spreminjat iteratorja na večih mestih
(najbrž si mislil iStevec3 = iStevec2;)
Vrstica 28: Wtf delaš tukaj?
iPolje[iStevec2]=iPolje[iStevec3-1];
^^^^^^^^ števec 2?!
Vrstica 31: noben soliden programski jezik ti ne bi omogočil tega
iPolje[VELIKOST] = 0;
čestitke, zapisal si 0 v polje takoj za arrayem => undefined behavior.
Zakaj imajo vse spremenljivke predpono i?
No počasi, še vedno se učim.
Vrstica 25: Da, sem zamešal.
Vrstica 31: To sem popravil na VELIKOST - 1
Vrstica 28: Je dokaj pravilna, poglej sliko spodaj, tu program deluje. Če pa pod poljubno število vnesem v tem primeru 13 (nad 7) bo izpis napačen.
Predpone i dajem zato ker to od nas zahtevajo v šoli, in ja če na testu ne uporabljam teh predpon(madžarska notacija) dobim 0 točk, tud men gre na živce ampak sem se navadil.
specing ::
Vrstica28: Seveda bo napačen, če pa vedno nastavljaš celico iStevec2. D'oh.
> Predpone i dajem zato ker to od nas zahtevajo v šoli, in ja če na testu ne uporabljam teh predpon(madžarska notacija) dobim 0 točk, tud men gre na živce ampak sem se navadil.
predpone i, katastrofalna indentacija, reverse camel brackets?!
Nevem ali vas "učitelj" trolla ali so krenga poklical iz ulice da uči C kakor ve in zna.
Dobi zvek pa se pritoži ravnatelju da vas "učitelj" zajebava.
Tukaj je pravilna implementacija v solidnem programskem jeziku (Ada):
Tukaj napake kot so linija 25 in 31 v tvoji kodi zelo težko narediš:
Tukaj je še pravilna implementacija z veliko boljšim stilom programiranja v katastrofalno slabem programskem jeziku (C):
> Predpone i dajem zato ker to od nas zahtevajo v šoli, in ja če na testu ne uporabljam teh predpon(madžarska notacija) dobim 0 točk, tud men gre na živce ampak sem se navadil.
predpone i, katastrofalna indentacija, reverse camel brackets?!
Nevem ali vas "učitelj" trolla ali so krenga poklical iz ulice da uči C kakor ve in zna.
Dobi zvek pa se pritoži ravnatelju da vas "učitelj" zajebava.
Tukaj je pravilna implementacija v solidnem programskem jeziku (Ada):
with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; procedure Main is VELIKOST : constant Integer := 5; input : Integer; polje : array (1 .. VELIKOST) of Integer; begin for iterator in 1 .. VELIKOST loop Put ("Vnesite "); Put (Item => iterator, Width => 1); Put (". število: "); Get (input); polje (iterator) := input; end loop; New_Line; Put ("Vnesite poljubno število: "); Get (input); New_Line; for iterator in 1 .. VELIKOST loop if polje (iterator) = input then -- premakni vse navzgor for premik in (iterator + 1) .. VELIKOST loop polje (premik - 1) := polje (premik); end loop; polje (VELIKOST) := 0; end if; end loop; New_Line; for iterator in 1 .. VELIKOST loop Put ("Polje ["); Put (Item => iterator, Width => 1); Put ("] = "); Put (polje (iterator)); New_Line; end loop; exception When others => Put_Line ("Nekaj je šlo narobe"); end Main;
Tukaj napake kot so linija 25 in 31 v tvoji kodi zelo težko narediš:
main.adb:29:25: assignment to loop parameter not allowed main.adb:39:25: warning: value not in range of subtype of "Standard.Integer" defined at line 8 main.adb:39:25: warning: "Constraint_Error" will be raised at run time gnatmake: "main.adb" compilation error
Tukaj je še pravilna implementacija z veliko boljšim stilom programiranja v katastrofalno slabem programskem jeziku (C):
#include <stdio.h> #define VELIKOST 5 int main() { int input; int polje[VELIKOST]; for(int stevec = 0; stevec < VELIKOST; stevec++) { printf("Vnesite %d. stevilo: ", stevec+1); scanf("%d", &polje[stevec]); } printf("\nVnesite poljubno stevilo: "); scanf("%d", &input); for(int stevec = 0; stevec < VELIKOST; stevec++) { if(polje[stevec] == input) { // premakni vse navzgor for (int premik = stevec + 1; premik < VELIKOST; ++premik) { polje[premik - 1] = polje[premik]; } polje[VELIKOST - 1] = 0; } } printf ("\n"); for(int stevec = 0; stevec < VELIKOST; stevec++) { printf("Polje [%d] == %d\n", stevec, polje[stevec]); } return 0; }
RatedR ::
Hvala za pomoč, kar se pa tiče programa v šoli in poučevanja me pa zanimajo še mnenja drugih
Sicer ko pride čas za test pišemo "programe" na liste in imaš nalogo za npr. 5 točk, za vsako sintaktično napako se odšteje 1 točka, če pa program ne dela svojega pa dobiš 0 točk. Kam pridemo s tem? Ja 3 pozitivne izmed 20 dijakov, 60% negativnih pa točno ve kje so napake in kako jih odpravit, vendar jih niso mogli ker valda pišemo na liste.
Če nisi talent seveda delaš napake na listu ker nimaš compilerja...saj je point preverjanja da dijaki razmišljajo kako problem rešit ne pa da pišejo na liste in nimajo pojma kaj program dela(to velja za daljše programe) in logično ker ni compilerja pri daljših programih nisi nikoli prepričan če je pravilno.
To je moje osebno mnenje...ocenjevanje programiranja s pisanjem na liste je totalna bedarija, prosim še za mnenja drugih.
Sicer ko pride čas za test pišemo "programe" na liste in imaš nalogo za npr. 5 točk, za vsako sintaktično napako se odšteje 1 točka, če pa program ne dela svojega pa dobiš 0 točk. Kam pridemo s tem? Ja 3 pozitivne izmed 20 dijakov, 60% negativnih pa točno ve kje so napake in kako jih odpravit, vendar jih niso mogli ker valda pišemo na liste.
Če nisi talent seveda delaš napake na listu ker nimaš compilerja...saj je point preverjanja da dijaki razmišljajo kako problem rešit ne pa da pišejo na liste in nimajo pojma kaj program dela(to velja za daljše programe) in logično ker ni compilerja pri daljših programih nisi nikoli prepričan če je pravilno.
To je moje osebno mnenje...ocenjevanje programiranja s pisanjem na liste je totalna bedarija, prosim še za mnenja drugih.
Zgodovina sprememb…
- spremenilo: RatedR ()
ragezor ::
Pisanje programov na list ima svoj smisel.
Rabis toliko vaje, da pises program tekoce, da te sintaksa ne ovira in da ti je programerska logika toliko jasna, da napises preproste stvari brez da bi poskusal in popravljal n-krat med postopkom pisanja.
Izkoristi compiler doma in toliko programiraj, da ti bodo stvari jasne.
Rabis toliko vaje, da pises program tekoce, da te sintaksa ne ovira in da ti je programerska logika toliko jasna, da napises preproste stvari brez da bi poskusal in popravljal n-krat med postopkom pisanja.
Izkoristi compiler doma in toliko programiraj, da ti bodo stvari jasne.
specing ::
> ocenjevanje programiranja s pisanjem na liste je totalna bedarija, prosim še za mnenja drugih.
Ni totalna bedarija, če se ocenjuje algoritmično razmišljanje. Poleg tega imajo učitelji s tem nek papir za pokazat, če jih kdo vpraša, kaj so ocenili.
Ni totalna bedarija, če se ocenjuje algoritmično razmišljanje. Poleg tega imajo učitelji s tem nek papir za pokazat, če jih kdo vpraša, kaj so ocenili.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Vsota določenih elementov matrike [C]Oddelek: Programiranje | 991 (679) | RatedR |
» | Izris lika - idejaOddelek: Programiranje | 3744 (2779) | RatedR |
» | Resne težave z razumevanjem osnov programiranja (strani: 1 2 )Oddelek: Programiranje | 16548 (13060) | RatedR |
» | Združevanje polj [C]Oddelek: Programiranje | 975 (839) | ragezor |
» | Izris zvezdic v C (strani: 1 2 )Oddelek: Programiranje | 7193 (5777) | SimplyMiha |