Powrót   Forum CDRinfo.pl > Różne > Off topic

Off topic Forum poświęcone wszelkim innym tematom.



Witaj Nieznajomy! Zaloguj się lub Zarejestruj

Zarejestrowani użytkownicy mają dostęp do dodatkowych opcji, lepszej wyszukiwarki oraz mniejszej ilości reklam. Rejestracja jest całkowicie darmowa!

Odpowiedz na post
 
Opcje związane z dyskusją Tryby wyświetlania
Stary 29.11.2006, 21:37   #1
misiek767
Bywalec
 
Avatar użytkownika misiek767
 
Data rejestracji: 29.04.2004
Posty: 37
misiek767 w tym momencie nie ma Reputacji dodatnich ani ujemnych <0  pkt>
c++ zliczanie liter

witma mam do napisania program ktory liczy wystapienie poszczegolnych liter we wczytanym ciagu i wyswietla ich statystyke. na koncy jeszcze ma wyswietlac litery ktore najczesciej wystepowaly i napisze ile razy wystapily. efekt ma byc taki
To jest to
T 1
o 2
2
j 1
e 1
s 1
t 2
2
t 2
o 2
Najczesciej wystapily o,t po dwa razy

Przyszedl mi do glowy tylko jeden pomysl jak to napisac mianowicie chcialem ten tekst zapisac do tablicy a potem porownywac i-ty element tablicy z reszta elementow tej tablicy ale nie wiem za bardzo jak to napisac. Prosze o jakies wskazowki albo o inne pomysly do rozwiazania tego poroblemu z gory dzieki
misiek767 jest offline   Odpowiedz cytując ten post

  #ads
CDRinfo.pl
Reklamowiec
 
 
 
Data rejestracji: 29.12.2008
Lokalizacja: Sieć globalna
Wiek: 31
Posty: 1227
 

CDRinfo.pl is online  
Stary 29.11.2006, 21:40   #2
andy
logged out
CDRinfo VIP
 
Avatar użytkownika andy
 
Data rejestracji: 12.07.2003
Lokalizacja: /home
Posty: 12,518
andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>andy jest wzorem do naśladowania <650 - 999 pkt>
Poszukaj rozwi***261;zania na forum 4programmers.net
__________________
XMPP: andrzej(at)czerniak.info.pl
andy jest offline   Odpowiedz cytując ten post
Stary 30.11.2006, 21:45   #3
pawelblu
Recydywista - Wielokrotny
Zlotowicz
CDRinfo VIP
 
Avatar użytkownika pawelblu
 
Data rejestracji: 17.01.2003
Lokalizacja: Wawa
Posty: 5,265
pawelblu niedługo stanie się sławny ;) <50 - 149 pkt>pawelblu niedługo stanie się sławny ;) <50 - 149 pkt>
Zrob zliczanie wszystkiego od ! do ~ (wszystko, czyli litery, cyfry, znaki).

Zadeklaruj tablice output 94 elem. Zainicjalizuj na 0.

int output[94] = {}; //to chyba powinno zrobic co trzeba


i teraz taki pseudokod

FOR EVERY x_char IN input_string DO
++output[x_char - 33];

I teraz wypisujesz

FOR x_char FROM 0 TO 93 DO
PRINTCHAR(x_char+33);
PRINTINT(output[x_char]);
PRINTLN;

Tak bym to probowal robic.
pawelblu jest offline   Odpowiedz cytując ten post
Stary 05.12.2006, 18:53   #4
misiek767
Bywalec
 
Avatar użytkownika misiek767
 
Data rejestracji: 29.04.2004
Posty: 37
misiek767 w tym momencie nie ma Reputacji dodatnich ani ujemnych <0  pkt>
Ok napisalem cos takiego
#include <cstdlib>
#include <iostream>
#include <conio.h>

using namespace std;

int main(int argc, char *argv[])
{

int tab[256]={0};
int m;
char tabi[m];
char itab[m];
int iMin,iMax,iMinInd,iMaxInd;
int i;
int j=0;
char z;
while (z!=13){

z=getche();
itab[j]=z;
j++;

}
cout<<endl;
for(i=0; i<=j; i++)
tab[itab[i]]++;

for(i=0; i<=(j-2); i++){
cout<<itab[i]<<" "<<tab[itab[i]]<<endl;}

iMin=iMax=tab[itab[0]];
for (i=0;i<=(j-1);i++){ if (tab[itab[i]]>=iMax){iMax=tab[itab[i]];iMaxInd=itab[i];}}
cout<<endl;
cout<<"najczesciej wystepowaly"<<endl;
cout<<char(iMaxInd)<<" "<<iMax<<" razy"<<endl;

cout<<endl;



system("PAUSE");
return EXIT_SUCCESS;
}
No i prawie dziala ale jest program z liczeniem max
chodzi o to ze jak jest kilka liter ktore wystapily najwiecej razy np w zdaniu
"ttttoooo" to on wyswietla tylko ta ostatnia
misiek767 jest offline   Odpowiedz cytując ten post
Stary 05.12.2006, 20:54   #5
pawelblu
Recydywista - Wielokrotny
Zlotowicz
CDRinfo VIP
 
Avatar użytkownika pawelblu
 
Data rejestracji: 17.01.2003
Lokalizacja: Wawa
Posty: 5,265
pawelblu niedługo stanie się sławny ;) <50 - 149 pkt>pawelblu niedługo stanie się sławny ;) <50 - 149 pkt>
Cytat:
Napisany przez misiek767 Podgląd Wiadomości
Ok napisalem cos takiego
#include <cstdlib>
#include <iostream>
#include <conio.h>

using namespace std;

int main(int argc, char *argv[])
{

int tab[256]={0};
int m; <-------------------------
char tabi[m]; <------------------------- CO TE LINIE MAJA ROBIC ??
char itab[m]; <-------------------------
int iMin,iMax,iMinInd,iMaxInd;
int i;
int j=0;
char z;
while (z!=13){ <------------------------- ZAMIAST 13 DALBYM '\n' lub '\0' - 13 ??

z=getche();
itab[j]=z; <------------------------- JAKIEJ WIELKOSCI JEST itab ??
j++;

}
cout<<endl;
for(i=0; i<=j; i++) <------------------------- DLACZEGO TUTAJ DO j ??
tab[itab[i]]++;

for(i=0; i<=(j-2); i++){ <------------------------- A TUTAJ DO j-2 ??
cout<<itab[i]<<" "<<tab[itab[i]]<<endl;}

iMin=iMax=tab[itab[0]];
for (i=0;i<=(j-1);i++){ if (tab[itab[i]]>=iMax){iMax=tab[itab[i]];iMaxInd=itab[i];}}

^^^^^ A TU LICZYSZ do j-1 POZA TYM POWINNO WYGLADAC RACZEJ TAK:
iMin = iMax = tab[itab[0]]; //krotnosc
iMaxInd = iMinInd = itab[0]; //znak
for (i=1;i<=j;i++){ if (tab[itab[i]]>=iMax){iMax=tab[itab[i]];iMaxInd=itab[i];}}

cout<<endl;
cout<<"najczesciej wystepowaly"<<endl;
cout<<char(iMaxInd)<<" "<<iMax<<" razy"<<endl;

cout<<endl;



system("PAUSE");
return EXIT_SUCCESS;
}
No i prawie dziala ale jest program z liczeniem max
chodzi o to ze jak jest kilka liter ktore wystapily najwiecej razy np w zdaniu
"ttttoooo" to on wyswietla tylko ta ostatnia
Ja to bym zreszta wogole robil inaczej

Acha ... zeby ten Twoj problem rozwiazac to musisz po prostu wziac iMax przed ta seria cout i przeleciec tablice i wypisac kazdy znak o krotnosci iMax.

Ostatnio zmieniany przez pawelblu : 05.12.2006 o godz. 21:24
pawelblu jest offline   Odpowiedz cytując ten post
Stary 06.12.2006, 12:49   #6
luminat
Gość
 
Data rejestracji: 12.12.2002
Posty: 437
luminat zaczyna zdobywać reputację <1 - 49 pkt>
Ja sie tylko spytam na kit zapisujesz do tablicy ilosc wystepowania danych znakow, to jest absolutnie nie potrzebne. Najprosciej jest zrobic tak:

1. Zadeklarowac jedna tablice.
2. Wprowadzic do niej dane - za pomoca petli for
3.

Kod:
For j = 65 To 90 - ta petla zaczyna sprawdzanie znakow ascii od A do Z
            licznik = 0 - ilosc wystapien znaku A
            For i = 0 To 9 - tu sprawdzamy wszystkie pola tablicy w poszukiwaniu danej litery, gdy j =65, wtedy liczymy ilosc wystapien znaku A
                If tablica(i) = Chr(j) Then
                    licznik = licznik + 1
                End If

            Next
            If licznik > 0 Then
                Console.WriteLine(CStr(Chr(j)) + ": " + CStr(licznik)) - po zakonczeniu wykonywania petli 'For i' wypisujemy ilosc wystapien danego znaku gdy np j=65, wypisujemy ilosc wystapien litery A
            End If
        Next
luminat jest offline   Odpowiedz cytując ten post
Stary 06.12.2006, 15:38   #7
pawelblu
Recydywista - Wielokrotny
Zlotowicz
CDRinfo VIP
 
Avatar użytkownika pawelblu
 
Data rejestracji: 17.01.2003
Lokalizacja: Wawa
Posty: 5,265
pawelblu niedługo stanie się sławny ;) <50 - 149 pkt>pawelblu niedługo stanie się sławny ;) <50 - 149 pkt>
Po pierwsze:
To jest bez sensu bo przechodzisz caly tekst dla kazdej litery oddzielnie. Bardzo nieefektywne rozwiazanie.

Po drugie:
Poza tym zobacz jak ma wygladac wyjscie, a jak wyglada Twoje wyjscie (kolejnosc, powtarzanie).

Prawidlowo:

INPUT: To jest to
OUTPUT:
T 1
o 2
2
j 1
e 1
s 1
t 2
2
t 2
o 2

Nie dosc ze wyzsza zlonosc (tylko o stala, ale nie mala - on ma ok. 4n, Ty masz wielkosc_alfabetu*n). Poza tym nie zapewniasz tej funkcjonalnosci zeby podawac podawac wszystkie odpowiedzi o maks. wystapieniu i Twoje rozwiazanie nie jest latwo przerabialne do tej formy (w szczegolnosci i tak pewniu musialbys uzyc tablicy).
pawelblu jest offline   Odpowiedz cytując ten post
Odpowiedz na post


Twoje uprawnienia:
Nie możesz rozpoczynać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz umieszczać załączników
Nie możesz edytować swoich postów

BB codeWłączone
EmotikonkiWłączone
Kody [IMG]Włączone
Kody HTML są Wyłączone

Teleport


Wszystkie czasy w strefie CET. Aktualna godzina: 14:58.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.