Samo stworzenie programu na iloczyn kolumny z tabeli samo w sobie nie jest trudnym problemem. Wszystko zmienia się w momencie gdy iloczyn ma być tylko liczony gdy w danej kolumnie znajdują się tylko elementy ai>1,3. Jak podejść do takiego zdania ? Niestety moje nieudolne próby zakończone były albo brakiem jakichkolwiek wypisań, bądź też masakrycznych błędów. Czy byłby ktoś w stanie wyjaśnić mi jak i kiedy coś takiego powinno być sprawdzane ?
W danej kolumnie, czy w całej macierzy muszą być większe od 1.3 ? Poza tym wypadałoby pokazać jakiś kod, coś co już próbowałeś samemu zrobić (choćby było złe).
Zadeklarowałem tylko tablice, a później napisałem dwa fory, by pierwszy przechodził od kolumny do kolumny, a drugi mnożył. Ale jak widać nie działało to zbyt dobrze.
– Dodane 06.12.2011 (Wt) 21:18 –
Jak jest w kolumnie mniejsza liczba choć jedna od 1.3 to ma nie wykonywać iloczynu
Pokażesz ten kod, czy nie (już dawno bym Ci to poprawił) ? Poza tym zdajesz sobie sprawę z tego, że macierz może mieć dowolną liczbę kolumn? Skąd mam/y wiedzieć, w której kolumnie wartości mają być większe od 1.3? Poza tym, czy ten warunek tyczy się kolumny tylko jednej macierzy, czy każdej z tych dwóch macierzy? Opis tego co musisz zrobić jest nieprecyzyjny.
No tak, przepraszam, jak człowiek nie pamięta co robi to tak jest. Oto całe polecenie: Napisać program dla obliczenia iloczynów elementów każdej kolumny tablicy A[m][n] dla których ai>1,3. Przepraszam za pomyłkę
Dla mnie to polecenie wciąż niestety nie jest zrozumiałe. Załóżmy mamy taką macierz:
1 2 3
4 5 6
W wyniku powinienem dostać:
-
liczbę, czyli 2*5*3*6 = 180
-
wektor, czyli [2*5, 3*6] = [10, 18]
-
jeszcze coś innego? A jeśli coś innego, to dlaczego?
Iloczyn 1 Kolumny nie jest liczony bo jeden z elementów jest mniejszy od 1,3
Iloczyn 2 Kolumny = 10
Iloczyn 3 Kolumny - 18
I tutaj chodzi o tablicę 2 wymiarową a nie macierz
To macierz nie może być 2x2 ?
No i co za problem dodać jeszcze jednego ifa sprawdzającego, czy jakiś element tablicy jest mniejszy od 1.3 ?
No i tego właśnie nie wiem, jak zrobić by sprawdzał każdy element kolumny przed iloczynem
no w pętli for musisz jeszcze zagnieździć if’a sprawdzającego czy dany element tablicy (kolumny, konkretniej) jest mniejszy od 1.3. Jeśli jest, to nie przerwij mnożenie i wydrukuj na ekranie FAIL, a jeśli wszystkie są większe, kontynuuj mnożenie.
Napisz, to sprawdzimy Bo jak na razie, to w ogóle kodu nie zamieściłeś!
A po co mam zamieszczać skoro chyba każdy potrafi zadeklarować tabelę ?
do usranej śmierci tak można dyskutować. skoro Ty nawet nie zrobiłeś tego mnożenia, to o czym tu mowa? spróbuj coś od siebie dać, to będziemy poprawiać.
Gdybym potrafił, zrobiłbym
using System;
using System.Collections.Generic;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
double[,] matrix = {
{2,1,4,5},
{4,5,6,1.4},
{2.3,2,1,6}
};
foreach (double d in Multiply(matrix))
Console.WriteLine(d);
}
static double[] Multiply(double[,] matrix)
{
List result = new List();
for (int i = 0; i < matrix.GetLength(1); i++)
{
double value = 1;
bool add = true;
for (int j = 0; j < matrix.GetLength(0); j++)
{
if (matrix[j, i] > 1.3)
value *= matrix[j, i];
else
{
add = false;
break;
}
}
if (add)
result.Add(value);
}
return result.ToArray();
}
}
}
a prościej się jakoś nie da ? Bo niestety nie wiem nawet jak ten program działa. Tym bardziej nie widzę żadnego efektu działania programu.
Ale wielkie dzięki ! Już mam jakąś podstawę do rozważań
– Dodane 07.12.2011 (Śr) 16:42 –
Ma ktoś pomysł na prostsze rozwiązanie ?
– Dodane 07.12.2011 (Śr) 18:27 –
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
double[,] matrix = {
{2,1,4,5},
{4,5,6,1.4},
{2.3,2,1,6}
};
int i, j, wiersze, kolumny;
int suma = 1;
for (i = 0; i < wiersze; i++)
{
for (j = 0; j < kolumny; j++)
suma += matrix[i][j];
}
}
}
}
Oto moja wersja programu, jak to sensownie zmienić by działało ?
Teraz to wrzuciłeś kod Szkoda, że musiałem się dwukrotnie o to prosić. Czy mógłbyś napisać, co jest dla Ciebie niezrozumiałe w kodzie, który wrzuciłem (być może da się napisać prościej, ale ja prościej nie potrafię) i co masz na myśli mówiąc, że program nie daje żadnego efektu?
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
double[,] matrix = {
{2,1,4,5},
{4,5,6,1.4},
{2.3,2,1,6}
};
int i, j, wiersze, kolumny;
int iloczyn = 1;
for (i = 0; i < wiersze; i++)
{
for (j = 0; j < kolumny; j++)
{
if(matrix[i][j]>1.3)
iloczyn *= matrix[i][j];
else
iloczyn = 0.0;
}
if(iloczyn > 0.0) Console.write(iloczyn);
}
}
}
}
pisałem z palca więc może być literówka
Kod jest niepoprawny.
-
Nie inicjalizujesz zmiennych.
-
int iloczyn = 1; znajduje się w niewłaściwym miejscu.
-
Zewnętrzna pętla powinna iść po kolumnach, a nie po wierszach.
-
Zamiast używać zmiennych wiersze/kolumny można użyć świetnej metody GetLength.
@matzu to nie jest mój kod, ja w życiu nie podpisał bym się pod tak napisanym kodem, jedyne to czego się otwarcie przyznaję to ten fragment:
if(matrix[i][j]>1.3)
iloczyn *= matrix[i][j];
else
iloczyn = 0.0;
}
if(iloczyn > 0.0) Console.write(iloczyn);
czyli zarys pomysłu jak to zrobić aby użytkownik @IamNotHouse zrozumiał, ponieważ to jest jego kod plus ten fragment, który pokazuje warunek sprawdzający liczbę w danej komórce, wstawia zero w iloczyn jeśli jest mniejsza od 1.3. Jest rozwiązanie mało praktyczne ale w minimalny sposób ingeruje w to co użytkownik już potrafi. I jeśli nie zrozumie jak ten program działa to ja nie wiem jak mu pomóc.
Natomiast wady tak napisanego kodu - mogę twoją listę rozszerzyć spokojnie o kolejne punkty. Ale czy jest sens?
Ale właśnie chodzi o to, że ten program nie działa. Co autorowi tematu da to, że dopisałeś do niedziałającego programu parę linijek? Co ma z tego zrozumieć? Jeśli chciałeś pokazać tylko i wyłącznie warunek, to ja już to zrobiłem kilka postów temu