nowawieza Temat założony przez niniejszego użytkownika |
» 2017-03-05 02:47:22 Nadal nie rozumiem jak poprawić ten błąd z przyjęciem przez funkcję tablicy napisów. Poprawiony kod (chyba): #include <iostream> #include <string> #include <math.h> #include <cstdlib> #include <ctime> #include <ctype.h> using namespace std;
int ilemalych( const string napis ) { int licznik = 0; for( int i = 0; i < napis.length(); i++ ) { if( islower( napis[ i ] ) ) licznik++; } return licznik; } int main() { int ilosc; string napis[ 9 ]; do { cout << "Podaj ilosc napisow : \n "; cin >> ilosc; } while( ilosc > 10 && ilosc < 0 ); for( int i = 0; i < ilosc; i++ ) { cout << "Podaj napis : \n "; cin >> napis[ i ]; } cout << "Przed sortowaniem : \n "; for( int i = 0; i < ilosc; i++ ) cout << napis[ i ] << " "; cout << endl; ilemalych( napis ); cout << "Po sortowaniu : \n "; for( int i = 0; i < ilosc; i++ ) cout << napis[ i ] << " "; cout << endl; }
-Zamieniłem tab na napis - zamieniłem funkcję Karamby na funkcję z treści zadania |
|
maly7 |
» 2017-03-05 02:48:26 Ja zwrócę uwagę jeszcze na jedno, już jak chcesz można używać size_t, ale po co mieszać z taką inicjalizacją licznik { }; skoro można licznik = 0; Wg mnie przejrzyściej wygląda, nie potrzeba dołączać standardu c++11 i na pewno to miał (jak zapytają go będzie wiedział o co chodzi ^^). @add nowawieza, bo w dalszym ciągu przekazujesz do funkcji tablicę! a masz przekazać tylko jeden napis czyli w twoim wypadku np. ilemalych( napis[ 0 ] ); Tablicę napisów jako argument ma przyjmować funkcja sortująca, jeszcze jej nie napisałeś. Ta funkcja nie sortuje tylko sprawdza ile małych liter ma napis. |
|
nowawieza Temat założony przez niniejszego użytkownika |
» 2017-03-05 03:00:20 No dobra. Ale jeśli dam napis[0] to do funkcji wejdzie tylko jeden napis... Kurcze bardzo można to zagmatwać no :/ Moje myślenie - niby pseudokod: Podaj ilo ś c napis ó w Podaj napisy Zapisz napisy w tablicy
---------- I tu się zaczyna problem, bo z zadania wynika, że powinienem zrobić dwie osobne funkcje do sortowania i do sprawdzania ilości małych liter. Więc jak mamy osobne funkcje to: Pobierz do funkcji napis z tablicy. Ilo ś ć zwracan ą zapisz do nowej tablicy ż eby si ę tamte napisy nie skasowa ł y
Do funkcji sortuj ą cej pobierz tablic ę napis ó w( ??? ) i je posortuj.
Wypisz tablic ę posortowan ą.
Na kod karamby jestem obecnie zbyt głupi i jego funkcji nie zrozumiem. A nawet jak zrozumiem to nie chcę jej użyć, bo jak za 2 dni ktoś mnie spyta o co chodzi w tej funkcji to już nic nie będę pamiętał :/ A drugi raz takiej funkcji bym nie napisał sam xD |
|
nowawieza Temat założony przez niniejszego użytkownika |
» 2017-03-05 03:07:05 Dobra użyłem chyba trochę mózgu i wyszło coś takiego: - Dodana funkcja sortowania (jakiś błąd :D) - Dodana pętla dodająca napisy do tej funkcji ilemalych() #include <iostream> #include <string> #include <math.h> #include <cstdlib> #include <ctime> #include <ctype.h> using namespace std;
int ilemalych( const string napis ) { int licznik = 0; for( int i = 0; i < napis.length(); i++ ) { if( islower( napis[ i ] ) ) licznik++; } return licznik; }
void Sortowanie( int napis[], int ilosc ) { for( int i = 0; i < ilosc; i++ ) { for( int j = 0; j < ilosc - 1; j++ ) { if( napis[ j ] > napis[ j + 1 ] ) swap( napis[ j ], napis[ j + 1 ] ); } } }
int main() { int ilosc; string napis[ 9 ]; do { cout << "Podaj ilosc napisow : \n "; cin >> ilosc; } while( ilosc > 10 && ilosc < 0 ); for( int i = 0; i < ilosc; i++ ) { cout << "Podaj napis : \n "; cin >> napis[ i ]; } cout << "Przed sortowaniem : \n "; for( int i = 0; i < ilosc; i++ ) cout << napis[ i ] << " "; cout << endl; for( int i = 0; i < ilosc; i++ ) { ilemalych( napis[ i ] ); } Sortowanie( napis[], ilosc ) cout << "Po sortowaniu : \n "; for( int i = 0; i < ilosc; i++ ) cout << napis[ i ] << " "; cout << endl; }
Jest jeden błąd: C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 zad 2.cpp In function 'int main()': 75 18 C:\U sers\filip\Desktop\programowanie\semestr 2\lab 1 zad 2.cpp[ Error ] expected primary - expression before ']' token
|
|
maly7 |
» 2017-03-05 03:09:22 Ja bym właśnie zrobił tak, że sprawdził ile małych liter ma każdy napis i zapisał te ilości w kolejnej tablicy (żeby kolejności były odpowiedznie tj. trzecia wartość odpowiada ilości małych liter trzeciego napisu). Następnie przekazał do funkcji sortującej te dwie tablice. Funkcja sortująca posortuje tablicę z ilościami małych liter przy okazji sortując tablice napisów. W takim sensie, że jeśli w tej tablicy zamienia element 3 z 5 to tak samo zamienić elementy tablicy z napisami. Algrytmów sortowania jest wiele. Pomysłów na rozwiązanie tego zadania może być tyle co programistów, więc możesz już to robić jak chcesz i na tym polega głównie problem zadania :D Problem leży w tej linijce: Sortowanie( napis[], ilosc ) Tablicę przekazujesz bez żadnych dodatków (przekazuje wskaźnik na początek tablicy) czyli: Sortowanie( napis, ilosc ); Oraz w nagłówku funkcji Sortowanie typ tablicy się nie zgadza, przekazujesz tablicę stringów więc powinno być: void Sortowanie( string napis[], int ilosc ) |
|
nowawieza Temat założony przez niniejszego użytkownika |
» 2017-03-05 03:11:06 No to jeszcze będę potrzebował pomocy z użyciem tej funkcji sortującej i zrobieniem nowej tablicy. Spróbuję coś tam zrobić :D
Powyżej masz kod który przed chwilą napisałem. |
|
nowawieza Temat założony przez niniejszego użytkownika |
» 2017-03-05 03:14:30 Teraz została chyba do zrobienia tylko funkcja która używa tych dwóch tablic i dobrze wszystko zamienia. Zrobiłbyś? :D Kod po dodaniu nowej tablicy itd. #include <iostream> #include <string> #include <math.h> #include <cstdlib> #include <ctime> #include <ctype.h> using namespace std;
int ilemalych( const string napis ) { int licznik = 0; for( int i = 0; i < napis.length(); i++ ) { if( islower( napis[ i ] ) ) licznik++; } return licznik; }
void Sortowanie( int napis[], int ilosc ) { for( int i = 0; i < ilosc; i++ ) { for( int j = 0; j < ilosc - 1; j++ ) { if( napis[ j ] > napis[ j + 1 ] ) swap( napis[ j ], napis[ j + 1 ] ); } } }
int main() { int ilosc; int tab[ 100 ]; string napis[ 9 ]; do { cout << "Podaj ilosc napisow : \n "; cin >> ilosc; } while( ilosc > 10 && ilosc < 0 ); for( int i = 0; i < ilosc; i++ ) { cout << "Podaj napis : \n "; cin >> napis[ i ]; } cout << "Przed sortowaniem : \n "; for( int i = 0; i < ilosc; i++ ) cout << napis[ i ] << " "; cout << endl; for( int i = 0; i < ilosc; i++ ) { tab[ i ] = ilemalych( napis[ i ] ); } Sortowanie( napis[], tab ) cout << "Po sortowaniu : \n "; for( int i = 0; i < ilosc; i++ ) cout << napis[ i ] << " "; cout << endl; }
|
|
maly7 |
» 2017-03-05 03:19:07 Już sam się chyba pogubiłem, zobacz czy to działa jak powinno: #include <iostream> #include <string> #include <math.h> #include <cstdlib> #include <ctime> #include <ctype.h> using namespace std;
int ilemalych( string napis ) { int licznik = 0; for( int i = 0; i < napis.length(); i++ ) { if( islower( napis[ i ] ) ) licznik++; } return licznik; }
void Sortowanie( string napis[], int ilosci[], int ilosc ) { for( int i = 0; i < ilosc; i++ ) { for( int j = 0; j < ilosc - 1; j++ ) { if( ilosci[ j ] > ilosci[ j + 1 ] ) { swap( napis[ j ], napis[ j + 1 ] ); swap( ilosci[ j ], ilosci[ j + 1 ] ); } } } }
int main() { int ilosc, ilosci[ 9 ]; string napis[ 9 ]; do { cout << "Podaj ilosc napisow : \n "; cin >> ilosc; } while( ilosc > 10 && ilosc < 0 ); for( int i = 0; i < ilosc; i++ ) { cout << "Podaj napis : \n "; cin >> napis[ i ]; } cout << "Przed sortowaniem : \n "; for( int i = 0; i < ilosc; i++ ) cout << napis[ i ] << " "; cout << endl; for( int i = 0; i < ilosc; i++ ) { ilosci[ i ] = ilemalych( napis[ i ] ); } Sortowanie( napis, ilosci, ilosc ); cout << "Po sortowaniu : \n "; for( int i = 0; i < ilosc; i++ ) cout << napis[ i ] << " "; cout << endl; }
A i jeszcze gdy pobierasz ilość napisów powinno być: while( ilosc > 9 && ilosc < 0 ); Ponieważ dozwolona ilość to 0-9. Jeśli zostawisz 0-10 to musisz zwiększyć tylko rozmiar tablicy do 10. |
|
1 2 3 4 « 5 » 6 |