Поиск в одномерном массиве
Составить программу, в которой составляется массив C[1..100] из псевдослучайных символов из диапазона CHR(65)-CHR(90) и определить, какие символы встречаются в этом массиве 2, 3 или 4 раза.
Если что - с меня пиво :)
Всем доброе время суток. Мне очень нужна Ваша помощь в решении одной задачки. Буду очччень благодарен всем тем, кто мне поможет.
Составить программу, в которой составляется массив C[1..100] из псевдослучайных символов из диапазона CHR(65)-CHR(90) и определить, какие символы встречаются в этом массиве 2, 3 или 4 раза.
Если что - с меня пиво :)
для начала с тебя код который можешь написать+язык на котором тебе нужно написать :)
обычно для таких прог удобно использовать массив счетчик
для начала с тебя код который можешь написать+язык на котором тебе нужно написать :)
обычно для таких прог удобно использовать массив счетчик
Ставлю свой старый тапок, на то, что язык - Паскаль.
Но суть в другом - что то я в не понял, что за "массив счетчик"?
Ставлю свой старый тапок, на то, что язык - Паскаль.
Но суть в другом - что то я в не понял, что за "массив счетчик"?
так зачем мне твой старый тапок что бы отвечать, ты ченибудь посерьезней предложи
так зачем мне твой старый тапок что бы отвечать, ты ченибудь посерьезней предложи
Писать за студента? Нееее....когда. Тапок то тебе не зачем. Меня заинтересовал "массив счетчи" - я тебя про него и спросил. А ты не колешься.
Писать за студента? Нееее....когда. Тапок то тебе не зачем. Меня заинтересовал "массив счетчи" - я тебя про него и спросил. А ты не колешься.
Учитывая что у меня должек - колюсь :), и тапочек не надо, себе оставь
int main(void)
{
int i, counter[26] = {0};
char str[] = "ABBTYUEWWFDSCBAAMR";
for( i = 0; str != '\0'; i++)
counter[str-'A']++;
for( i = 0; i < 26; i++)
printf("%3c - %d\n\n", (i+'A'), counter);
return 0;
}
Учитывая что у меня должек - колюсь :), и тапочек не надо, себе оставь
int main(void)
{
int i, counter[26] = {0};
char str[] = "ABBTYUEWWFDSCBAAMR";
for( i = 0; str != '\0'; i++)
counter[str-'A']++;
for( i = 0; i < 26; i++)
printf("%3C - %d\n\n", (i+'A'), counter);
return 0;
}
Ясно. Я бы по другому сделал.
Ясно. Я бы по другому сделал.
Так поделись, если не жалко
Не будем отвлекаться от темы...
Pascal:
A:Array [65..90] Of Integer;
...
Randomize;
For i:=1 To 100 Do Inc(A[Random(25)+65]);
For i:=65 To 90 Do If (A>1) And (A<5) Then Write(Chr(i),' ');
...
обычно для таких прог удобно использовать массив счетчик[/quote]
Ой, прошу прощения... Borland С++.
[quote=pacific_7]Писать за студента? Нееее....когда.[/quote]
Да, Вы в принцыпе правы, на кой, мол, я должен мучаться, ничего не получая в замен. Но просто мне нужна помощь, вот и все. Не помогать - ваше право. Моя прога, по сути, не отличается сложностью, я попросту не могу понять алгоритм поиска ...
Спасибо OlgaKr за помощь, но что-то тут не то. На экран выводится какая-то чертовщина...
Давайте будем отталкиваться от следующего. Вот на экран выводиться одномерный массив из 100 элементов ( меня только на это и хватило :D...)
#include <stdlib.h>
#include <conio.h>
#define col 100 // Количество элементов в массиве
main ()
{
clrscr ();
randomize ();
char a[col];
int i;
for (i=0; i<col; i++)
{
a=65+random(25);
cout <<" " << a;
}
getch ();
}
В результате на экране появится типа
----------------------
ABFIEJDFDFAS ну и т.д.
----------------------
А вот алгоритм поиска у меня и не выходит. На экране должно быть что-то вроде этого :
------------------------------------
Такие-то символы повторяются 4 раза
такие-то только 3
А вот такие-то всего-лишь 2
------------------------------------
P.S. Как правильно тут у вас оформлять цитаты?
Да, Вы в принцыпе правы,
Ой, ну не надо такого официоза! Можно и на "ты".
Моя прога, по сути, не отличается сложностью, я попросту не могу понять алгоритм поиска ...
Какая конкретно строчка из того, что написала тебе Ольга, не ясна?
Спасибо OlgaKr за помощь, но что-то тут не то. На экран выводится какая-то чертовщина...
Да ладно тебе! Всё правильно выводится. Только думали, что ты сам доделаешь, но ты какой-то нерешительный.
В общем, тебе повезло - у меня сегодня хорошее очень настроение создалось после того как вздремнул. Наверное от того, что сон приснился хороший :)
Держи, совместная сборка твоего и Олиного решения. С небольшими патчами от меня:
#include <stdio.h>
#include <conio.h>
#define COUNT 1000
int main(void)
{
char a[COUNT];
int i;
for (i=0; i<COUNT; i++)
{
a=65+(rand()%26);
printf("%c|%d ",a,a);
}
getch ();
int counter[26] = {0};
for( i = 0; a != '\0'; i++)
counter[a-'A']++;
printf("\nSummary:\n");
for( i = 0; i < 26; i++)
if(counter)printf("%3C - %d\n\n", (i+'A'), counter);
return 0;
}
Если чего-то недопонял - спрашивай.
ЗЫ По поводу цитат - посмотри как они автоматом оформляются когда нажимаешь ссылку "ответить".
Ой, ну не надо такого официоза! Можно и на "ты".
ОК, wharever you say.
Если чего-то недопонял - спрашивай.
Мне непонятен результат того, что выводиться на экран ( здесь кол-во элементов для наглядности сделал равным 10:
Мне непонятен результат того, что выводиться на экран ( здесь кол-во элементов для наглядности сделал равным 10:
Блин, хорошую ты траву куришь :) Как ты добился такого результата? Я специально для тебя в билдере пересобрал пример. Вот что получилось:
Блин, хорошую ты траву куришь
Моя анаша называется С++ 3.1
К сожаленью, CBuilder'a нет. В чем у меня обшибка?
Моя анаша называется С++ 3.1
К сожаленью, CBuilder'a нет. В чем у меня обшибка?
Ты точно функцией printf() выводишь эту информацию? Потому что бред какой-то получается. Почему-то она как будто бы не понимает стандартные спецификаторы, и вместо того, что бы вывести аргументы согласно этим спецификаторам, выводит сами спецификаторы. Бред. Совет - найди нормальный компилятор. Хотя бы VC++ 6.0
Моя анаша называется С++ 3.1
К сожаленью, CBuilder'a нет. В чем у меня обшибка?
переделай вывод как принято в С++
%С - вывод символа(на 3 не обращай внимание)
%d - вывод целого числа
printf() - функция вывода
... На экране должно быть что-то вроде этого :
------------------------------------
Такие-то символы повторяются 4 раза
такие-то только 3
А вот такие-то всего-лишь 2
------------------------------------
#include <stdio.h>
#include <conio.h>
#define COUNT 100
int compare(const void *arg1, const void *arg2)
{
if((*(int *)arg1&0xFFFF0000)==(*(int *)arg2&0xFFFF0000))
return (*(int *)arg1&0xFFFF) - (*(int *)arg2&0xFFFF);
else
return *(int *)arg2 - *(int *)arg1;
}
int main(void)
{
char a[COUNT];
int i;
for (i=0; i<COUNT; i++)
{
if(i%10==0)printf("\n");
a=65+(rand()%26);
printf("%c|%4d ",a, i);
}
getch ();
int counter[26]={0};
for(i=0;i<COUNT;i++)
counter[a-'A']++;
for(i=0;i<COUNT;i++)
counter = (counter<<16) + i;
qsort(counter, 26, sizeof(int), compare);
printf("\n-----------------------------------------------------");
int n = -1;
for(i=0;i<26;i++)
{
int j = (counter&0xFFFF0000)>>16;
if(j==0)break;
if(j!=n)
{
n = j;
printf("\npovtorjajutsza %3d raz: ", n);
}
printf("%3C", 'A' + counter&0xFFFF);
}
printf("\n-----------------------------------------------------\n");
getch();
return 0;
}
переделай вывод как принято в С++
%С - вывод символа(на 3 не обращай внимание)
%d - вывод целого числа
printf() - функция вывода
%с, а не %С - с маленькой буквы надо было писать. Теперь все вроде работает. Фух... Всем аригато годзаимас!!!
counter = (counter<<16) + i;
qsort(counter, 26, sizeof(int), compare);
printf("\n-----------------------------------------------------");
int n = -1;
for(i=0;i<26;i++)
{
int j = (counter&0xFFFF0000)>>16;
if(j==0)break;
if(j!=n)
{
n = j;
printf("\npovtorjajutsza %3d raz: ", n);
}
printf("%3C", 'A' + counter&0xFFFF);
}
printf("\n-----------------------------------------------------\n");
getch();
return 0;
}
И для чего необходим этот кусок?
%с, а не %С - с маленькой буквы надо было писать. Теперь все вроде работает. Фух... Всем аригато годзаимас!!!
а в С 6.0 это нормально: %С :)
%с, а не %С - с маленькой буквы надо было писать. Теперь все вроде работает. Фух... Всем аригато годзаимас!!!
Почему то мне так и казалось, но решил не спорить с некоторыми :) А в доку лень лезть было.
Но всё равно компилер у тебя убогий. Почему он второе число не выводил?
Почему то мне так и казалось, но решил не спорить с некоторыми ...
ну так ясно дело, ведь ты спорить не любишь :)
И для чего необходим этот кусок?
Чтоб вывод имел вид:
----------------------------------
povtorjajutsza 8 raz : F
povtorjajutsza 6 raz : K N R S Y
povtorjajutsza 5 raz : C E G P V X
...
...
----------------------------------
Чтоб вывод имел вид:
Скажем так, это не задумано ТЗ - это раз. И студентам обычно не разрешают использовать библиотечные функции сортировки. Это два.
Скажем так, это не задумано ТЗ - это раз.
...А вот алгоритм поиска у меня и не выходит. На экране должно быть что-то вроде этого :[color=red]
------------------------------------
Такие-то символы повторяются 4 раза
такие-то только 3
А вот такие-то всего-лишь 2
------------------------------------
[/color]
И студентам обычно не разрешают использовать библиотечные функции сортировки. Это два.
можно и без qsort().