C/C++

  • Креатор на темата Креатор на темата Драган
  • Време на започнување Време на започнување
Се моли некој life-saver да ми каже зошто функцијата за броење на зборови не ми работи со датотеки.
Ја тестирав цело време со внесување на низа , се функционира но кога ја ставив со датотеки не функционира дава некои погресни резултати.
Утре е испитот па ако може некој да даде брз одговор, мн ке ми помогне.

PHP:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
int br_zb (char *s)
{
  char *p=s, *k ;
  int br=0,i;
 
  while ( *p != '\0' )
  {
      while ( isalpha(*p) == 0 )  p++;
 
      br++; k=p; i=0;
 
      while ( isalpha(*k) )  {  k++; i++; }
 
      p=k;
  }
  return br;
}
 
int main () {
 
int br=0;
 
char s[100];
char *p;
 
FILE *dat1, *dat2;
 
dat1 = fopen ( "zadaca3.txt" , "r" );
 
dat2 = fopen ( "rezultati.txt" , "w" );
 
 
while ( fgets(s,100,dat1) != NULL  )
 
{
    br=br+ br_zb(s);
    printf("%d  ",br);
}
 
 
 
fclose(dat1);
fclose(dat2);
 
 
return 0;
}
 
maxmaster
Од кај ти е алгоритмот за броење зборови во реченица? :pos:
Кога и да имаш некој проблем со броење зборови користи го овој алгоритам што е подоле. Многу е добар и ако ти треба да броиш нешто внатре во зборот..пр согласки-самогласки, цифри, големи-мали букви итн ќе ти заврши работа :)
PHP:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
int br_zb (char *s)
{
    int brojZborovi = 0;
    int voZbor = 0; // od pocetok predpostavuvas deka ne si vozbor
    int i=0;
    while(s[i] != '\0')
    {
        if(isalpha(s[i]))
        {
                voZbor = 1;
        }
        else
        {
            if(voZbor)
            {
                brojZborovi++;
                voZbor = 0;
            }
        }
        i++;
 
    }
    if(voZbor)
        brojZborovi++;
 
    return brojZborovi;
}
 
 
int main ()
{
 
    int br=0;
 
    char s[100];
    char *p;
 
    FILE *dat1, *dat2;
 
    dat1 = fopen ( "zadaca3.txt" , "r" );
 
    dat2 = fopen ( "rezultati.txt" , "w" );
 
 
    while ( fgets(s,100,dat1) != NULL  )
 
    {
        br = br+ br_zb(s);
 
    }
 
    printf("%d  ",br);
    fprintf(dat2,"%d",br);
    fclose(dat1);
    fclose(dat2);
 
 
    return 0;
}
 
Mr.InF3ction fala za brziot odgovor

algoritam sto go postira e sigurno e podobar ama nemozev da se snajdam so nego koga mi teba da baram nesto vo zborot i zatoa izmisluvav nekoj moj sto ke mi e porazbirliv za mene , a toa ne znaci deka mojot e podobar.

najdov sto e greskata ili bagot vo mojot algoritam - samo namesto '\0' vo uslovot stavam '\n' za so datoteki i si funkcionira.

koristam i pokazuvaci za da znam tocno kade pocnuva i zavrsuva zborot pa da mozam da go listam i kako niza.

ovaj nacin go imam zapamteno i so ovaj planiram na ipit da odam zosto ako pocnam nov nacin da ucam sega ke mi se izmesa, se nadevam deka nema da izlezat nekoi drug greski so algorimot.
--- надополнето: 14 февруари 2013 во 00:46 ---
Mr.InF3ction

Izgleda na kraj pak ke go korsitam algoritmot sto go postira ti ,( mojov se tuku ke me iznenadi so nesto navistina neocekuvano ) neznam sto e problemot so datotekive.

However , dali mozis da mi kakzis kako bi provilo ( so algoritmot sto go postira ti )
- dali zborot zapocnuva na odredena bukva i zavrsuva na odredena cifra
- dali zborot e isti so zbor za sporeduvanje
- dolzina na zborot
- broenje samoglasi skoglaski - ova mislam deka e polesno
 
Код:
while(s[i] != '\0')
    {
        if(isalpha(s[i]))
        {
             if(!voZbor) { // ako voZbor = 0 a si stignal do tuka znaci se naogas na pocetokot na zborot
                voZbor = 1;
               // i tuka pravis proverka dali pocnuva so nekoja bukva ili bilo sto povrzano so prvata bukva
            }
           
           //Ostanatiot del od zborot
           // tuka moze edna proverka za toa dali  (!isAlpha(s[i+1])
          // za poslednata bukva i pak  kako gore ke pravis proverki za toa sto ti treba bukva/cifra
 
        // vo ovoj del moze i da inkrementiras nekoja prolmenliva sto ke oznacuva dolzina na zbor
 
       // ili za soglaska samoglaska so proverki soodvetno inkrementiras brojac
        }
        else
        {
            if(voZbor)
            {
                brojZborovi++;
                voZbor = 0;
                // tuka znaci deka ne si vo zborot pa zatoa se zgolemuva broj na zborovi za +1
               // isto taka i se resetiraat site brojaci ,,br brsamoglaski, ili sto i da e  stavas na 0
            }
        }
        i++;
 
    }
    if(voZbor)
        brojZborovi++;
 
    return brojZborovi;
 
Mr.InF3ction
Thanks man, eve mu vleguvam vo sema so kodov, malce zakasnato, no ne zaboraveno.
Ova objasnuvanjevo so komentarive mn dobro i jasno, taman pobrzo da go razberam.
Me spasi vo posleden moment, kaj ke odev na ispit jas so mojot " besen " algoritam. :)
Aj ke vidime utre sto ke bidni.

Fala uste ednas.
 


дали ќе може малку помош со задачава од мендо е, немам никаква идеја како да ја решам, дали сеуште не сум учел таква функција или што е работата не ми текнува


Код:
Трајко
Дадена е низа од знаци која се состои само од зборовите duplo, troduplo и minus. На почетокот, Трајко има еден денар. Низата се чита по ред и ако се прочита duplo во низата од знаци, бројот на денари што ги има Трајко во тој момент се множи со 2 (се зголемува двојно), а ако се појави troduplo се множи со 3. Ако се прочита minus од парите кои ги има Трајко во моментот се одзема 1 денар. Потоа се продолжува со читање на нареден збор од низата.
 
Напишете програма која ќе пресмета колку денари има Трајко по извршувањето на горенаведените операции.
 
 
 
Влез
Влезот се состои од еден ред во кој се наоѓа низа од знаци составена само од зборовите duplo, troduplo и minus. Низата не содржи повеќе од 250 знаци.
 
 
 
Излез
Излезот се состои од еден ред во кој треба да отпечатите колку денари има Трајко по извршувањето на горенаведените операции.
 
 
 
Ограничувања
Временско ограничување: 1 секунда
Мемориско ограничување: 64 мегабајти
 
 
 
Примери
 
влез
TroDuPlotRoduPlodupLomInUsdUploMinusTroduplo
излез
99
 
PHP:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
int main()
{
    char vlez[250];
    char duplo[] ="duplo";
    char troduplo[] ="troduplo";
    char mminus[] ="minus";
    int suma = 1;
    scanf("%s",vlez);
    int poz = 0;
    while(vlez[poz] !='\0'){
        if(tolower(vlez[poz]) == 'd'){
            suma = suma *2;
            poz+=strlen(duplo);
        }else if(tolower(vlez[poz]) =='t'){
            suma = suma * 3;
            poz+=strlen(troduplo);
        }else if(tolower(vlez[poz]) =='m'){
            suma--;
            poz+=strlen(mminus);
        }
        else{
            poz++;
        }
 
    }
    printf("%d", suma);
}
Ако се зема предид дека влезот се состои само од тие 3 збора ќе ти заврши работа :D
 
Средна цифра

Направете програма која ќе ја најде средната цифра на даден троцифрен цел број K.

На пример, кај бројот 123 средната цифра е 2, кај бројот 311 средната цифра е 1, додека кај 759 средната цифра е 5.



Влез

Во првиот ред се наоѓа троцифрениот број K (100 <= K <= 999).


Излез

Излезот се состои од еден ред во кој треба да ја отпечатите средната цифра на дадениот број.


Ограничувања

Временско ограничување: 1 second
Мемориско ограничување: 64 megabytes

ako mozete da mi pomognete blagodaram odnapred
 
Ограничен, во кој програмски јазик?
 
vo c++
--- надополнето: 21 февруари 2013 во 20:11 ---
brat ke mozes da mi objasnes ke ti bidam mnogu blagodaren
 
Fords

Брат гледаш дека има посебна тема за C/C++, ако може нареден пат да постираш таму ќе ти бидам многу благодарен.
 
PHP:
int main()
 
{
 
int c;
 
ASD:
 
cin>>c;
 
if (c <= 99 || c >= 1000)
 
{
 
cout<<"Vneseniot broj treba da bide 3 cifren.";
 
goto ASD;
 
}
 
cout<<"Srednata cifra od vneseniot broj e "<<c / 10 % 10;
 
system("PAUSE");
 
}
Среќен божиќ.
Клучот на програмата е во делењето со остаток.
пример:
Внесуваш 894:
поделено на 10 ќе добиеш 89 (во променлива од типот "int" може да стои само цел број како вредност).
Е сега, кога еден број ќе поделиш со %, го добиваш остатокот од делењето. Да речеме 10 го делиш со 4. Остатокот е 2.
Па така и во овој случај, 89, поделено со 10 со остаток, добиваш 9. Нели, 8 * 10 = 80 (остануваат уште 9)

Се надевам ме сфати.
 
nema problem a ke mozes li da mi pomognes i ke ja izbrisan posle temata pls ako moze samo daj mi ideja
--- надополнето: 21 февруари 2013 во 20:23 ---
int main()
{
int c;
ASD:
cin>>c;
if (c <= 99 || c >= 1000)
{
cout<<"Vneseniot broj treba da bide 3 cifren.";
goto ASD;
}
cout<<"Srednata cifra od vneseniot broj e "<<c / 10 % 10;
system("PAUSE");
}

Среќен божиќ.
Клучот на програмата е во делењето со остаток.
пример:
Внесуваш 894:
поделено на 10 ќе добиеш 89 (во променлива од типот "int" може да стои само цел број како вредност).
Е сега, кога еден број ќе поделиш со %, го добиваш остатокот од делењето. Да речеме 10 го делиш со 4. Остатокот е 2.
Па така и во овој случај, 89, поделено со 10 со остаток, добиваш 9. Нели, 8 * 10 = 80 (остануваат уште 9)

Се надевам ме сфати.
fala mnogu
 
Ke mozi li nekoj da mi pomogne, mi treba programa za predstavuvane na broj kako proizvod od prosti broevi. na pr za 12 = 2*2*3
 
PHP:
int main()
{
    unsigned n;
    cin >> n;
    cout << n << " : ";
    for(int i = 2; i <= n; i++)
    {
      while(n % i == 0) { cout << i << "  "; n /= i; }
    }
}
Ако сакаш можеш наместо да ги печатиш во циклусот, да ги ставаш во некоја низа или како и да е. ;)
 

Kajgana Shop

Back
На врв Bottom