Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2011, 16:43   #1
nd0ut
 
Регистрация: 06.02.2011
Сообщений: 4
По умолчанию Как переписать с Pascal на C(++)?

Задача:
Цитата:
На вход программе подается последовательность символов, заканчивающаяся символом #. Другие символы # во входной последовательности отсутствуют.

Программа должна вывести на экран символы латинского алфавита, в порядке увеличения частоты встречаемости во входной последовательности.

Если буква во входной последовательности не встречается, её выводить не нужно.

Если несколько букв встречаются одинаковое количество раз, программа должна вывести их в алфавитном порядке.

Строчные и прописные буквы не различаются.

Пример входных данных: "Aced, ccedaa f#"
Пример выходных данных: "FDEAC"
Решение на паскале:
Код:
var c,h,r:char;
  num:array['A'..'Z']of integer; {массив кол-ва букв алфавита}
  sym:array['A'..'Z']of char;
  k:integer;
begin
  for c:='A' to 'Z' do
  begin
    num[c]:=0; {обнуляем массив num}
    sym[c]:=c; {заполняем массив sum}
  end;
  
read(c);

while c<>'#' do
begin
  {если текущий символ - буква}
  if(upcase(c)>='A') and (upcase(c)<='Z') then
    inc(num[upcase(c)]); {увеличиваем счетчик кол-ва этой буквы}
  read(c);
end;

for h:='Y' downto 'A' do {bubble сортировка массива num}
  for c:='A' to h do {синхронно переставляем массив sum}
    if num[c]>num[succ(c)] then {если элемент больше первого соседа, их нужно поменять местами}
      begin
        k:=num[c];
        num[c]:=num[succ(c)];
        num[succ(c)]:=k;
        
        r:=sym[c];
        sym[c]:=sym[succ(c)];
        sym[succ(c)]:=r;
      end;
      
h:='A';

while num[h]=0 do {ищем первую букву с ненулевой частотой}
  inc(h);
  for c:=h to 'Z' do {выводим все остальные буквы}
    write(sym[c])
end.
Мне необходимо переписать это под C. Его я знаю крайне плохо, но тем не менее мое чудо даже умудрилось скомпилиться :D Однако, вместо верного ответа пишет весь алфавит.

Код:
#include "StdAfx.h"
#include <stdio.h>
#include <iostream>

void main(void)
{
	char c,h,r;
	int k;
	c = 'ssss'; //иницилизация ))

	int num['z' - 'a'];
	char sym['z' - 'a'];

	for(char i = 'a'; i <= 'z'; i++)
	{
		num[i - 'a']=0;
		sym[i - 'a'] = i;
	}

	scanf("%c", &c);

	while (c != '#') //проблема где-то в этом блоке
	{
		if(c>='a' && c<='z') //условие выполняется нормально
			num[c]++; //а счетчик не увеличивается
		scanf("%c", &c);
	}
	for(h='y';h<='a';h--)
	{
		for(c='a';c<=h;c++)
		{
			if(num[c]>num[c++])
			{
				k=num[c];
				num[c]=num[c++];
				num[c+1]=k;

				r=sym[c];
				sym[c]=sym[c++];
				sym[c+1]=r;
			}
		}
	}

	h='a';

	while(num[h]==0)
		h++;
	for(c=h;c<='z';c++)
		printf("%c",c);

	system("PAUSE");
}

Последний раз редактировалось nd0ut; 07.02.2011 в 16:53.
nd0ut вне форума Ответить с цитированием
Старый 07.02.2011, 19:32   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

красоту не наводил:
Код:
#include <stdio.h>
#include <iostream>

void main(void)
{
	int k,h,r;
	char c;
	c = 'ssss'; //иницилизация ))

	int num[26];
	char sym[26];

	for(char i = 'a'; i <= 'z'; i++)
	{
		num[i - 'a']=0;
		sym[i - 'a'] = i;
	}

	scanf("%c", &c);

	while (c != '#') //проблема где-то в этом блоке
	{
		if(islower(c)) //условие выполняется нормально
			num[c-'a']++; //а счетчик не увеличивается
		scanf("%c", &c);
	}
	for(h=24;h>=0;h--)
	{
		for(c=0;c<=h;c++)
		{
			if(num[c]>num[c+1])
			{
				k=num[c];
				num[c]=num[c+1];
				num[c+1]=k;

				r=sym[c];
				sym[c]=sym[c+1];
				sym[c+1]=r;
			}
		}
	}

	h=0;

	while(num[h]==0)
		h++;
	for(c=h;c<=25;c++)
		printf("%c",sym[c]);

	system("PAUSE");
}
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 07.02.2011, 19:52   #3
nd0ut
 
Регистрация: 06.02.2011
Сообщений: 4
По умолчанию

Спасибо, но ответ получается несколько не верный: FADEC. Пытаюсь понять, почему

UPD: ага, ясно, дело в заглавной букве.

Рабочий код, если кому вдруг понадобится:
Код:
#include "StdAfx.h"
#include <stdio.h>
#include <iostream>

void main(void)
{
	int k,h,r;
	char c;
	c = 'ssss';

	int num[26];
	char sym[26];

	for(char i = 'a'; i <= 'z'; i++)
	{
		num[i - 'a']=0;
		sym[i - 'a'] = i;
	}

	scanf("%c", &c);

	while (c != '#') 
	{
		if(tolower(c)>='a' && tolower(c)<='z') 
			num[tolower(c)-'a']++; 
		scanf("%c", &c);
	}
	for(h=24;h>=0;h--)
	{
		for(c=0;c<=h;c++)
		{
			if(num[c]>num[c+1])
			{
				k=num[c];
				num[c]=num[c+1];
				num[c+1]=k;

				r=sym[c];
				sym[c]=sym[c+1];
				sym[c+1]=r;
			}
		}
	}

	h=0;

	while(num[h]==0)
		h++;
	for(c=h;c<=25;c++)
		printf("%c",toupper(sym[c]));
	printf("\n");

	system("PAUSE");
}

Последний раз редактировалось nd0ut; 07.02.2011 в 19:58.
nd0ut вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переписать insolent Общие вопросы C/C++ 6 24.08.2010 14:32
Как переписать проги на С# PDV199003 Помощь студентам 0 04.06.2010 15:56
Нужно переписать программу с pascal на С++ ALiKa ALiK Помощь студентам 2 02.05.2010 22:01
Код игры на Паскале и на Делфи сильно отличается? Как переписать код с Паскаля в Делфи? Mclaren Помощь студентам 2 27.04.2009 22:37
как переписать код программы с книги, потом сохранить и скомпилировать? Graff_1 Помощь студентам 3 14.05.2008 16:21