Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
7 / 7 / 6
Регистрация: 01.11.2012
Сообщений: 55
1

Подсчитать количество голосов, поданных за каждого кандидата

25.01.2013, 23:57. Показов 1018. Ответов 2
Метки нет (Все метки)

Есть задача:
Вводятся фамилии N кандадатив. Подсчитать количество голосов, поданных за каждого. Результаты голосования вводятся с клавиатуры в виде фамилии кандидата, за которого подано голос. Признак окончания - введение 0. Результаты вывести по количеству голосов в порядке убывания.
Мое решение:
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <stdlib.h>
#define N 1000
int main(int argc, char *argv[])
{
char s[N];
char temp; 
int i=0,j=0; char mas[N]; int k=0,l,b[1000],atemp;char a[N];char nol='\0';
while(1)//ВВод массива
{
        temp=getchar();
        if (temp!='0')
        {
                    s[i]=temp;
                    i++;
                    }
                    else break;
                    } //Конец ввода массива
                   i=0;
                    while (s[i]!='\0')//создание масива с введеными именами депутатов (s[1]="Vasiya")
                    //s[2]="Petya" и т д
                    {
                          if (s[i]==' ') 
                          {
                          j+=1;
                          i+=1;
                          }
                          else {
                               mas[j]+=s[i++]//объеденение  строк
                    
                          }// конец создания масива с введеными именами депутатов
                          }
                    
                          for (i=0;i<=j;i++)//создание масива с именами для подсчета голосо
                          {
                              for (l=0;l<=k;)
                              if (mas[i]==a[l]) break;
                              else a[k++]=mas[i];
                              }//конец создания
                              for (i=0;i<=j;i++)//подсчет голосов для каждого депутата
                              for (l=0;l<k;l++)
                              if (mas[i]==a[l]) b[l]+=1;
                              else break; //конец
                              for (i=0;i<=l;i++)
                              for (j=1;j<l-i;j++)//сортировка
                              if (b[j]<b[j+1])  
                              {
                                              atemp=b[j];
                                              b[j]=b[j+1];
                                              b[j+1]=atemp;
                                              temp=a[j];
                                              a[j]=a[j+1];
                                              a[j+1]=temp;
                                              }//конец сортировки
                                              
                                              for (i=0;i<=l;i++)
                                              printf("%s:%d",a[i],b[i]);
                                              // Вывод
                                             
                                              
                                              
  system("PAUSE");  
  return 0;
}

Знаю что много ошибок но немогу сам их устранить, прошу помощи. Чем больше информации тем лучше, си изучаю относительно недавно, читаю учебник кернинга ричи потихоньку, но там не последовательно как-то ...
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2013, 23:57
Ответы с готовыми решениями:

Подсчитать количество голосов поданные за каждого кандидата
Вводятся фамилии N кандидатов. Подсчитать количество голосов, поданные за каждого. Результаты...

Вывести фамилию кандидата, набравшего максимальное количество голосов
В ЭВМ, обслуживающую выборы, вводят следующую информацию: фамилии кандидатов и количество набранных...

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

Вывести максимальный рейтинг каждого кандидата (сумму )
#include &quot;stdafx.h&quot; #include &quot;stdlib.h&quot; #include &quot;time.h&quot; #include &quot;clocale&quot; #include...

2
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
26.01.2013, 02:01 2
Попробуйте лучше учебник Дейтела, если Ритчи не понятен. Кстати в нем решается подобная задача на ЧАСТОТУ ОЦЕНОК СТУДЕНТОВ в главе о массивах. Там предложено очень элегантное решение.
 Комментарий модератора 
Ссылка удалена.
Запрещено размещать любые материалы, нарушающие авторские права (без разрешения правообладателя), а также ссылки на них.
0
7 / 7 / 6
Регистрация: 01.11.2012
Сообщений: 55
27.01.2013, 18:52  [ТС] 3
Спасибо за совет!

Добавлено через 1 час 55 минут
Почитал... похожего задания нету

Запутался основательно, программа не работает и все...(

Добавлено через 6 часов 9 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
int Cmp(const void* a, const void* b){
    return strcmp(*(char**)a, *(char**)b);
}
 
int main(){
    int i=0;char temp;char text[700];
    while((temp=getchar())!='0')
    {     
          if (temp!='\n')   
            text[i++]=temp;             
                  }
                  --i;
    char *p=NULL, *mas[100]={NULL}, **a=mas, **b=mas;
    for(p=strtok(text, " "); p; p=strtok(NULL, " "), ++a){
        *a=p;
    }
    qsort(mas, a-mas, sizeof(*mas), Cmp);
    for(a=mas; *a; ){
        for(b=a; *a&&!strcmp(*b, *a); ++a);
        printf("%-15s %d\n", *b, a-b);
    }
    system("PAUSE");
    return 0;
}
Вот взял за основу код igorrr37(а), все правельно но есть излишки в виде крякозябин и пищания пищика (Что у меня не так?)

Добавлено через 18 часов 6 минут
Вот рабочий код, подскажите почему всетаки возникают ошибки, немогу найти закономерность между вводимыми данными и вылетами
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10000
int main(int argc, char *argv[])
{
char s[N];
char temp; 
int i=0,j=0; char mas[100][N]; int k=0,l,b[10000],atemp;char* a[1000];char nol='\0';int f=0;
while(1)//AAia ianneaa
{
        temp=getchar();
        if (temp!='0')
        {
                    s[i++]=temp;
                    }
                    else break;
                    } //Eiiao aaiaa ianneaa
                    s[i]=' ';
                   i=0;
                    while (s[i]!='\0')//nicaaiea ianeaa n aaaaaiuie eiaiaie aaiooaoia (s[1]="Vasiya")
                    //s[2]="Petya" e o a
                    {
                          if (s[i]==' ' | s[i]=='\n')
                          {
                          //mas[j][f]=NULL;
                         // if (j>=0) printf("%s",mas[j]);
                          j+=1;
                          i+=1;
                          f=0;
                          printf("\n");
                          }
                          else {
                               mas[j][f++]=s[i++];
                          }
                          
                          //iauaaaiaiea  no?ie
                          // eiiao nicaaiey ianeaa n aaaaaiuie eiaiaie aaiooaoia
                          }
                          --f;
                          j--;
a[0]=mas[0]; int mark=0;
                        for (i=0;i<=j;i++)//nicaaiea ianeaa n eiaiaie aey iian?aoa aieini
                          {
                             for (l=0;l<=k;)
                            if (strcmp(mas[i],a[l])==0)
                            {
                                
                             break;
                        }
                             else
                             {
                             if (l>=k) a[++k]=mas[i];
                             //printf("%d\n",strcmp(a[k-1],mas[i]));
                             l++;
                        
                        }
                        
                            }
                           
                          
                              //eiiao nicaaiey
                     
                           for (i=0;i<=j;i++)//iian?ao aieinia aey ea?aiai aaiooaoa
                              for (l=0;l<=k;l++)
                             if (strcmp(mas[i],a[l])==0) 
                             {
                            b[l]+=1;
                             break;
                             }
                             // printf("%d,%s", b[0],a[0]);
                             // printf("%d,%s", b[1],a[l]);
                              
                              
                               //eiiao
                            for (i=0;i<=k;i++)
                             for (j=0;j<k-i-1;j++)//ni?oe?iaea
                             if (b[j]<b[j+1])  
                            {
                                             atemp=b[j];
                                             b[j]=b[j+1];
                                              b[j+1]=atemp;
                                              temp=a[j];
                                             a[j]=a[j+1];
                                              a[j+1]=temp;
                                             }//eiiao ni?oe?iaee
                                              
                                              for (i=0;i<=k;i++)
                                              printf("%s:%d",a[i],b[i]);
                                              // Auaia
                                             
                                              
                                              
  system("PAUSE");  
  return 0;
}


Добавлено через 54 секунды
код в комментариях пропускайте сразу, он был нужен мне для проверки
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2013, 18:52

Удалить из каждого списка два элемента после каждого элемента с нечетным значением и подсчитать количество удаленных
Вот честно не пойму как это сделать буду очень благодарен если кто-то поможет

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

Подсчитать количество каждого числа в последовательности
Сгенерировать заданное кол-во n целых чисел в диапазоне от 0 до m. Подсчитать кол-во каждого числа...

Подсчитать количество ячеек каждого цвета
Рабочий лист раскрашен в 3 цвета. Внести в ячейки значения: в красные - 5, в желтые - 10, синие -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru