Форум

Data.BG Форуми: Задачка С - Data.BG Форуми

Прехвърляне към съдържание

Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

Задачка С

#1
Потребителят е неактивен   gooshee 

  • Група: Потребители
  • Мнения: 100
  • Регистриран: 22-April 06
  • Репутация: 0
  • Град:Monastery of Silence
  • Интереси:Killin' MobZ
Задачата да се направи с меню

1) Въвеждане на текст, до натискане на Ctrl+z, който се записва в текстов файл (autocreate).
2) Извежда всички гласни букви и техният брой, от файла.
3) Прави всички букви във файла, главни.

Ще може ли малко help, защото ми го искат на C.. :/

ПП: Помагам, ако има нещо свързано със C++/C# :D
0

#2
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 4965
  • Регистриран: 26-May 03
  • Репутация: 37
  • Пол:Мъж
  • Град:Велико Търново

Преглед на мнениеgooshee, на 13.12.12 - 13:17, каза:

Задачата да се направи с меню

1) Въвеждане на текст, до натискане на Ctrl+z, който се записва в текстов файл (autocreate).
2) Извежда всички гласни букви и техният брой, от файла.
3) Прави всички букви във файла, главни.

Ще може ли малко help, защото ми го искат на C.. :/

ПП: Помагам, ако има нещо свързано със C++/C# :D

isvowel(int ch) просто зависи от езика (примерно 'ъ' в български контекст си е "затъмнена" гласна, но в руски практически липсва), при германската група езици (немски, английски, холандски ...) е спорно дали 'w' и 'y' са гласни -- то за произношението им не споря...
Ха сега език и компилатор и ОС, да бе споменал (не ми се преобразуват кирилици към ЗАГЛАВНИ, не че не се е налагало и то точно със C функция залепена към програма на CLIPPER) :chuckle:

бтв Отивам да правя компания на аватара си

Мнението беше редактирано от georgedimov: 13.12.12 - 19:21

0

#3
Потребителят е неактивен   you207 

  • Група: Потребители
  • Мнения: 10
  • Регистриран: 04-August 12
  • Репутация: 0
  • Пол:Мъж
  • Град:София
И на мен ми трябва помощ за това :

Преглед на мнениеgooshee, на 13.12.12 - 13:17, каза:


1) Въвеждане на текст, до натискане на Ctrl+z, който се записва в текстов файл (autocreate).



На латиница , компилатор MS Visual Studio 2010 и ОС е Win7.

Пак на C.

А може ли да вместо Ctrl+z да ползваме нещо друго за ЕОФ , напримр " * " или Enter ?

Мнението беше редактирано от you207: 14.12.12 - 08:23

0

#4
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 4965
  • Регистриран: 26-May 03
  • Репутация: 37
  • Пол:Мъж
  • Град:Велико Търново

Преглед на мнениеyou207, на 14.12.12 - 08:18, каза:

И на мен ми трябва помощ за това :


На латиница , компилатор MS Visual Studio 2010 и ОС е Win7.

Пак на C.

А може ли да вместо Ctrl+z да ползваме нещо друго за ЕОФ , напримр " * " или Enter ?

1) Може, ама Windows е наследник на MS-DOS, тя пък е окрадено-преработена версия на CP/M 2.2 на Digital Researce за процесор i8080(i8085, z80) с лека транслация на кода за i8086 и подмяна на съобщенията. То се забелязва лесно под DOS-prompt:
C:\Users\George>copy con xxx.txt
ala
bala
^Z
        1 file(s) copied.

C:\Users\George>type xxx.txt
ala
bala

C:\Users\George>

0

#5
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 4965
  • Регистриран: 26-May 03
  • Репутация: 37
  • Пол:Мъж
  • Град:Велико Търново
Това не чат, за да си мерите някои неща (пак ще отнеса предупреждение)
Ето как се работи с кирилица
// Dev-C++ 5.3.0.3
#include <iostream>
using namespace std;

#include <ctype.h>

int iscyr(int ch)
// From M$ think that we use russian DOS cyrillic code page :(
{
       if ((ch >= 0x80) && (ch < 0xB0)) // from 'А' to 'п'
          return 1;
       if ((ch >= 0xE0) && (ch < 0xF0)) // from 'р' to 'я'
          return 1;
       return 0;
}          

int touppcyr(int ch)
{
    if (iscyr(ch))
    {
    	if ((ch >= 0xE0) && (ch < 0xF0))
    		ch -= (0xE0 - 0xB0);
    	return (ch) & 0xdf;
    }
    return (isalpha(ch)) ? (ch) & 0x5f : (ch);
}

main()
{
      int ch;
// ...And I replace synonym cyrillic with bulgarian (God save me...)
      
      cout << "Enter latin or bulgarian letter ";
      ch = cin.get();
      
      cout << "Symbol \'" << (char)ch << "\' " << hex << ch << "(hex) is ";
      if (isalpha(ch))
         cout << "latin ";
      else if (iscyr(ch))
         cout << "bulgarian ";
      else
         cout << "not a ";
      cout << "letter.\n";
      
      cout << "To Upper it is '" << (char)touppcyr(ch) << "'\n";
      
//      system("Pause");
      return 0;
} 

Е, на (++) уж е, обаче функциите са опряни на здравото българско C :chuckle:
// ЕДИТ По принцип трябва да е int touppcyr(int ch), ама пуст мързел, та чак сега го пооправих...

Мнението беше редактирано от georgedimov: 14.12.12 - 15:17

0

#6
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 4965
  • Регистриран: 26-May 03
  • Репутация: 37
  • Пол:Мъж
  • Град:Велико Търново
Хайде влачете на проста латиница, щом не ви искат и на български :chuckle:
/* Dev-C++ 5.3.0.3 */
#include <stdio.h> /* for general purpose */
#include <conio.h> /* for getch() maybe, not sure ... */
#include <ctype.h> /* for symbol manipulations */
#include <stdlib.h> /* for system() */

char *prompt = {
	"\t\tEnter Your choice:\n\n"
	"0) - To Exit.\n"
	"1) - Entering text by pressing Ctrl+Z, which is stored into a text file.\n"
	"2) - Displays all the vowels and it count from the file.\n"
	"3) - Do all the letters in the file UPPERCASED.\n" 
};

int menu(char *prompt, int low, int high)
{
	int choice;
	
	system("Cls");
	puts(prompt);
	do
	{
		choice = getch() - '0';
	}
	while (choice < low || choice > high);
	printf("%i\n", choice);
	return choice;
}

int isvowel(int ch)
{
	switch (ch)
	{
		case 'a': case 'A':
		case 'e': case 'E':
		case 'i': case 'I':
		case 'o': case 'O':
		case 'u': case 'U':
		case 'w': case 'W':
		case 'y': case 'Y':
			return 1;
			break;
	}
	return 0;
}

main() /* must be int main(int argc, char *argv[]), but ... */
{
	char *in_txt = "in.txt", *OUT_TXT = "OUT.TXT";
	FILE *in_file, *OUT_FILE;
	unsigned count_of_vowels_in_file;
	int ch, choice = 1;
	
	while (choice)
	{
		choice = menu(prompt, 0, 3);
		switch (choice)
		{
			case 0:
				exit(0);
				break; /* not obviously needed here */
			case 1:
				in_file = fopen(in_txt, "wb");
				if (in_file != NULL)
				{
					while ((ch = getch()) != 0x1a) /* CP/M EOF CTRL-Z */
					{
						putchar(ch);
						if (ch == '\r')
							putchar('\n');
						putc(ch, in_file);
					}
					fclose(in_file);
				}
				break;
			case 2:
				in_file = fopen(in_txt, "rb");
				if (in_file != NULL)
				{
					count_of_vowels_in_file = 0;
					while (!feof(in_file))
					{
						ch = getc(in_file);
						if (isvowel(ch))
						{
							count_of_vowels_in_file++;
							putchar(ch);
						}
					}
					fclose(in_file);
					printf("\n\nCount of vowels in file \"%s\" is %u\n", in_txt, count_of_vowels_in_file);
				}
				break;
			case 3:
				in_file = fopen(in_txt, "rb");
				if (in_file != NULL)
				{
					OUT_FILE = fopen(OUT_TXT, "wb");
					if (OUT_FILE != NULL)
					{
						while (!feof(in_file))
						{
							ch = toupper(getc(in_file));
							putchar(ch);
							if (ch == '\r')
								putchar('\n');
							putc(ch, OUT_FILE);
						}
					}
					fclose(in_file);
					fclose(OUT_FILE);
					printf("\n\nUPPERCASED text saved in file \"%s\"\n", OUT_TXT);
				}
				break;
		}
		system("Pause");
	}
	
	return 0;
}

0

#7
Потребителят е неактивен   gooshee 

  • Група: Потребители
  • Мнения: 100
  • Регистриран: 22-April 06
  • Репутация: 0
  • Град:Monastery of Silence
  • Интереси:Killin' MobZ
Нямах нет тези 2 дни. Без кирилица :). Много ви благодаря! :)). Ще почерпя ;)
0

#8
Потребителят е неактивен   you207 

  • Група: Потребители
  • Мнения: 10
  • Регистриран: 04-August 12
  • Репутация: 0
  • Пол:Мъж
  • Град:София
Ще ви помоля за още малко помощ.
Текста е ваведен предварително до вавеждането на CTRL+Z ,като показахне в по горните постове .Пак трябва да е с меню.
1.прочита съдържанието на text.txt и :
извежда всички думи с четири символа ;
намира броя на думите (думите са разделени с интервал или точка);
извежда най-дългата дума ;
2.прочита съдържанието на text.txt и записва нов файл text1.txt , в който всички думи от text.txt се записват на нов ред .

    #include "stdafx.h"
#include <stdlib.h>

int _tmain(int argc, _TCHAR* argv[])
{	int choice,ch;
	int count;
	int c;
	FILE *file_ptr;
	while(1) 
{
  printf("\t**************************************************"
);
  printf("\n\t*                      MENU                      *");
  printf("\n\t*                                                *");
  printf("\n\t* 1.Vavedete tekst                               *");
  printf("\n\t* 2.Statisticheska obrabotka na teksta           *");
  printf("\n\t* 3.Zapisvane na dumite na nov red               *");
  printf("\n\t* vav fail text1.txt                             *");
  printf("\n\t* 4.Izvejdane na sadarjanieto na text1.txt       *");
  printf("\n\t* 5.Krai na rabotata s programata                *");
  printf("\n\t*                                                *");
  printf("\n\t**************************************************"
);
  printf("\n\n\tNapravete izbor:");
  scanf ("%d", &choice);
  switch (choice)
  {
  case 1:
	file_ptr = fopen("text.txt","wb");
	if(file_ptr !=NULL){
		printf("\n\tVavedete teksta(do vavejdaneto na CTRL/Z):\n");
		while ((ch = getchar()) != 0x1a)
		{ 
		 putc(ch, file_ptr);
		}
	}
	 fclose(file_ptr);
	 printf("\n\tTeksta e zapazen vav fail text.txt\n");break;
  case 2:
	 count = 0;  
   
    file_ptr=fopen("text.txt","r");  
	if(file_ptr !=NULL)
     
    while ((c = fgetc(file_ptr))!= EOF)   

    {  

         if (c  == ' ' || c=='.')  

             count++;  
     }  

     fclose(file_ptr);  

     printf ("\n\tBroia dumi e : %d\n\n", count);break; 

  case 3:
  case 4:
  case 5:exit(0);
  default: printf("\n\tNevaliden izbor\n\n");break;

  }


}
	return 0;
}

До тук сам стигнал.
Но броя думи е с 1 по-малко.

Мнението беше редактирано от you207: 16.12.12 - 21:18

0

#9
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 4965
  • Регистриран: 26-May 03
  • Репутация: 37
  • Пол:Мъж
  • Град:Велико Търново

Преглед на мнениеyou207, на 16.12.12 - 20:22, каза:

Ще ви помоля за още малко помощ.
Текста е ваведен предварително до вавеждането на CTRL+Z ,като показахне в по горните постове .Пак трябва да е с меню.
1.прочита съдържанието на text.txt и :
извежда всички думи с четири символа ;
намира броя на думите (думите са разделени с интервал или точка);
извежда най-дългата дума ;
2.прочита съдържанието на text.txt и записва нов файл text1.txt , в който всички думи от text.txt се записват на нов ред .
...
До тук сам стигнал.
Но броя думи е с 1 по-малко.

Изобщо метода за броене на "думи" е доста интересен :unsure:
В случая не броиш само последната, вероятно защото след нея няма ' ' или '.' :unsure: Но, ако имаш примерно '...' ще компенсираш :chuckle:
Ама, то има и други разделители '\t', ',', ';', '!', '?'
0

#10
Потребителят е неактивен   you207 

  • Група: Потребители
  • Мнения: 10
  • Регистриран: 04-August 12
  • Репутация: 0
  • Пол:Мъж
  • Град:София
Условието е такова - думите да са разделени с интервал или '.' .

#include "stdafx.h"
#include <stdlib.h>
#define IN 1 
#define OUT 0 
int _tmain(int argc, _TCHAR* argv[])
{	int choice,ch,c1,c2;
	int c, nw , state;
	FILE *file_ptr,*file_ptr1;
	while(1) 
{
  printf("**************************************************"
);
  printf("\n*                      MENU                      *");
  printf("\n*                                                *");
  printf("\n* 1.Vavedete tekst                               *");
  printf("\n* 2.Statisticheska obrabotka na teksta           *");
  printf("\n* 3.Zapisvane na dumite na nov red               *");
  printf("\n* vav fail text1.txt                             *");
  printf("\n* 4.Izvejdane na sadarjanieto na text1.txt       *");
  printf("\n* 5.Krai na rabotata s programata                *");
  printf("\n*                                                *");
  printf("\n**************************************************"
);
  printf("\n\nNapravete izbor:");
  scanf ("%d", &choice);
  switch (choice)
  {
  case 1:
	file_ptr = fopen("text.txt","wb");
	if(file_ptr !=NULL){
		printf("\nVavedete teksta(do vavejdaneto na CTRL/Z).\nDumite otdeliate sas interval ili '.':\n");
		while ((ch = getchar()) != 0x1a)
		{ 
		 putc(ch, file_ptr);
		}
	}
	 fclose(file_ptr);
	 printf("\nTeksta e zapazen vav fail text.txt\n");break;
  case 2:
	   
   int c, nw , state;
   
    file_ptr=fopen("text.txt","r");  
	
        
		state = OUT;
		 nw =  0;
		while ((c = fgetc(file_ptr))!= EOF) {

			if (c == ' ' || c == '.' )
			state = OUT;
			else if (state == OUT) {
			state = IN;
			++nw;
			}  
		}
     fclose(file_ptr);  

     printf ("\nBroia dumi e : %d\n\n", nw);break; 

  case 3: 
	  
		  file_ptr=fopen("text.txt","r");
		  file_ptr1=fopen("text1.txt","w");
	         
      while ((c1 = fgetc(file_ptr)) != EOF) {
    if (c1 == ' ' || c1 == '.') {
        fputc('\n',file_ptr1);
		
    }
    else {  
		

           
			
            fputc(c1,file_ptr1);

			}    

		}    
	
     fclose(file_ptr);    

     fclose(file_ptr1);

	 printf ("\nSadarjanieto na text.txt e zapisano v text1.txt.\n\n");break; 

  case 4:

	  file_ptr1 = fopen( "text1.txt" , "r");
	printf("Sadarjanieto na text1.txt e:\n");
    while((c2=getc(file_ptr1))!=EOF)
		printf("%c",c2);
    fclose(file_ptr1);
	printf("\n\n");break;

  case 5:exit(0);
  default: printf("\nNevaliden izbor\n\n");break;

  }




	
	return 0;
}




При прочита съдържанието на text.txt и записва нов файл text1.txt , в който всички думи от text.txt се записват на нов ред :
Ако в техт.тхт е записано
ааа ааа ааа
в техт1.тхт записва :
\n
aaa
aaa
aaa

Как мога да го управа без първо да слага \n.

Само тези не ги схащам вопще:
извежда всички думи с четири символа ;
извежда най-дългата дума ;

Мнението беше редактирано от you207: 17.12.12 - 09:32

0

#11
Потребителят е неактивен   you207 

  • Група: Потребители
  • Мнения: 10
  • Регистриран: 04-August 12
  • Репутация: 0
  • Пол:Мъж
  • Град:София
Bump.. :/
0

#12
Потребителят е неактивен   you207 

  • Група: Потребители
  • Мнения: 10
  • Регистриран: 04-August 12
  • Репутация: 0
  • Пол:Мъж
  • Град:София
Hi salem!
0

#13
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 4965
  • Регистриран: 26-May 03
  • Репутация: 37
  • Пол:Мъж
  • Град:Велико Търново

Преглед на мнениеyou207, на 23.12.12 - 08:47, каза:

Hi salem!

Еврейче или палестинче, защо не си смениш компилатора :unsure:
0

#14
Потребителят е неактивен   bogitospeca 

  • Преглед на блога
  • Група: Потребители
  • Мнения: 124
  • Регистриран: 17-May 05
  • Репутация: 4
  • Пол:Мъж
  • Град:Пловдив
Моля те, не пиши такива грозни спамове от printf-s. Използвай функционалността на тази така приятна функция:

printf( "**************************************************"

	"\n*                      MENU                      *"
	"\n*                                                *"
	"\n* 1.Vavedete tekst                               *"
	"\n* 2.Statisticheska obrabotka na teksta           *"
	"\n* 3.Zapisvane na dumite na nov red               *"
	"\n* vav fail text1.txt                             *"
	"\n* 4.Izvejdane na sadarjanieto na text1.txt       *"
	"\n* 5.Krai na rabotata s programata                *"
	"\n*                                                *"
	"\n**************************************************"
);

Мнението беше редактирано от bogitospeca: 25.12.12 - 03:20

0

#15
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 4965
  • Регистриран: 26-May 03
  • Репутация: 37
  • Пол:Мъж
  • Град:Велико Търново

Преглед на мнениеbogitospeca, на 25.12.12 - 03:19, каза:

Моля те, не пиши такива грозни спамове от printf-s. Използвай функционалността на тази така приятна функция:

printf( "**************************************************"

	"\n*                      MENU                      *"
	"\n*                                                *"
	"\n* 1.Vavedete tekst                               *"
	"\n* 2.Statisticheska obrabotka na teksta           *"
	"\n* 3.Zapisvane na dumite na nov red               *"
	"\n* vav fail text1.txt                             *"
	"\n* 4.Izvejdane na sadarjanieto na text1.txt       *"
	"\n* 5.Krai na rabotata s programata                *"
	"\n*                                                *"
	"\n**************************************************"
);


би трябвало, да си отвори нова тема, ама желае да спами :sadsad:
Весела Коледа!

Мнението беше редактирано от georgedimov: 25.12.12 - 20:03

0

Споделете тази тема чрез:


Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

1 потребители четат тази тема
0 регистрирани потребители, 1 гости и 0 анонимни потребители



Close  Member Login