Jag har tre textboxar där jag ska fylla i tre tal. Sedan vill jag att dessa tal ska skrivas ut med största talet först. Hej. Tack fredda ! Inte i C# men strukturen blir densamma: Trash, fredde, Martin, med a,b,c menar jag att hur ordningen på talen ser ut, vidare så är din kompakta lösning helt riktig, men den är inte lika snabb som min. Din kör alltid tre villkor medan min varierar mellan att kolla av två till tre villkor och det gör att min blir snabbare i längden. Hej. fredde, Hej. fredda, Hej. fredda, Hej.. Men det går väl inte att använda sig av en inputbox i C# ? Hej Johan, Du får nog förklara mer exakt vad du vill göra. Så som jag tolkar det utav inläggen här så gällde problemet att på något sätt mata in 10 tal via en textbox. Frågan är ju hur du vill mata in dem? 10 tal i en rad avskiljda med mellanslag alltså: 13 14 16 osv. eller om du vill mata in ett tal i taget och via en knapp eller Enter-tryckning föra in talet i din array. Som jag skrev ovan så kan du ju använda samma kod i en tangentlyssnare som lyssnare efter enter. För att göra en sådan kan du ju göra en lyssnare till Textboxens keypress, keyup eller vad som passar dig. För att kolla om det är enter som har tryckts kan du ju använda dig av följande kod om du lyssnar på KeyPressed: FredrikS, Ja, och den lösningen har du ju fått nu.. i två olika varianter, en där du klickar med en knapp och en där du trycker Enter. Är det något i de lösningarna som du inte förstår? Du får ju jobba lite själv oxå ;) MAn kan ju inte ge bort en "rätt" lösning med en gång men du har fått allt du behöver för att lösa din uppgift tror jag... Tack för att ni hjälpte till !Ordna tre inlästa tal i växande ordning
Typ:
8
6
2
Först tänkte jag att jag skulle köra if satser men då blir det väl en hel del. Är det inte det enklaste att lägga de inmatade talen i en array. Dvs att man kollar det första talet om det är större än det andra och om det är det så läggs det talet först osv.
Skulle vilja ha lite olika lösningar på hur man kan lösa det ? Jag får inte riktigt rätt på arrayen.Sv: Ordna tre inlästa tal i växande ordning
Testa detta.
<code>
int[] a = {8, 2, 6};
Array.Sort(a);
for (int i = a.GetUpperBound(0); i >= 0; i--)
{
MessageBox.Show(a[i].ToString());
}
</code>
//freddaSv: Ordna tre inlästa tal i växande ordning
Om jag skulle vilja lösa det med if satser ?Sv: Ordna tre inlästa tal i växande ordning
If a > b and a > c then
' a störst
if b > c Then
a,b,c
else
a,c,b
end if
Elseif b > c then
' b störst
if c > a then
b,c,a
else
b,a,c
endif
Else
' c störst
if b > a
c, b, a
else
c, a,b
end if
endifSv: Ordna tre inlästa tal i växande ordning
if b > c Then
a,b,c 'vad menar du med detta ?
Det skall räcka med tre jämförelser och omflyttningar (om jag tänkt rätt).
If a>b byt a och b
If b>c byt b och c
If a>b byt a och b
eller ???Sv: Ordna tre inlästa tal i växande ordning
När jag ändå ställer en fråga här så kan jag ju passa på att ställa en till.
Jag har alltid stött på ett och samma problem många gånger och det är när jag vill lagra ett antal tal i en array genom enbart en textbox. Hur gör jag ?
Har börjat lite men får inte riktigt rätt på det ?
int medel;
int tal=0;
int sum=0;
int [] minarray;
for(int i=0; i<=10; i++)
{
tal=Convert.ToInt32(txttal.Text);
minarray[i]=tal;
sum+=tal;
txttal.Text="";
}
medel=sum/10;
lblut.Text=medel.ToString();Sv: Ordna tre inlästa tal i växande ordning
Sv: Ordna tre inlästa tal i växande ordning
Förstår inte riktigt hur du menar.
Om du bara vill använda en Textbox med ett värde i blir det ju lite enklare.
Multiplikation...
Annars kan du göra såhär: (Använder 3 textboxar)
<code>
int[] a = new int[3];
int tal = 0;
int sum = 0;
int i = 0;
float medel = 0.0f;
foreach (Control c in this.Controls)
{
if (c is TextBox)
{
tal = Convert.ToInt32(((TextBox)c).Text);
sum += tal;
a[i] = tal;
((TextBox)c).Text = string.Empty;
i++;
}
}
medel = (sum / 3);
MessageBox.Show(medel.ToString());
</code>
//freddaSv: Ordna tre inlästa tal i växande ordning
Om jag nu enbart vill använda mig av en textbox där jag skriver in tio tal och lagrar dessa i en array. Detta kanske låter enkelt för dig men din lösning blev lite väl krånglig.
Så här ser koden ut:
<code>
int medel;
int tal=0;
int sum=0;
int [] minarray=new int [10];
for(int i=0; i<=10; )
{
tal=Convert.ToInt32(txttal.Text);
sum+=tal;
minarray[i]=tal;
txttal.Text="";
i++;
}
medel=(sum/10);
lblut.Text=medel.ToString();
</code>
Problemet är att loopen kommer gå runt hela tiden med samma inmatade tal.
Tackar för all hjälp !Sv: Ordna tre inlästa tal i växande ordning
Hmm.
Är detta korrekt uppfattat?
Du vill skriva flera tal i EN (1) textbox och sedan lägga dessa i en array??
i så fall, gör såhär:
Separerade med en blanksteg...
<code>
int tal = 0;
int sum = 0;
int i = 0;
string[] str = textBox1.Text.Split(" ".ToCharArray());
int count = str.GetUpperBound(0);
int[] a = new int[(count + 1)];
float medel = 0.0f;
foreach (string v in str)
{
tal = Convert.ToInt32(v);
sum += tal;
a[i] = tal;
i++;
}
medel = (sum / (count + 1));
textBox1.Text = string.Empty;
MessageBox.Show(medel.ToString());
</code>
//freddaSv: Ordna tre inlästa tal i växande ordning
Ditt exempel funkade inte. Hursomhelst så känns koden lite väl overkill för min del. Skulle du kunna utveckla mitt exempel så att det gör samma sak.
Hoppas du inte bli ond på mig nu.Sv: Ordna tre inlästa tal i växande ordning
Det är ingen fara, bara kul...
Hela grejen är att man måste loopa nånting.
Antingen textboxar eller textfragment eller vad som helst.
Jag vet inte riktigt hur du tänk dig. Testa min kod igen och i textbox1 skriv:
t.ex
1 (MELLANSLAG) 23 (MELLANSLAG) 34 (MELLANSLAG) 32
[1 23 34 32]
//freddaSv: Ordna tre inlästa tal i växande ordning
Problemet är att jag vill ju kunna anropa textboxrutan på något sätt. Som du ser i min kod så blir det samma tal hela tiden. Allt annat i koden borde vara rätt. Skulle du inte kunna utgå ifrån min kod ?
Det jag vill göra är att jag skriver in ett tal i en textbox. Trycker på knappen. Första talet lagras i första positionen i arrayen. Textboxrutan töms för att sedan kunna lagra in det andra talet osv tills alla tio tal är inmatade. Efter dessa inmatingar redovisas medeltalet av de tio inmatade talen. Hoppas du har förstått hur jag menar.
<code>
int medel;
int tal=0;
int sum=0;
int [] minarray=new int [10];
for(int i=0; i<9; i++)
{
tal=Convert.ToInt32(txttal.Text);
sum+=tal;
minarray[i]=tal;
txttal.Text="";
}
medel=(sum/10);
lblut.Text=medel.ToString();</code>
Jag har precis börjat med C# kursen. Egentligen borde man sitta och träna på att skriva klasser istället algoritmkonstruktioner.
Mvh
// MartinSv: Ordna tre inlästa tal i växande ordning
Aha.. Nu förstår jag...
Du får försöka fånga ett enterslag och i den händelsen ta hand om och processa ditt värde.
Annars är ju en variant nån slags inputbox, den stoppar ju upp koden och väntar på ett svar från dig.
Hör av dig om du inte löser det.
//freddaSv: Ordna tre inlästa tal i växande ordning
Jag vill använda mig av en vanlig textbox till en början.
Som sagt, jag får inte rätt på det.Sv: Ordna tre inlästa tal i växande ordning
Om jag har fattat dig rätt så borde detta funka för dig:
Lägg till en knapp (cmdAdd) eller lägg in koden under en check för att kolla när man trycker enter.
private int pos=-1;
private int[] minarray=new int[10];
private double sum=0;
private double medel=0;
private void cmdAdd_Click(object sender, System.EventArgs e)
{
if(pos>=minarray.Length)
{
MessageBox.Show("Inga fler tal");
}
else
{
pos++;
int tal=Convert.ToInt32(txttal.Text);
sum+=tal;
minarray[pos]=tal;
txttal.Text="";
medel=sum/(pos+1);
MessageBox.Show(medel.ToString());
}
}Sv: Ordna tre inlästa tal i växande ordning
Tanken var att man skall kunna mata in alla tio tal först i en textbox, sedan skrivs medeltalet av de tio inmatade talen ut.Sv: Ordna tre inlästa tal i växande ordning
if(e.KeyChar==13)
{
e.Handled=true;
//...här lägger du in din kod över vad som skall hända när man tryckt enter. Förslagvis ett metodanrop till en modifierad metod som jag gav i förra svaret.
}Sv: Ordna tre inlästa tal i växande ordning
>>Tanken var att man skall kunna mata in alla tio tal först i en textbox, sedan skrivs medeltalet av de tio inmatade talen ut.
Detta är exakt vad som händer om man kör koden i mitt inlägg "2003-02-02 13:29:15"
Lägg in talen separerade med ett blanksteg i textbox1 och kör koden.
//freddaSv: Ordna tre inlästa tal i växande ordning
Talen skall icke läggas in separerade med ett blanksteg utan de skall läggas in ett åt gången i arrayen.Sv: Ordna tre inlästa tal i växande ordning
Sv: Ordna tre inlästa tal i växande ordning
Med lite klass variabler så löste det sig.
<code>
int pos=-1;
int[] minarray=new int[10];
double sum=0;
double medel=0;
private void cmdlagra_Click(object sender, System.EventArgs e)
{
pos++;
int tal=Convert.ToInt32(txttal.Text);
sum+=tal;
minarray[pos]=tal;
txttal.Text="";
if(pos>=(minarray.Length-1))
{
medel=(sum/10);
MessageBox.Show(medel.ToString());
Close();
}
}
</code>
// Martin