Gå til innhold

Hjelp til program som skal regne ut motstander i en krets


Anbefalte innlegg

Skrevet

Heisann, jeg har fått en oppgave på skolen der jeg skal regne ut summen av motstander i en krets.

 

Kretsen består av X antall motstander i paralell som er seriekobblet med x antall andre parallel kobblinger.

 

Det brukeren først skal gjøre er å skrive inn verdiene for motstandene i den første paralell kobblingen, brukeren skal kunne skrive inn så mange motstander han ønsker for å så skrive 0 for å gå videre til neste paralell kobbling. Han skal kunne lage så mange serier med paralell kobblinger han vil. Når han er ferdig med å skrive inn alle verider skal han avslutte ved å taste inn et negativt tall..

 

Har å gjøre oppgaven selv men har endt opp med alt for mye kode som ikke fungerer etter ønske..

 

noen som har forslag til hvordan jeg skal gå fram?

Videoannonse
Annonse
Skrevet

Beste tipset må vel være å dele opp problemet i flest mulig underproblem.

 

En parallellkobling med 3 motstander R1,R2,R3 f.eks kan jo ses på som et rekursivt kall der en først regner ut den tilsvarende R1||R2 og så beregner denne i parallell med R3.

 

En seriekobling av 3 motstander kan også ses på som en seriekobling av 2 motstander, deretter i serie med den siste motstanden.

Skrevet (endret)

Mener det enkleste vil være å dele opp slik at man regner ut hver parallell krets for så å sette disse ekvivalentene i serie til slutt.

For å regne ut motstandene i parallell:

Req = 1/(1/R1 + 1/R2 + 1/R3...)

Så gjør du abre det for alle parallell delkretsene og summerer sammen disse til slutt

Endret av _Viper_
Skrevet (endret)

Hmm, Problemet er ikke å regne ut greiene egentlig, (går første år på elektronikk ingeniør)

Men å sette opp programmet slik at jeg slipper å bruke sinnsykt med variabler.. Er det en måte å sette opp programmet slik at vi kan bruke minst mulig variabler?

 

Oppgaven ser slik ut: Oppgave 1 – Bruk av løkkestrukturer - beregning av motstandsnettverk

Vi ønsker et program som beregner totalmotstanden i et motstandsnettverk som består av en seriekopling av parallellkoplete motstander, jf. figur 1. Antall motstander i parallellkoplingene og antall parallellkoplinger er ikke kjent ved oppstart av programmet.

 

Programmet skal virke på følgende måte:

 

En motstandsverdi leses inn om gangen. Beregninger utføres etter hvert slik at motstandsverdiene ikke trenger å lagres.

 

Når innlest motstandsverdi = 0 betyr det at det er slutt på en parallell kopling.

 

Dersom innlest verdi er < 0 betyr det at det er slutt på nettverket. (PS: Programmet skal kunne avsluttes ved sette R < 0 eller ved først å sette R = 0 og deretter R < 0.)

Tips: Det er enklest å regne med konduktanser i parallellkoplingene og resistanser i seriekoplingene.

Kall programmet oo2_1.

Endret av jegerenfisk
Skrevet

Er vel ikke så veldig vanskelig

Lag en int array der du plasserer alle tallene brukeren legger inn, så når brukeren skriver inn en 0 bruker du formelen jeg skrev over for å regne ut den parallel kretsen og legger denne verdien i en variabel(la oss si ekv_res). Så fortsetter du slik og for hver 0 regner ut ekvivalent motstanden og plusser dette på ekv_res. Så til slutt printer du ut ekv_res

Skrevet (endret)

Grem det med array, så ikke siste posten hans om at regningen skal gjøres fortløpende

 

edit: Fant ut at jeg fikk prøve å gjøre det da, så tror dette skal bli rett(skrevet i python):

 

 

ekv_res = 0
par_res = 0
while (True):
res = input("Type in resistance: ")
if (res == 0):
	ekv_res = ekv_res + (1.0 / par_res)
	par_res = 0
elif (res < 0):
	if not (par_res == 0):
		ekv_res = ekv_res + (1.0 / par_res)
	break
else:
	par_res = par_res + (1.0 / res)
print ekv_res

 

 

edit2: Data_jepp, man kan vel ha dynamiske lister. I java heter det ArrayList, i c++ tror jeg det heter vector hvis jeg ikke tar helt feil

Endret av _Viper_
Skrevet

Nå kan jeg ikke c++, men fra hva jeg har lest er vector det samme som arraylist i java, å da trenger man ikke å kopiere over innholdet, vectoren utvider seg av seg selv

Skrevet
Mener det enkleste vil være å dele opp slik at man regner ut hver parallell krets for så å sette disse ekvivalentene i serie til slutt.

For å regne ut motstandene i parallell:

Req = 1/(1/R1 + 1/R2 + 1/R3...)

Så gjør du abre det for alle parallell delkretsene og summerer sammen disse til slutt

 

Den riktige regnemåten for IC og ID er vel denne:

IC = (UA-UC)/R1 + (UD-UC)/R5 + (UB-UC)/R2;

ID = (UA-UD)/R1 + (UC-UD)/R5 + (UB-UD)/R2;

Skrevet (endret)
Mener det enkleste vil være å dele opp slik at man regner ut hver parallell krets for så å sette disse ekvivalentene i serie til slutt.

For å regne ut motstandene i parallell:

Req = 1/(1/R1 + 1/R2 + 1/R3...)

Så gjør du abre det for alle parallell delkretsene og summerer sammen disse til slutt

 

Den riktige regnemåten for IC og ID er vel denne:

IC = (UA-UC)/R1 + (UD-UC)/R5 + (UB-UC)/R2;

ID = (UA-UD)/R1 + (UC-UD)/R5 + (UB-UD)/R2;

 

 

Hva er IC og ID?

 

edit: og UA, UB...UD?

Endret av _Viper_
Skrevet

Vectorer er vel strengt tatt ikke det samme som en array, en array i C++ er:

int *number = new int[20];

Hvor da number blir pekeren til denne arrayen vår. =)

Vectorer bruker man hvis man trenger nettopp dynamisk størrelse, men igjen så er arrayer raskere enn vectorer.

Skrevet
Vectorer er vel strengt tatt ikke det samme som en array, en array i C++ er:

int *number = new int[20];

Hvor da number blir pekeren til denne arrayen vår. =)

Vectorer bruker man hvis man trenger nettopp dynamisk størrelse, men igjen så er arrayer raskere enn vectorer.

 

true, jeg vil tro objektet vector inneholder en array, slik er det i java i alle fall

Skrevet (endret)
(snip)

true, jeg vil tro objektet vector inneholder en array, slik er det i java i alle fall

 

Stemmer veldig bra det.

 

edit: det med at vector inneholder en array stemmer

Endret av Giddion
Skrevet

Begynner å gi litt opp.. hver gang jeg tror jeg har en god plan for oppgaven så blir alt rot.. oppgaven skal inn i morgen. Noen som hadde giddet å skrive koden for meg?

Skrevet (endret)
Begynner å gi litt opp.. hver gang jeg tror jeg har en god plan for oppgaven så blir alt rot.. oppgaven skal inn i morgen. Noen som hadde giddet å skrive koden for meg?

 

Har du sett på koden jeg skrev da? Skulle vel være bare å skrive den om til c++...

Endret av _Viper_
Skrevet
#include <iostream>
using namespace std; 
int main()
{
float totalR = 0.0; 
float input = 0.0; 
float parR = 0.0; 
cout << "Input?\n"; 
while(1)
{
	cin >> input; 
	if (input > 0.0)
	{
		parR = parR + (1/input);  
	}
	if (input ==  0.0)
	{
		totalR = totalR + (1 / parR); 
		parR = 0.0; 
	}
	if (input < 0.0)
	{
totalR = totalR + (1 / parR); 
		break; 
	}
}
cout << "Totalmotstand: " << totalR << "\n"; 
system("pause"); 
return 0; 
}

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...