Witam , kilka tygodni temu zaczalem studia Informatyczne w Niemczech. Jeden z poczatkowych tematow to podstawy programowania w c#, dostalem kilka zadan domowych z ktorymi chcialbym sie z Wami podzielic i w pewnych kwestiach uzyskac od Was odpowiedzi na pytania ( na poczatku pewnie prymitywne , no ale kazdy kiedys zaczyna )
Jedno z tych zadan przedstawie ponizej :
W pewnej drogerii klient kupil w sklepie 4 przedmioty , sprzedawca zapisal ceny na kartce jedna pod druga i zapytal klienta czy ma dodac te ceny czy moze pomnozyc . Klient dla zabawy powiedzial , zeby je pomnozyc . Okazalo sie , ze cena wyszla taka sama jak w przypadku dodawania : 7,11 zl . Pytanie brzmi ile kosztowaly pojedyncze przedmioty .
W ksiazce zwracaja uwage na to , zeby liczyc w groszach oraz zeby nie pisac programu ktory liczy od 1 do 711 groszy bo zajetoby to za duzo czasu .
Prosilbym Was o napisanie odpowiedniego kodu z komentarzami dla begginera :)
Z gory dzieki za pomoc , pozdrawiam .
Ps. Rozwiazanie ze strony z odpowiedziami moge wrzucic na forum dla porownania z waszymi kodami.
Mam gotowy kod ale pokaże go dopiero jak ktoś inny pokaże swój z opisami? Nie lepiej od razu wrzucić kod z odpowiedzi i podjąć próbę jego analizy i przesłać nam tą analizę abyśmy potwierdzili Twój tok rozumowania ?
ok wrzuce go zaraz . nie napisalem tego kodu , to gotowe rozwiazanie z ksiazki . Poki co nie wpadlem nawet na pomysl jak ten kod mialby wygladac i jakie tresci zawierac , zeby rozwiazac problem zadania . Chcialbym zobaczyc inny tok postepowania w tym zadaniu., kogos kto siedzi w tym dluzej i dla kogo takie zadanie to zaden problem :) pozdrawiam
kod z ksiazki
prosilbym ktoregos z Was o krotka analize tego kodu , badz inne pomysly na napisanie tego zadania . Dzieki !
Piękny przykład, Idealny przyklad jak nie pisać kodu :D
3 zagnieżdżone pętle.
Nic nie mówiące zmienne k, l ,j i, ll. Swoją drogą z początku myślałem że ll to 11.
Używanie goto zamiast zwykłego return.
Zmienianie wartości zmiennych wykorzystywanych w ramach warunków pętli FOR
Leszej jakości kod pisałem jak miałem 10 lat :/
Zaciekawił mnie program studiów skoro programowanie zaczyna się od C#.
Najczęściej spotykałem się z takimi programami C, sh => C++, Python => Java, C# itd.
Och. Zobaczyłem kod. Jest okropny. Jaka to książka? Wewnętrzne wydawnictwo, coś jak zeszyty szkoleniowe z przykładami?
Ja bym się tym przykładowym rozwiązaniem w ogóle nie przejmował. Najlepiej zapomnieć i wyrwać stronę by nie siała w mózgowiu spustoszenia.
napisanie gotowego kodu z komentarzami....
A ile placisz? Bo dla mnie to wyglada jak praca
z tego co wyglada to tak bede musial zrobic ;) najlepiej kupic chyba jakas polska ksiazke i rozwiazywac te zadania ze studiow po swojemu...
ten kod jes okropny.
Polską? W sensie tłumaczoną? Nie. Polecam w j. angielskim, tłumaczenia na polski bywają koszmarne.
C# in nutshell jest ciekawa pozycją. Tu na stronie tez jest kursoksiążka dość obszerna (i po polsku jeśli to duża zaleta dla Ciebie) która na początek można polecić.
kolego Fasadin ... Ile place ? moge Ci wyslac 2 czekolady niemieckie i paczke zelkow Haribo skoro tak podchodzisz to sprawy . To nie jest zadne platne zlecenie tylko zapytanie ludzi , ktorzy sie znaja o rade.
kolego Fasadin ... Ile place ? moge Ci wyslac 2 czekolady niemieckie i paczke zelkow Haribo skoro tak podchodzisz to sprawy . To nie jest zadne platne zlecenie tylko zapytanie ludzi , ktorzy sie znaja o rade.
to
Prosilbym Was o napisanie odpowiedniego kodu z komentarzami dla begginera
nie wygląda jak prośba o radę, ale wnioskuję, że kolega nie doczytał tego postu
prosilbym ktoregos z Was o krotka analize tego kodu , badz inne pomysly na napisanie tego zadania . Dzieki !
no tak , moze zle to sformuowalem . W kazdym razie nie chodzilo mi o jakies platne zlecenie tylko wymiane refleksji na temat tego zadania. Pozdrawiam !
W tym rozwiązaniu jest goto......
Kod został napisany w ten sposób, abyś nie mógł go użyć pomimo iż rozwiązuje problem. Sam pisałeś, że w książce zwracają uwagę na to jak nie pisać programu. Musisz znaleźć 4 liczby (a,b,c,d) takie, że abc*d = 7,11 && a+b+c+d = 7,11. Nie jest to aż takie trudne. Zwłaszcza, że ten przykładowy program powinien zwrócić Ci odpowiedni wynik...
Nie trudne? 711 ma 5 dzielników: 1,3,9,79,237. Moja implementacja c# mówi "nie ma takich liczb" które spełniają powyższe warunki jednocześnie. Coś jest nie tak z tym zadaniem. Chciałbym zobaczyć prawidłowe rozwiązanie, bo nie wiem jak się do tego zabrać nie robiąc rzeźni z pętlami for.
Jestem początkujący (1msc) prosze o wyrozumiałość:)
int k = 0; //wspolczynnik dla rozmiaru tablicy dzielnikow
for(int i=1;i<711;i++)
{
if (711 % i == 0)
k++;
}
double[] tabA = new double[k];//tablica dzielnikow (mozliwosci na 4 kartach A,B,C,D)
double[] tabB = new double[k];
double[] tabC = new double[k];
double[] tabD = new double[k];
int roz = 0;
for (int i = 1; i < 711; i++)
{
if (711 % i == 0)
{
tabA[roz] = (double)i;
roz++;
}
}
for (int i = 0; i < k;i++ )
{
tabA[i] = tabA[i] *0.1;
}
foreach (double s in tabA)
Console.WriteLine(s);
Array.Copy(tabA, tabB, tabA.Length);
Array.Copy(tabA, tabC, tabA.Length);
Array.Copy(tabA, tabD, tabA.Length);
for(int i=0;i<k;i++)
{
for(int j=0;j<k;j++)
{
for(int l=0;l<k;l++)
{
for(int m=0;m<k;m++)
{
if (tabA[i] * tabB[j] * tabC[l] * tabD[m] == 7.11 && (tabA[i] + tabB[j] + tabC[l] + tabD[m]) == 7.11)
{
Console.WriteLine("Szukane wartosci to {0}, {1}, {2}, {3}", tabA[i], tabB[j], tabC[l], tabD[m]);
goto lab;
}
}
}
}
}
Console.WriteLine("Nie ma takich liczb");
lab:
Console.ReadLine();
Czy jest możliwe wygenerowanie wszystkich 4 czterocyfrowych kombinacji z jednej tablicy z poziomu klasy Array albo korzystając z jakiegoś innego rozwiązania "wbudowanego"? Można jakoś skrócić powyższy kod? I zadam nurtujące pytanie o możliwość deklaracji tablicy bez podawania rozmiaru, wiem że Array jest klasą abstrakcyjną ale może jest jakiś inny sposób?
niestety w moim stopniu wtajemniczenia w c# jeszcze nie odkrylem takich znakow :) ale dzieki za probe podjecia zadania . dalej nie mam innego pomyslu na ten kod a na forum szkoly autorzy zapewniaja mnie , ze ten kod z ksiazki nalezy do najprostszych... pozdrawiam
@kozanostra_pl, skompilowałeś ten program z obrazka? :)
Wiesz skąd tam było 711.000.000 w ifach?
Nie ma możliwości aby a+b+c+d==abc*d jeżeli są to liczby całkowite i różne od 0.
Możesz próbować używać liczb zmiennoprzecinkowych wtedy a+b+c+d==abc*d może być prawdziwe.
Zrób jedną pętle, sprawdzaj od razu czy suma a, b, c, d =7,11/711 (zależnie od typu zmiennych jakich użyjesz).
Możesz od razu odrzucić przypadki gdzie a/b/c/d < 1,0 (chyba wiesz co się stanie przy mnożeniu 3 zmiennych *0,01/0,99) i gdzie a/b/c/d > 3,56 (jadę pociągiem i nie mogę żadnego PoC ułożyć, ale ufam instynktowi xd jak coś będzie źle jutro poprawię.
Dalej możesz zrobić pętle w petlach ale ilość iteracji będzie wynosić ~256? ch.. wie ale chyba tak :P Spróbujcie coś napisać jutro wieczorem się tym zajmę.
mecze sie nad tym ale nie daje za wygrana :) doszedlem do wniosku , ze liczba 711000000 wziela sie z tego , zeby dzielic i dodawac z liczbami calkowitymi . abcd=7,11
Musimy te 4 ceny pomnozyc przez 10² zeby zniknal nam przecinek. Ale jak to w matematyce , po drugiej stronie rownania tez musimy miec odpowiednia liczbe :
a102 * b102 * c102 * d*102 =
7,11 * 102 *102 *102 *102 = 7,11 * 10^8 = 711000000.
wydaje mi sie ze autorowi zadania chodzilo wlasnie o to