Program z użyciem tablic

Program z użyciem tablic
0

Witajcie, otóż mam napisać program, który z jednego pliku "odczytuje" tekst i do drugiego pliku zapisuje informacje i ilości liter w postaci:
Plik wejściowy - Ala ma kota
Plik wyjściowy:
A - 4
B - 0
C - 0
itd.

Napisałem coś takiego #include <iostream>
#include<stdio.h>
#include<string>

using namespace std;

char Tablica[64];
int Tablica2[64];
char znak;
int i,j;
FILE *f;
FILE *f2;

int main()

{
j=65;
for(i=1;j<52;j++)
{
if (j==91)
j=97;
Tablica[i]=char(j);
j=j+1;
}

for(i=1;i=52; i++)
Tablica2[i]=0;

f = fopen("Test.txt", "rw");
f2 = fopen("Test2.txt", "w");

while(!feof(f))

{
    znak = fgetc(f);
    int i=1;
    while (Tablica[i] !=0)
    {
        if (znak==Tablica[i])
        Tablica[i]=Tablica[1]+1;
        i++;
        break;
    }

    int z=1;
    while (Tablica[i] !=0)

   {

    fprintf(f2,"Tablica[i] - Tablica2[i]");
    z++;
   }

   int v=1;
   while (Tablica[i] !=0)
    {
        if(Tablica2!=0)
        fprintf(f2,"Tablica[i] - Tablica2[i]");
        v++;

    }

        fclose(f);
        fclose(f2);





}
return(0);

}

Kopiuj

Lecz niestety coś nie działa, siedzę już nad tym długi czas i nie mogę rozgryźć. Proszę o pomoc, z góry dziękuję.

Proszę także o niekopiowanie tego programu innych osób, które również potrzebują czegoś podobnego, gdyż program stworzony jest przeze mnie.
ujemny
Co do ostatniej linijki to nie sądzę, żeby znalazł się desperat który by chciał to skopiować....
mto9
co to za kod? znasz podstawy? break w while bez żadnego warunku? to po co pętla?
mto9
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 10 lat
  • Postów:380
0

Po 1 co to ma byc:

Kopiuj
 j=65;
    for(i=1;j<52;j++)
    {
        if (j==91)
        j=97;
        Tablica[i]=char(j);
        j=j+1;
    }

?
Po 2 co to ma byc?

Kopiuj

    for(i=1;i=52; i++)     // nie powinno byc i==52?
    Tablica2[i]=0;

Powinno byc tak:
1.wczytujesz dane z pliku
2.zmodyfikowany algorytm np bucket sort o to link:http://edu.i-lo.tarnow.pl/inf/alg/003_sort/0020.php
3.zapisujsz dane do pliku

edytowany 1x, ostatnio: mto9
0

Znam podstawy, ale dopiero zaczynam z C, wcześniej robiłem w pascalu. Mam coś takiego właśnie w Turbo:

Kopiuj

program licz;

var
 tz:array[1..52] of char;
 tw:array[1..52] of integer;
 plik_we, plik_wy, plik_wy2:text;
 znak:char;
 i,j:integer;



begin
{wypelnianie wartosciami}
 j:=65;
 for i:=1 to 52 do
 begin
    if j=91 then j:=97;
    tz[i]:=chr(j);
    j:=j+1;
 end;



 for i:=1 to 52 do
 begin
    tw[i]:=0;
 end;



 assign(plik_we,'C:/tekst.txt');
 assign(plik_wy,'C:/wynik.txt');
  assign(plik_wy2,'C:/wynik2.txt');
 reset(plik_we);
 rewrite(plik_wy);
  rewrite(plik_wy2);

{obliczenia}
 while not(eof(plik_we)) do
   begin
     read(plik_we,znak);
     for i:=1 to length(tz) do
      begin
         if znak=tz[i]
         then
          begin
            tw[i]:=tw[i]+1;
            break;
          end;

      end;
   end;

{zapis}
 for i:=1 to length(tz) do
 begin
    writeln(plik_wy,tz[i],'-',tw[i]);
 end;

 for i:=1 to length(tz) do
 begin
   if tw[i]<>0 then
    writeln(plik_wy2,tz[i],'-',tw[i]);
 end;

 close(plik_we);
 close(plik_wy);
 close(plik_wy2);
end.

No i chciałem to przepisać na C, ale pewnie znając życie to pomyliłem kilka instrukcji...

mto9
Nie sądzę że ktokolwiek zrobi to za ciebie..
ujemny
Zgadzam się, szczególnie, że zabraniasz kopiowania kodu innym a sam czekasz na gotowca :)
0

Nie czekam na gotowca, tylko na wskazówki, ale, że Wy jesteście mądrzejsi, to dzięki za pomoc.

mto9
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 10 lat
  • Postów:380
0

Okej skoro znasz podstawy to zakodowanie tego algorytmu nie powinno ci sprawic trudnosci:

  1. Wczytaj to zdanie wejściowe to tablicy charów
  2. Zadeklaruj tablice n elementów(i zainicjalizuj jej elementu 0), gdzie n to liczba znaków jaka może byc wykorzystana w powyższym zdaniu ( w ascii bez rozróżniania duzych/małych liter wynosi ona bodajże 26 znaków.. tab[0] to 'A' lub 'a'; tab[1] to'B' lub 'b' ; tab[3] to'C' to 'c' itd)
    3.Wykonaj pętle od i=0 do n-1 która "przeleci" przez całe zdanie wejściowe i doda +1 do odpowiedniego elementu naszej tablicy(np jesli pierwsza literka to 'A' to zrobi tab[0]++ )
  3. Koniec w tablicy masz ilosc powtórzeń każdego z znaku
    UWAGA: musisz pamiętac, że indeksy tablicy(0,1,2..26) nie odpowiadają dokładnie wartości znaku jaki zawiera w tablicy ASCII(dla A jest ona bodajże 65) a więc odwołujesz się tak: tab[(int)A-65];
edytowany 1x, ostatnio: mto9
0

Dzięki, będę działał

KR
  • Rejestracja:prawie 16 lat
  • Ostatnio:6 miesięcy
  • Postów:2514
0

na pierwszy rzut oka wydawało mi się, że przekombinowałeś ten program, więc go napisałem. dalej mi się wydaje że przekombinowałeś:

Kopiuj
#include <cstdio>

int main()
{
  char linia[1024];
  int znaki[256] = {};
  gets(linia);
  char* p = linia;
  while(*p) znaki[(unsigned char)*p++]++; //<-- zliczanie znaków
  for (int i=0; i<256; i++)
    {
      if (znaki[i]>0)
        printf("%c (ASCII:% 4d) - %d\n",(char)i,i,znaki[i]);
    }
  return 0;
}

░█░█░█░█░█░█░█░█░█░█░█░
edytowany 1x, ostatnio: krwq
0

Dzięki wielkie za wskazówki!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.