Zamiana pętli na for

EU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
0
Kopiuj
do
{
    Console.WriteLine("Podaj a");
    a = Convert.ToInt32(Console.ReadLine());
    b = a * a;
    Console.WriteLine(b);           
}
while (a != 0);
Console.ReadLine();

na ify się da, na while się da, a czy na fora, da się zamienić pętle? a jeśli tak to jak? albo jeszcze jakieś inne możliwe pętle?

kzkzg
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 935
1
Kopiuj
for (;a!=0;)
  • Rejestracja: dni
  • Ostatnio: dni
0

Niestety ale to nie jest odpowiednik. Jaką wartość ma a na początku? W wielu przypadkach zadziała, a w niektórych nawet nie wejdzie do pętli.

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
0

do... while często nie da się zamienić na for i tak jest również w tym wypadku. Domyślnie taki int jest zerem, a skoro warunkiem jest a != 0 to taka pętla nawet się nie wykona, ponieważ for najpierw sprawdza warunek. W przypadku do...while ma się pewność, że wykona się co najmniej raz więc można np. zmusić użytkownika żeby wpisał coś do tego inta, co nie będzie zerem.

Jaką wartość ma a na początku?

Jeżeli nie ustawimy inaczej to będzie to zero. No chyba, że czymś zainicjalizujemy np. MinValue. Wtedy warunek zostanie spełniony i pętla for się wykona tylko takie podejście jest brzydkie. Od biedy można coś takiego zrobić:

Kopiuj
int a = int.MinValue;
for (; a != 0; int.TryParse(Console.ReadLine(), out a))
{
    //  Operacje
}

Tylko czy to jest ładne? Tutaj naprawdę do...while najbardziej się nadaje.

Convert.ToInt32

To również jest nieprawidłowe podejście. Wpisanie przez użytkownika do formatki wartości innej niż liczba nie jest sytuacją wyjątkową, a ta metoda wywali wyjątek jeżeli user się pomyli. Lepiej skorzystać z int.TryParse i była o tym mowa już chyba pierdyliard razy. :-) Patrz sekcja 'Uwagi': https://msdn.microsoft.com/pl-pl/library/sf1aw27b(v=vs.110).aspx

koszalek-opalek
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
for(a = 1; a != 0;)
{
    Console.WriteLine("Podaj a");
    a = Convert.ToInt32(Console.ReadLine());
    b = a * a;
    Console.WriteLine(b);           
}
Console.ReadLine();

Tylko po co???

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
2

Zawsze się da zamienić while na for i odwrotnie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.