• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ciąg Fibonacciego za pomocą pętli do-while oraz while

Object Storage Arubacloud
0 głosów
2,083 wizyt
pytanie zadane 30 października 2020 w C i C++ przez forvev Początkujący (390 p.)

Próbuje napisać program liczący podany wyraz ciągu Fibonacciego, ale brakuje mi pomysłu na rozpoczęcie go. Instrukcja do-while musi służyć do wczytania poprawnej wartości n>2 a pętla WHILE  do wyznaczenia n-tego wyrazu ciągu. 

 

#include <stdio.h>

int main()
{
	int n;
	int fib[100];
	fib[0]=1;
	fib[1]=1;
	
	printf("Podaj ktora liczbe ciagu Fibonacciego chcesz wyznaczyc:\n");
	scanf("%n", &n);
	do{
	
	
	}while(n>2);
	return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 30 października 2020 przez Michałełe Nałogowiec (25,600 p.)
Wzór na i-ty wyraz ciągu fibonacciego:

fib[i] = fib[i-2] + fib[i-1]

Stworzyłeś już tablicę, także może licz sobie ilość kroków, i w każdej iteracji przypisuj wartość to elementu tablicy
0 głosów
odpowiedź 30 października 2020 przez tangarr Mędrzec (154,860 p.)

W pierwszej pętli upewniasz się, że wczytujesz prawidłowe dane.
W drugiej pętli wykonujesz obliczenia zgodnie ze wzorem na ciąg Fibonacciego.
 

Przykład wykorzystania dwóch pętli w ten sposób (wraz z kontrolą wczytywania typu danych)
 

#include <stdio.h>

int main()
{
    int x=0;
    do {
        printf("podaj liczbe dodatnia: ");
        if (scanf("%d", &x) == 0) { // jeżeli nie udało się pobrać danych do zmiennej
            scanf("%*[^\n]"); // kasujemy całą linię z bufora
        }
        
    } while (x <= 0);
    
    while (x > 0) {
        printf("%d ", x);
        x--;
    }
    return 0;
}

 

komentarz 30 października 2020 przez forvev Początkujący (390 p.)

Przyjmijmy, że wpisuję liczbę 10 jako poszukiwaną. Podstawią ją do pętli while i właśnie jak zrobić, aby wyliczyło szukaną wartość mając podane fib[0]=1, fib[1]=1? 

#include <stdio.h>


int i;
int fib[100];

int main()
{

	fib[0]=1;
	fib[1]=1;
	

	do{
		printf("Podaj ktora liczbe ciagu Fibonacciego chcesz wyznaczyc:\n");
	    scanf("%d", &i);
	
	}while(i<2);
	
	
	while(i>2)
	{
		fib[i]=fib[i-2]+fib[i-1];
		printf("%d\n", i);
		i--;	
	}
	
	
}

 

komentarz 30 października 2020 przez tangarr Mędrzec (154,860 p.)
Potrzebujesz jeszcze jednej zmiennej.
W jednej zmiennej trzymasz indeks dla którego chcesz obliczyć wyraz ciągu.
W drugiej zmiennej trzymasz indeks aktualnie obliczanego wyrazu.
komentarz 30 października 2020 przez forvev Początkujący (390 p.)

Ok, mam coś takiego. Problem polega tutaj, że idę od góry. Tzn. gdy wpisze 10, to wylicza mi tą dyszkę z sumy 9 i 8 których nie mam podanych. Jest jakiś sposób w tej pętli while, aby zacząć od początku, czyli idąc wg. fib[0]=1 oraz fib[1]=1? Wiem, że idealnie da się to zrobić w pętli for, ale musze zrobić to w while.

 

#include <stdio.h>

 
int main()
{
	int i,x;
	int fib[1000];
	fib[0]=1;
	fib[1]=1;
	int suma=0;
	
	scanf("%d",&i);
    	while(i>2)
	{
		fib[i]=fib[x-2]+fib[x-1];
		suma=suma+fib[i];
		x--;	
	}
	printf("suma:%d",suma);

}

 

komentarz 30 października 2020 przez tangarr Mędrzec (154,860 p.)
Więc idź od dołu.

Na początku masz obliczone dwa pierwsze wyrazy ciągu. Obliczaj kolejne, dopóki nie obliczysz tego, który potrzebujesz.
komentarz 30 października 2020 przez forvev Początkujący (390 p.)
Czyli jak chce setną liczbę to musze wypisać wartości dla 99 wcześniejszych? Nie ma jakiegoś sposobu, aby zawrzeć to w pętli?
komentarz 31 października 2020 przez forvev Początkujący (390 p.)

Ok, udało się. Tylko teraz jak ten wynik "wyrzucić" poza pętle? Gdyż prawidłowy wynik wyświetla mi się wewnątrz pętli, a gdy wypisuje go poza jest całkiem co innego.

#include <stdio.h>

 
int main()
{
	int i,n;
	int fib[1000];
	fib[0]=1;
	fib[1]=1;

	int suma=0;
	
	
	scanf("%d",&n);
	//fib[i]=fib[i-2]+fib[i-1];
	i=2;
    while( i<n)
	{
		fib[i]=fib[i-2]+fib[i-1];
		printf("wyraz nr:%d rowna sie %d\n",i+1,fib[i]);
		i++;
			
	}
	printf("%d\n",fib[i]);	

}

 

komentarz 31 października 2020 przez tangarr Mędrzec (154,860 p.)

Użyj indeksu i-1 lub n-1

komentarz 31 października 2020 przez mokrowski Mędrzec (155,460 p.)
A po co tablica kiedy trzeba zapamiętać tylko wartości fib[n-2] i fib[n-1]? Tu wystarczą zmienne.
komentarz 15 listopada 2020 przez nikosz Nowicjusz (100 p.)

czy takie rozwiazanie jest ok? dodam ze jestem początkującym i rozwiazanie jest w pythonie.

fib = int(input("wprowadz dane: "))
fn = 1
x = 1
while fn <= fib:
    print(fn)
    fn = fn + x
    x = fn - x
    continue
komentarz 15 listopada 2020 przez tangarr Mędrzec (154,860 p.)
Przetestuj a się przekonasz, że to nie działa.

Po pierwsze chcesz obliczyć n-ty wyraz ciągu. A twój kod pokazuje wyrazy ciągu od drugiego aż do znalezienia wyrazu większego od wczytanej liczby.

Musisz dodać licznik mówiący którą liczbę ciągu liczysz. I na jego podstawie decydować kiedy zakończyć algorytm.

Aha i ta instrukcja continue jest zbędna.

Podobne pytania

0 głosów
3 odpowiedzi 899 wizyt
pytanie zadane 13 kwietnia 2017 w C i C++ przez robert1506 Początkujący (280 p.)
0 głosów
4 odpowiedzi 1,402 wizyt
pytanie zadane 6 czerwca 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 164 wizyt
pytanie zadane 20 maja 2023 w C i C++ przez Igaiga Nowicjusz (120 p.)

92,576 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...