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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2009, 01:47   #1
ONiX
 
Регистрация: 28.02.2009
Сообщений: 5
По умолчанию Проблема с решением задачи на Borland C

Здравствуйте уважаемые пользователи форума программистов. Помогите пожалуйста в решении следующей задачи.
Смысл задачи таков:
Дан массив из N-string строк. Строки имеют произвольную длину, но не превышают 80 символов. Найти и вывести все латинские заглавные буквы(без повторения) которые встретились в этих строках.

застрял именно на том месте что не знаю каким образом выдернуть букву удовлетворяющую условию и как её записать, главное во что.пробовал в другой массив, что-то не то.
вот код того как я делал, естественно нифига неполучается.
Пожалуйста, помогите. заранее большое спасибо.

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>

int main()
{
int n;
int i, j, k, p;


char b[20][80];
char a[20][80];

clrscr();

 printf("Enter kol-vo strok\n");
 scanf("%d",&n);
  for (i=0; i<n; i++)
   {
   printf("a[%d stroka]= ",i);
   scanf("%s", a[i]);
   }
 printf("\n");
 printf("Initial massiv\n");
  for (i=0; i<n; i++)
   {
   printf("%s", a[i]);
   printf("\n");
   }

   for (i=0; i<n; i++)
    {
     for (j=0; j<n; j++)
	{
	if ('A'<=a[i][j]<='Z')
	 {
	  if (a[i][j]!=b[k][p])
	     a[i][j]=b[k][p];
	     j++;
	   }

	   if (a[i][j]==b[k][p])
	 a[i][j]==b[k][p];
	i++;
     j++;
    }
     printf("\n");
     if (b[k][p]==0)
      printf("HET ELEMEHTOB\n");
  }

	printf("\n");
	printf("OutMas\n");
      for (k=0; k<n; k++)
         {
        for (p=0; p<n; p++)
	 {
	  printf("%s",b[k][p]);
	 }
    	 }
   getch();
   return 0;

}
ONiX вне форума Ответить с цитированием
Старый 28.02.2009, 02:13   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

ONiX Сейчас нет времени разбираться в вашем коде, поэтому написал свой вариант.
Принцип прост:
Перебираем латинские заглавные буквы в цикле.
Для текущей буквы проверяем каждый символ каждого слова, пока не найдем равный символ. Если нашли - выводим и переходим к следующей букве во внешнем цикле.


Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>

int main(){
int n,i,j,k;
char c;
char a[20][80];
bool fl,yn=false;

 printf("Enter kol-vo strok\n");
 scanf("%d",&n);
  for (i=0; i<n; i++)
   {
   printf("a[%d stroka]= ",i);
   scanf("%s", a[i]);
   }
 printf("\n");
 printf("Initial massiv\n");
  for (i=0; i<n; i++)
   {
   printf("%s", a[i]);
   printf("\n");
   }
//-------
printf("\n");
for(c='A';c<='Z';c++)
 {
  fl = false;
  for(j=0;j<n;j++)
   {
    for(k=0;k<strlen(a[j]);k++)
     {
      if(a[j][k]==c)
      {
       printf("%c",c);
       fl = true;
       yn = true;
       break;
      }
     }
     if(fl) break;
   }
 }
if(!yn) printf("Net zaglavnyh bukv!\n");
getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.02.2009, 03:08   #3
ONiX
 
Регистрация: 28.02.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
ONiX Сейчас нет времени разбираться в вашем коде, поэтому написал свой вариант.
Принцип прост:
Перебираем латинские заглавные буквы в цикле.
Для текущей буквы проверяем каждый символ каждого слова, пока не найдем равный символ. Если нашли - выводим и переходим к следующей букве во внешнем цикле.
эмм... большое спасибо что откликнулись на мою просьбу, но дело в том, что Borland С определяет тип данных bool как неизвестный. честно говоря ни разу не работал с логическим переменными в Си, поскольку изучать начал не давно, но нашёл в нете что в Си такого типа данных нет вовсе, а есть только в С++. а можно каким-нибудь образом заменить логический тип на что-то другое, или может есть какой-то другой способ? буду благодарен откликнувшимся
ONiX вне форума Ответить с цитированием
Старый 28.02.2009, 03:16   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

ONiX Извиняюсь, не заметил, что у вас Борланд.
Вообще, лично я бы вам посоветовал использовать компилятор посовременнее, т.к. bool - стандартный тип.
В стандарте C99 он требует подключения stdbool.h, а вот в C89 его нет вообще.

Ничего особенного в нем нет. Это логический тип. Такая переменная может находиться в двух состояниях - true (истина) и false (ложь). Его легко заменить на любой целочисленный тип.

Но вам лишние заморочки ни к чему )

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>

int main(){
int n,i,j,k;
char c;
char a[20][80];
short fl,yn=0;

 printf("Enter kol-vo strok\n");
 scanf("%d",&n);
  for (i=0; i<n; i++)
   {
   printf("a[%d stroka]= ",i);
   scanf("%s", a[i]);
   }
 printf("\n");
 printf("Initial massiv\n");
  for (i=0; i<n; i++)
   {
   printf("%s", a[i]);
   printf("\n");
   }
//-------
printf("\n");
for(c='A';c<='Z';c++)
 {
  fl = 0;
  for(j=0;j<n;j++)
   {
    for(k=0;k<strlen(a[j]);k++)
     {
      if(a[j][k]==c)
      {
       printf("%c",c);
       fl = 1;
       yn = 1;
       break;
      }
     }
     if(fl==1) break;
   }
 }
if(yn==0) printf("Net zaglavnyh bukv!\n");
getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.02.2009, 03:16   #5
ONiX
 
Регистрация: 28.02.2009
Сообщений: 5
По умолчанию

апс, сорри. решил логику заменить обычным целым типом данных int и соответсвенно вместо truе и false присвоил соответственно 1 и 0.
всё работает. ещё раз огроменное спасибо, вы мне очень и очень помогли

Последний раз редактировалось ONiX; 28.02.2009 в 03:25.
ONiX вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с решением задачи +Hitman+ Паскаль, Turbo Pascal, PascalABC.NET 9 22.11.2008 15:28
Помогите с решением задачи! Anuta Общие вопросы Delphi 4 26.06.2008 20:26
Возникает проблема с решением задачи. profi Помощь студентам 2 30.11.2007 01:11
Помогите с решением задачи Ga-sergey Помощь студентам 4 11.03.2007 11:13