Witajcie, mam pierwsze pewnie elementarne pytanie ale w jaki sposób mogę przekazać ciąg cyfr np "123456" do tablicy żeby otrzymać 1, 2, 3, 4, 5, 6? a potem jak mam się odnosić do poszczególnych jej elementów nazwatablicy[0]?
Przekazanie ciągu cyfr do tablicy
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
string s = "123456" to już jest tablica, możesz się odwoływać przez s[0] itd.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 35
dziękuje wszystkim za odpowiedź jednak muszę wykonać pewne operacje na elementach tablicy np.
mam ciąg cyfr o którym pisałem wcześniej (123456) który chce umieścić w tablicy a żeby później przemnożyć go z innym ciągiem znaków (237045) a potem jeszcze zsumować wyniki mnożeń w taki sposób:
1, 2, 3, 4, 5, 6 // te będą podawane przez użytkownika
237045 // a te stałe
(t[0]*2) + (t[1]*3) + (t[2]*7) + (t[3]*0) + (t[4]*4) + (t[5]*5) = wynik;
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
d4ng napisał(a):
mam ciąg cyfr o którym pisałem wcześniej (123456) który chce umieścić w tablicy a żeby później przemnożyć go z innym ciągiem znaków (237045)
Nie da się mnożyć cyfr ani ciągów znaków, mnożyć można liczby.
Rozumiem, że chcesz cyfry wpisane przez użytkownika skonwertować na liczby, żeby móc na nich później wykonywać operacje arytmetyczne. Możesz to zrobić np. tak:
int wynik = int.Parse(t[0]) * 2 + int.Parse(t[1]) * 3 + ...
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2518
Jeśli liczba może być bardzo długa to wtedy:
using System.Numerics; // upewnij sie ze masz referencje do System.Numerics.dll
...
BigInteger n = BigInteger.Parse("12312312312313");
- Rejestracja: dni
- Ostatnio: dni
- Postów: 16
Co do wykonywanie obliczeń to możesz je wykonać na elementach tego ciągu. Jeśli chcesz mnożyć odpowiadające sobie wartości to zrób to w pętli np:
for (int i = 0; i < ciag1.Length; i++)
{
ciag3[i] = ciag1[i] * ciag2[i];
}
Gdzie 2 ciągi znasz, a trzeci ciąg to ciąg pusty o długości poprzednich (lub jeśli nie mają tyle samo el. to tego większego)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 35
Ponownie dziękuje za aktywność ;) jednak wciąż mam problem...
string wprowadzonyciagliczb = this.liczby.Text;
char[] tab = wprowadzonyciagliczb.ToCharArray();
int wynik = int.Parse(tab[0]) * 2 + int.Parse(tab[1]) * 3;
Error 1 W najlepiej dopasowanej metodzie przeciążonej metody „int.Parse(string)” występują nieprawidłowe argumenty. C:\Users\Jarek\Desktop\NAUKA ASP NET zad2\Default.aspx.cs 87 25 NAUKA ASP NET zad2
Error 2 Argument 1: nie można wykonać konwersji z char” na string. C:\Users\Jarek\Desktop\NAUKA ASP NET zad2\Default.aspx.cs 87 35 NAUKA ASP NET zad2
- Rejestracja: dni
- Ostatnio: dni
- Postów: 380
</del>
EDIT: najpoprawniejszym rozwiązaniem będzie:
```csharp
string inputText = this.number.Text;
double result = Char.GetNumericValue(inputText[0]) * 2 + Char.GetNumericValue(inputText[1]) * 3
- Rejestracja: dni
- Ostatnio: dni
- Postów: 35
a jednak dalej coś nie tak..
int wynik = (Convert.ToInt32(cyfry[0]) * 6);
this.pokazwynik.Text = wynik.ToString(); // powinno być 8 * 6 = 48 a jest 8 * 6 = 336 dlaczego?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 249
Sprawdź to:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
String cyfry = textBox1.Text;
int wynik = (int.Parse(Convert.ToString(cyfry[0])) * 6 + int.Parse(Convert.ToString(cyfry[1])) * 2);
label1.Text = wynik.ToString();
}
}
}
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2518
int CharToInt(char c)
{
// zakladam ze c jest z przedzialu '0' do '9'
return Convert.ToInt32(c) - Convert.ToInt32('0');
}
...
int result = CharToInt(inputText[0]) * 2 + CharToInt(inputText[1]) * 3;
- Rejestracja: dni
- Ostatnio: dni
static int[] StringToDigits(string s)
{
return s.Select(c => int.Parse(c.ToString()))
.ToArray();
}
I przykładowe wyliczanie sprawdzanie czy PESEL jest poprawny.
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
Console.Write("Podaj pesel: ");
string pesel = Console.ReadLine();
int[] peselDigits = StringToDigits(pesel);
if (Pesel.IsCorrect(peselDigits))
Console.WriteLine("Wprowadzony pesel jest poprawny.");
else
Console.WriteLine("Wprowadzony pesel nie jest poprawny.");
Console.ReadLine();
}
static int[] StringToDigits(string s)
{
return s.Select(c => int.Parse(c.ToString()))
.ToArray();
}
static class Pesel
{
static int[] _scales = StringToDigits("13791379131");
public static bool IsCorrect(int[] digits)
{
if (digits.Length != 11)
return false;
int checksum = digits.Zip(_scales, (a, b) => a * b)
.Sum();
return checksum % 10 == 0;
}
}
}
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
zxxcxzcxzzx napisał(a):
static int[] StringToDigits(string s)
{
return s.Select(c => int.Parse(c.ToString()))
.ToArray();
}
Raczej StringToOneDigitNumbers.
- Rejestracja: dni
- Ostatnio: dni
Nie jestem specem, ale jak już miałbym myśleć nad ostateczną nazwą, to raczej StringToDecimalDigits, bo to najlepiej oddaje rezultat.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
Efektem działania tej metody są liczby, a nie cyfry, więc nic z "ToDigits" na końcu nie będzie prawidłowe.
Wszyscy wiemy, czym się różni cyfra od liczby, prawda?