Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Bielik1991

Prosty program - C

Polecane posty

Napisałem sobie taki pomocniczy programik do wiekszego. Ten liczy sume 2 liczb całkowitych, z tym ze te liczby musze byc rozne. gdy np wpisuje "e" to instrukcje w printfach wypisuja mi sie bez przerwy. Nie wiem dlaczego tak sie dzieje. Jestem początkujący i nie bardzo wiem gdzie jest bład. prosze o pilną pomoc

#include <stdio.h>

int main()

{

int liczba1,liczba2,wynik, stan;

printf("podaj liczbe nr1: ");

scanf("%d", &liczba1);

printf("podaj liczbe nr2: ");

scanf("%d", &liczba2);

while (liczba1==liczba2)

{

printf("liczby nie moga byc sobie rowne. sprobuj jeszcze raz:\n");

printf("podaj liczbe nr1: ");

scanf("%d", &liczba1);

printf("podaj liczbe nr2: ");

scanf("%d", &liczba2);

}

while (liczba1 != 1 || liczba2 != 1)

{

printf("\nBlad! Podaj liczby!\n");

printf("podaj liczbe nr1: ");

scanf("%d", &liczba1);

printf("podaj liczbe nr2: ");

scanf("%d", &liczba2);

}

wynik=liczba1+liczba2;

printf("to jest wynik: %d",wynik);

}

Link do komentarza
Udostępnij na innych stronach

Pętla jest niezakończona i cały czas będzie żądać liczb. Zaraz pokombinuję, ale na nic nie licz, bo miałem to ostatnio i jeszcze tego nie przećwiczyłem. W każdym razie warunek musi być, taki, żeby był możliwy do zakończenia, bo w przeciwnym wypadku cały czas te same zmienne są podstawiane i pętla się nie skończy.

Link do komentarza
Udostępnij na innych stronach

Co chcesz osiągnąć dzięki tej drugiej pętli? Bo ja zupełnie nie rozumiem po co ona tam jest. W pierwszej pętli chcesz, by liczby były po wyjściu różne, no i ok, ale w drugiej już chcesz, żeby obydwie liczby po wyjściu były równe 1 i tego nie rozumiem.

e nie jest liczbą całkowitą. A tego nigdzie nie sprawdzasz, więc nie ma się co dziwić, że program wariuje.

Link do komentarza
Udostępnij na innych stronach

#include <stdio.h>

int main()

{

int liczba1,liczba2,wynik;

printf("podaj liczbe nr1: ");

scanf("%d", &liczba1);

printf("podaj liczbe nr2: ");

scanf("%d", &liczba2);

while (liczba1==liczba2)

{

printf("liczby nie moga byc sobie rowne. sprobuj jeszcze raz:\n");

printf("podaj liczbe nr1: ");

scanf("%d", &liczba1);

printf("podaj liczbe nr2: ");

scanf("%d", &liczba2);

}

wynik=liczba1+liczba2;

printf("to jest wynik: %d",wynik);

return 0;

}

-niepotrzebnie zdefiniowałeś stałą stan, bo nie użyłeś jej (kompilator Ci to wyświetla w logu np. VC "unreferenced local variable"

-pętla zbędna

-e nie jest typu int

-thx Sevard :) .

Link do komentarza
Udostępnij na innych stronach

Dzieki za uwagi :wink: W drugim while to chodzilo mi ,żeby mi sprawdzalo czy to "cos" wprowadzone jest liczba. juz doszedlem do tego ze warunek powinien wygladac mniej wiecej tak:

while (scanf("%f", &y) != 1

Zapetlilem to jakos i wszystko mi liczy. Teraz mam problem innej natury. Mianowice chce do mojego programu zalaczyc inny plik. Program liczy miejsca zerowe funkcji metoda siecznych (kod ponizej) i chce zeby w tym drugim pliku znajdowal sie wzor tej funkcji. Po prostu zeby po pierwszym printfie (ZNAJDOWANIE MIEJSCA ZEROWEGO FUNKCJI ? METODA SIECZNYCH\) wyskakiwal wzor tej funkcji, czyli

x^3+x-1.

#include <stdio.h>

#include <math.h>

float funkcja(float);

float funkcja2(float,float);

int main(void)

{

float x, y, x1;

int i=0;

printf("ZNAJDOWANIE MIEJSCA ZEROWEGO FUNKCJI ? METODA SIECZNYCH\n\n");

do {

printf("Podaj liczbe nr1: ");

while (scanf("%f", &x) != 1)

{

printf("To nie jest liczba. Sprobuj jeszcze raz\n");

getchar();

printf("podaj liczbe nr1: ");

}

printf("podaj liczbe nr2: ");

while (scanf("%f", &y) != 1)

{

printf("To nie jest liczba. Sprobuj jeszcze raz.\n");

getchar();

printf("podaj liczbe nr2: ");

}

if(x==y)

printf("liczby sa rowne\n");

}

while(x==y);

while(i++<10000)

{

x=funkcja2(x,y);

}

printf("Wartosc miejsca zerowego to %f\n", funkcja2(x,y));

}

float funkcja(float z)

{

return (z*z*z+z-1);

}

float funkcja2(float p,float k)

{

return(p-(funkcja(p)*(p-k))/(funkcja(p)-funkcja(k)));

}

Link do komentarza
Udostępnij na innych stronach

To proste, do otwarcia pliku używasz funkcji fopen, następnie zaczytujesz linię funkcją fgets, na koniec zamykasz go przez fclose. Przed odczytem powinieneś sobie zrobić bufor na zaczytany tekst. np. char buf[100]. Zawartość wyświetlasz w ten sposób:

printf("%s\n", buf)

Link do komentarza
Udostępnij na innych stronach

Byłbyś tak dobry i po prostu zedytowal ten moj kod i mi to napisal dokladnie jak to ma wygladac? i co ma zawierac ten plik? laborantka mi napisala ze po prostu moze byc tylko wzor tej funkcji. czyli po prostu w tym pliku (przypuscmy funkcja.c) moge napisac x^3+x-1. kompletnie nie wiem jak to zrobic....

Link do komentarza
Udostępnij na innych stronach

To nie ma znaczenia jakie rozszerzenie ma plik. Jeżeli dane w nim są zapisane w postaci tekstu (a tak jest na przykład w plikach źródłowych *.c), to plik otwierasz jako tekstowy. Spróbuj chociaż przepisać ten przykład do swojego programu wpisując zamiast "myfile.txt", "funkcja.c".

Link do komentarza
Udostępnij na innych stronach

Dzieki gus :wink: Zadzialalo. Kod mam w miare, wiec powinno byc ok. Jutro oddaje. Wie ktos moze czemu po do while, ktory sprawdza poprawnosc wprowadzonych danych algorytm konczy swoje dzialanie? W CodeBlocks na windowsie wszystko mi robi elegancko a na unixie i uzywajac gcc program konczy swoje dzialanie na do while. jaka jest tego przyczyna?

#include <stdio.h>

#include <math.h>

#include "wzor.h"

#define P 0.0001 /*dokladnosc porownania z zerem*/

float wartosc(float); /*deklaracja funkcji wartosc, obliczajacej wartosc funkcji*/

int main(void)

{

float x0,x1, x2, f0, f1, f2;

int i=0;

printf("ZNAJDOWANIE MIEJSCA ZEROWEGO FUNKCJI METODA SIECZNYCH\n\n");

printf("Obliczenia zostaną wykonane dla: ");

printf("x^3+x-1");

printf("\nTeraz podaj 2 liczby, ktore pomoga wyznaczyc pierwsza sieczna\n");

do { /*petla sprawdzajaca poprawnosc wprowadzanych danych*/

printf("Podaj liczbe nr1:\n");

while (scanf("%f", &x1) != 1) /*sprawdzanie czy wprowadzony znak jest liczba*/

{

printf("To nie jest liczba. Sprobuj jeszcze raz\n");

getchar();

printf("Podaj liczbe nr1:\n");

}

printf("Podaj liczbe nr2:\n");

while (scanf("%f", &x2) != 1) /*sprawdzanie czy wprowadzony znak jest liczba*/

{

printf("To nie jest liczba. Sprobuj jeszcze raz.\n");

getchar();

printf("Podaj liczbe nr2:\n");

}

if(x1==x2) /*sprawdzanie czy podane liczby sa rowne*/

printf("Liczby nie moga byc rowne. Sprobuj jeszcze raz.\n");

} while(x1==x2); /*koniec petli sprawdzajace poprawnosc danych*/

while(i<100) /*liczba iteracji, dla ktorych zostanie wykonane przyblizanie*/

{

x0=x1-f1*(x1-x2)/(f1-f2); /*obliczanie miejsca zerowego*/

f0=wartosc(x0);

if (fabs(f0)<P) /*warunek-wartosc bezwzgledna z funkcja dla obliczonego miejsca zerowego mniejsza od P*/

{

printf("Przyblizona wartosc miejsca zerowego to %f\n", x0);

break; /*wyjscie z petli (koniec algorytmu)*/

}

x2=x1;

x1=x0;

f2=f1;

f1=f0;

i++; /*zwiekszanie iteracji*/

}

if(fabs(f0)>P)

printf("Wprowadzono zle punkty krancowe. Sprobuj innym razem.");

}

float wartosc(float z) /*oblicza wartosc funkcji*/

{

return (z*z*z+z-1);

}

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...