» »

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
#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

Irbis ::

25. vrstica, kje nastaviš iStevec3?

RatedR ::

Irbis je izjavil:

25. vrstica, kje nastaviš iStevec3?

V 6. vrstici, tako kot vse druge števce

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 ::

Irbis je izjavil:

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?

RatedR ::

specing je izjavil:

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):
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.

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.

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.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Vsota določenih elementov matrike [C]

Oddelek: Programiranje
10922 (610) RatedR
»

Izris lika - ideja

Oddelek: Programiranje
233459 (2494) RatedR
»

Resne težave z razumevanjem osnov programiranja (strani: 1 2 )

Oddelek: Programiranje
8015471 (11983) RatedR
»

Združevanje polj [C]

Oddelek: Programiranje
7876 (740) ragezor
»

Izris zvezdic v C (strani: 1 2 )

Oddelek: Programiranje
816758 (5342) SimplyMiha

Več podobnih tem