logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak poprawić kod C do mnożenia środkowego elementu tablicy?

bardzociekawski 26 Mar 2006 20:20 2760 17
REKLAMA
  • #1 2460517
    bardzociekawski
    Uczeń
    Posty: 63
    Chciałbym napisać program wypisujący wszystkie elementy tablicy jednowymiarowej 5-elementowej - z tym że użytkownik podaje 5 liczb całkowitych i 3. element jest mnożony przez 3 i cała tablica jest na koniec taka wyświetlana - możecie mi poprawić poniższy kod bo w nim jest coś źle jeśli idzie o mnożenie środkowego elementu

    //program mnoży środkowy element tablicy przez 3

    #include<conio.h>
    #include<stdio.h>
    int czytaj (int tab[]);
    int mnoz(int tab[]);
    int main()
    {
    int tab[5];
    czytaj(tab);
    printf ("po wymnozeniu srodkowego elementu tablicy przez 3 ta tablica wyglada tak:\n");
    mnoz(tab);
    getch ();
    return 0;
    }


    int czytaj (int tab[])
    {
    int i;
    printf ("podaj 5 liczb calkowitych: \n");
    for(i=0; i<5; i++)
    {scanf("%d", &tab[i]);
    };

    }


    int mnoz(int tab[])
    {
    int i;
    for (i=0; i<5; i++)
    {printf ("%d ", tab[i]);

    tab[2]=8*tab[2];
    }
    return tab[i];
    }


    i jeszcze może nie wiecie jak i co tu zmienić żeby użytkownik mógł także podawać liczby rzeczywiste a nie tylko całkowite - bo jak próbbowałem zmieniać na double i lf to mi program nie działał ?
  • REKLAMA
  • #2 2460615
    grzesiug
    Poziom 12  
    Posty: 65
    Pomógł: 7
    Ocena: 4
    #include<conio.h>
    #include<stdio.h>
    int czytaj (int tab[]);
    int mnoz(int tab[]);
    int main()
    {
    int tab[5];
    czytaj(tab);
    printf ("po wymnozeniu srodkowego elementu tablicy przez 3 ta tablica wyglada tak:\n");
    mnoz(tab);
    getch ();
    return 0;
    }


    int czytaj (int tab[])
    {
    int i;
    printf ("podaj 5 liczb calkowitych: \n");
    for(i=0; i<5; i++)
    {
    scanf("%d", &tab[i]);
    if (i==2) tab[2]=tab[2]*3; Pomnoży po wprowadzniu
    };

    }

    Jeśli chodzi o rzeczywiste to zmień na float tab[5] oraz scanf("%f",&tab[i]);
  • #3 2460789
    marihires
    Poziom 30  
    Posty: 986
    Pomógł: 193
    Ocena: 129
    //poprawiony kod...//
    #include<conio.h>
    #include<stdio.h>
    int czytaj (int tab[]);
    int mnoz(int tab[]);
    int main()
    {
    int tab[5];
    czytaj(tab);
    printf ("po wymnozeniu srodkowego elementu tablicy przez 3 ta tablica wyglada tak:\n");
    mnoz(tab);
    getch ();
    return 0;
    }


    int czytaj (int tab[])
    {
    int i;
    int a;
    printf ("podaj 5 liczb calkowitych: \n");
    for(i=0; i<5; i++)
    {scanf("%d", &tab[i]);
    };
    }


    int mnoz(int tab[])
    {
    int i;
    int a;
    //tutaj mialo byc obliczanie wyrazu srodkowego a nie w petli for//
    tab[2]=3*tab[2];
    for (i=0; i<5; i++)
    {
    printf ("%d ", tab[i]);
    }
    return tab[i];
    }

    //jak bede mial wiecej czasu to zobacze z tym float albo double//
    //pozdrawiam//
  • REKLAMA
  • #4 2460842
    bardzociekawski
    Uczeń
    Posty: 63
    dzieki marihires teraz działa :D zaraz tylko zobacze z tym float

    Dodano po 12 [minuty]:


    ani z float ani z double nie chce mi działać w czym tkwi problem????


    //użytkownik podaje 5 liczb, program mnoży środkową liczbę razy 3
    #include<conio.h>
    #include<stdio.h>
    double czytaj (double tab[]);
    double mnoz (double tab[]);
    int main()
    {
    double tab[5];
    czytaj(tab);
    printf ("po wymnozeniu srodkowego elementu tablicy przez 3 ta tablica wyglada tak:\n");
    mnoz(tab);
    getch ();
    return 0;
    }


    double czytaj (double tab[])
    {
    double i;

    printf ("podaj 5 liczb calkowitych: \n");
    for(i=0; i<5; i++)
    {scanf("%lf", &tab[i]);
    };
    }


    double mnoz(double tab[])
    {
    int i;

    tab[2]=3*tab[2];
    for (i=0; i<5; i++)
    {
    printf ("%lf ", tab[i]);
    }
    return tab[i];
    }
  • #5 2460994
    marihires
    Poziom 30  
    Posty: 986
    Pomógł: 193
    Ocena: 129
    #include<conio.h>
    #include<stdio.h>
    float czytaj (float tab[]);
    float mnoz(float tab[]);
    int main()
    {
    float tab[5];
    czytaj(tab);
    printf ("po wymnozeniu srodkowego elementu tablicy przez 3 ta tablica wyglada tak:\n");
    mnoz(tab);
    getch ();
    return 0;
    }


    float czytaj (float tab[])
    {
    float i;
    printf ("podaj 5 liczb: \n");
    for(i=0; i<5; i++)
    {scanf("%f", &tab[i]);
    };
    }


    float mnoz(float tab[])
    {
    float i;
    tab[2]=3*tab[2];
    for (i=0; i<5; i++)
    {
    printf ("%f\n", tab[i]);
    }
    return tab[i];
    }
    //teraz dziala :)
    //wprowadz liczby po kropce...
  • #6 2461050
    bardzociekawski
    Uczeń
    Posty: 63
    hm......... ty to sprawdzałeś bo mi nie działa :/ ?
  • #7 2461169
    marihires
    Poziom 30  
    Posty: 986
    Pomógł: 193
    Ocena: 129
    mi dziala....
    liczby podaje po kropce
    np
    2.3
    1.4
    4.2
    itd..
    i wynik pisze:
    2.3000
    1.4000
    12.600
    itd...

    Dodano po 1 [minuty]:

    jaki masz kompilator??
  • #8 2461237
    bardzociekawski
    Uczeń
    Posty: 63
    Bloodshed Dev C ++

    Dodano po 3 [minuty]:

    wyświetlają się komunikaty błędów:
    In function `float czytaj(float*)':
    23 invalid types `float*[float]' for array subscript


    In function `float mnoz(float*)':
    34 invalid types `float*[float]' for array subscript
    36 invalid types `float*[float]' for array subscript
  • REKLAMA
  • #9 2461760
    pallid
    Poziom 20  
    Posty: 155
    Pomógł: 57
    Ocena: 6
    Wskazowki:
    1. funkcja float czytaj(float[]); nie zwraca wartosci
    2. zmienna sterujaca 'i', w obu petlach for(...) nie jest typu porzadkowego (calkowitego lub wyliczeniowego)
    3. funkcja float mnoz(float[]) wykracza poza tablice (IndexOutOfBound Error)
    4. niesfotmatowane wyjscie (printf("%f", ...)) moze zwracac niedokladne wartosci (zmiennoprzecinkowe wartosci przyblizone).
    HTH. Pozdr.
  • #10 2461828
    bardzociekawski
    Uczeń
    Posty: 63
    w takim razie palid mógłbyś podać poprawny kod ?
  • #11 2462166
    ed-ek
    Poziom 34  
    Posty: 1814
    Pomógł: 275
    Ocena: 42
    Jeżeli masz Dev-C++ to wpisz ten kod:
    #include <iostream>
    using namespace std;

    float tab[4];
    main()
    {
    for(int i=0;i<=4;i++)
    {cout<<"podaj "<<i+1<<" liczbe ";cin>>tab[i];}
    cout<<"wprowadziles liczby: "<<endl;
    for(int i=0;i<=4;i++)
    cout<<tab[i]<<" ";
    cout<<endl;
    cout<<"po przemnozeniu 3 elementu tablicy,wyglada ona: "<<endl;
    tab[2]=tab[2]*3;
    for(int i=0;i<=4;i++)
    cout<<tab[i]<<" ";
    cout<<endl<<endl;
    system("pause");
    }

    Tablica zadeklarowana jest jako float, ale liczby int możesz oczywiście wpisywać - możesz też zmiennoprzecinkowe.
  • REKLAMA
  • #12 2462864
    bardzociekawski
    Uczeń
    Posty: 63
    ale ty mi podałeś kod w C++, a w C nie da się tego zrobić ????
  • #13 2463712
    marihires
    Poziom 30  
    Posty: 986
    Pomógł: 193
    Ocena: 129
    Ja mam BORLAND C++ 6
    i mi dziala ten programik...
    sprawdz, moze kompilowales ten moj programik (twój przerobiony:))
    pod c++ a nie pod c...
  • #14 2463738
    ed-ek
    Poziom 34  
    Posty: 1814
    Pomógł: 275
    Ocena: 42
    bardzociekawski napisał:
    Bloodshed Dev C ++

    Dodano po 3 [minuty]:

    wyświetlają się komunikaty błędów:
    In function `float czytaj(float*)':
    23 invalid types `float*[float]' for array subscript


    In function `float mnoz(float*)':
    34 invalid types `float*[float]' for array subscript
    36 invalid types `float*[float]' for array subscript

    Przecież podajesz że masz Dev-C++. Dla C zmień cout i cin na print i scan - ale w końcu pod czym kompilujesz?
  • #15 2463901
    rodia
    Poziom 12  
    Posty: 12
    Pomógł: 1
    Poprostu wskazujesz na elementy tablicy zmiennymi typu float, ew. double, a jak wiadomo adres musi być liczba całkowita więc w gre wchodzą tylko int ew . typy pochodne (bynajmniej do tego typu błędów odnoszą sie komunikaty DevCpp). w każdym bądż razie sprawdż ten wątek jesli to nie pomoż to zrzutuj typ integer na te liczniki wtedy napewno powinno pomóc.
  • #16 2464072
    bardzociekawski
    Uczeń
    Posty: 63
    uruchomiłem ten program bez kompilacji - jak podaję liczby całkowite to wszystko okej a jak podam liczbe zmiennoprzecinkowa, np. wpisze "3.45" (kropka jest w srodku oczywiscie) to program nie przyjmuje wiecej liczb tylko od razu wyswietla olbrzymie liczby nie wiadomo skad wzięte - więc jeżeli ten program nie działa w dev c++ to nie bardzo :/ coś jest nie tak z kodem .....

    Dodano po 2 [minuty]:

    kurczeeeeeeee
    wystarczyło zmienić z "float i" na "int i" i teraz działa:

    //użytkownik podaje 5 liczb rzeczywistych, program mnoży środkową liczbę razy 3

    #include<conio.h>
    #include<stdio.h>
    float czytaj (float tab[]);
    float mnoz(float tab[]);
    int main()
    {
    float tab[5];
    czytaj(tab);
    printf ("po wymnozeniu srodkowego elementu tablicy przez 3 ta tablica wyglada tak:\n");
    mnoz(tab);
    getch ();
    return 0;
    }


    float czytaj (float tab[])
    {
    int i;
    printf ("podaj 5 liczb: \n");
    for(i=0; i<5; i++)
    {scanf("%f", &tab[i]);
    };
    }


    float mnoz(float tab[])
    {
    int i;
    tab[2]=3*tab[2];
    for (i=0; i<5; i++)
    {
    printf ("%f\n", tab[i]);
    }
    return tab[i];
    }
  • Pomocny post
    #17 2464168
    marihires
    Poziom 30  
    Posty: 986
    Pomógł: 193
    Ocena: 129
    Tak w sumie powinno byc...sorki ze tez zmieniłem i z int na float ale u mnie nie działało na int tylko jak bylo i float :D...
    takie dziwne :P
  • #18 2464313
    bardzociekawski
    Uczeń
    Posty: 63
    heheheh okej

Podsumowanie tematu

✨ Dyskusja dotyczy poprawy kodu w języku C, który ma wczytać 5-elementową tablicę liczb (całkowitych lub zmiennoprzecinkowych) i pomnożyć środkowy element tablicy przez 3, a następnie wyświetlić zmodyfikowaną tablicę. W oryginalnym kodzie występowały błędy związane z niepoprawnym użyciem wskaźników w funkcjach czytających i wyświetlających tablicę, nieprawidłowym typem zmiennej sterującej pętli (użycie float zamiast int), a także błędami składniowymi w scanf i printf (np. brak indeksowania tablicy). Rozwiązaniem było poprawne indeksowanie elementów tablicy w funkcjach, użycie typu int dla zmiennej sterującej pętlą, a także dostosowanie formatu scanf i printf do typu danych (int, float lub double). Wskazano, że w C adresy elementów tablicy muszą być liczbami całkowitymi, co wyklucza użycie float jako indeksu. Podano również przykładowy kod w C++ z użyciem cin i cout, ale autor preferował rozwiązanie w czystym C. Ostatecznie poprawny kod w C wymagał deklaracji tablicy jako float lub double, użycia zmiennej int jako indeksu pętli, oraz poprawnego odwoływania się do elementów tablicy w scanf i printf. Kompilator Bloodshed Dev-C++ zgłaszał błędy przy niepoprawnym indeksowaniu tablicy. Dyskusja zawierała także sugestie dotyczące formatów wejścia (liczby zmiennoprzecinkowe z kropką) oraz uwagi o potencjalnych błędach wykraczania poza zakres tablicy.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA