2015-12-24 4 views
-2

Так что я некоторое время работаю над этими программами. Они для курса, который я беру. Я работал над ними некоторое время, и я застрял сейчас. Я немного нуб, когда дело доходит до C, и я не ожидаю чего-то слишком сложного (я нахожусь на уровне многомерных массивов, строк и рекурсии и всех этих забавных вещей). Вот две проблемы, с которыми я сейчас сталкиваюсь. Любая помощь очень и искренне ценится. (Я прошу прощения, если мой английский не является хорошим, его не мой первый язык)Нужна помощь для заданий

ПЕРВАЯ ПРОГРАММА:

Написать программу с рекурсивной функцией, которая принимает целое число п в качестве параметра и возвращает сумму из первых n элементов в следующей последовательности, ½ + 2/3 + ¾ .... + n/n + 1

Имя функции должно быть суммой. Распечатайте результат в главном окне.

Эта программа почти закончена, мне просто нужно выяснить, как сделать ее рекурсивной. Мой прогресс в pastebin в конце этого поста. Я действительно не могу придумать способ сделать его рекурсивным.

#include <stdio.h> 

int sum (int n); 

//************************************************************** 
// NAME:  main 
// PURPOSE: get n's value and call sum function, print result 
// PASSED: none 
// RETURNED: none 
//************************************************************** 
int main() { 
    int n, add; 
    printf("Enter a number: "); 
    scanf("%d", &n); 
    add=sum(n); 
    printf("The result is %d.", add); 
} 

//************************************************* 
// NAME:  sum 
// PURPOSE: calculate the sum of n/n+1 until n=0 
// PASSED: int n 
// RETURNED: none 
//************************************************* 
int sum (int n) { 
    int i, total=0; 
    for (i=0; i<n; i++) { 
     total+=n/(n+1); 
     n--; 
    } 
} 

ВТОРАЯ ПРОГРАММА (один я действительно REAAAAAAALY нужна помощь): Я сделал Imgur альбом с скрин-шоты, чтобы не делать это слишком долго, вот что мне нужно сделать: теория http://imgur.com/a/q5Ein

Set в общем, сбивает с толку, и у меня есть некоторый прогресс в этом. Моя проблема прямо сейчас - я понятия не имею, с чего начать на подмножестве A в части B (и т. Д.), И я не знаю, как я буду выводить Trues и Falses в качестве символов. Я подумывал сделать еще один огромный цикл «за» и проверить индекс для вывода буквы, но это кажется несколько непрактичным. У меня также нет CLUE, как typedef будет работать для всего этого.

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include "simpio.h" 
#include "strlib.h" 

char C; 
//char array1[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; 
//char array2[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; 

bool array1[26] = {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}; 
bool array2[26] = {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}; 
bool union_array[26]; 
bool intersect_array[26]; 

char A[26]; 
char B[26]; 

bool unions (bool array1[26], bool array2[26]); 
bool intersection (bool array1[26], bool array2[26]); 
void contain(char A[], char B[]); 

int main() { 
    int x=0; 
    printf("\nEnter the values of A. Enter a \".\" when done:\n"); 
    do { 
     scanf(" %c", &A[x]); 
     if (A[x]=='.') { 
      A[x]='\0'; 
      break; 
     } 
     x++; 
    } while (A[x]!='.' && x!=26); 
    x=0; 
    printf("\nEnter the values of B. Enter a \".\" when done:\n"); 
    do { 
     scanf(" %c", &B[x]); 
     if (B[x]=='.') { 
      B[x]='\0'; 
      break; 
     } 
     x++; 
    } while (B[x]!='.' && x!=26); 


    for (x=0;x<26;x++) { 
     if (A[x]=='a') {array1[0]=true;} 
     if (A[x]=='b') {array1[1]=true;} 
     if (A[x]=='c') {array1[2]=true;} 
     if (A[x]=='d') {array1[3]=true;} 
     if (A[x]=='e') {array1[4]=true;} 
     if (A[x]=='f') {array1[5]=true;} 
     if (A[x]=='g') {array1[6]=true;} 
     if (A[x]=='h') {array1[7]=true;} 
     if (A[x]=='i') {array1[8]=true;} 
     if (A[x]=='j') {array1[9]=true;} 
     if (A[x]=='k') {array1[10]=true;} 
     if (A[x]=='l') {array1[11]=true;} 
     if (A[x]=='m') {array1[12]=true;} 
     if (A[x]=='n') {array1[13]=true;} 
     if (A[x]=='o') {array1[14]=true;} 
     if (A[x]=='p') {array1[15]=true;} 
     if (A[x]=='q') {array1[16]=true;} 
     if (A[x]=='r') {array1[17]=true;} 
     if (A[x]=='s') {array1[18]=true;} 
     if (A[x]=='t') {array1[19]=true;} 
     if (A[x]=='u') {array1[20]=true;} 
     if (A[x]=='v') {array1[21]=true;} 
     if (A[x]=='w') {array1[22]=true;} 
     if (A[x]=='x') {array1[23]=true;} 
     if (A[x]=='y') {array1[24]=true;} 
     if (A[x]=='z') {array1[25]=true;} 
    } 

    for (x=0;x<26;x++) { 
     if (B[x]=='a') {array2[0]=true;} 
     if (B[x]=='b') {array2[1]=true;} 
     if (B[x]=='c') {array2[2]=true;} 
     if (B[x]=='d') {array2[3]=true;} 
     if (B[x]=='e') {array2[4]=true;} 
     if (B[x]=='f') {array2[5]=true;} 
     if (B[x]=='g') {array2[6]=true;} 
     if (B[x]=='h') {array2[7]=true;} 
     if (B[x]=='i') {array2[8]=true;} 
     if (B[x]=='j') {array2[9]=true;} 
     if (B[x]=='k') {array2[10]=true;} 
     if (B[x]=='l') {array2[11]=true;} 
     if (B[x]=='m') {array2[12]=true;} 
     if (B[x]=='n') {array2[13]=true;} 
     if (B[x]=='o') {array2[14]=true;} 
     if (B[x]=='p') {array2[15]=true;} 
     if (B[x]=='q') {array2[16]=true;} 
     if (B[x]=='r') {array2[17]=true;} 
     if (B[x]=='s') {array2[18]=true;} 
     if (B[x]=='t') {array2[19]=true;} 
     if (B[x]=='u') {array2[20]=true;} 
     if (B[x]=='v') {array2[21]=true;} 
     if (B[x]=='w') {array2[22]=true;} 
     if (B[x]=='x') {array2[23]=true;} 
     if (B[x]=='y') {array2[24]=true;} 
     if (B[x]=='z') {array2[25]=true;} 
    } 


    printf("\nFor the sets: \n"); 

    printf("A = {"); 
    for (x=0; x<sizeof(A); x++) { 
     if (A[x]=='\0') {break;} 
     printf("%c, ", A[x]); 
    } 
    printf("\b\b}\n"); 

    printf("B = {"); 
    for (x=0; x<sizeof(B); x++) { 
     if (B[x]=='\0') {break;} 
     printf("%c, ", B[x]); 
    } 
    printf("\b\b}\n"); 

    unions(array1, array2); 
    intersection(array1, array2); 
} 

bool unions (bool array1[26], bool array2[26]) { 
    int x=0; 
    for (x=0;x<26;x++) { 
     if (array1[x]==true || array2[x]==true) {union_array[x]=true;} 
    } 
    printf("A Union B = {"); 
    for (x=0; x<26; x++) { 
     if (union_array[x]==true) {printf("T, ");} 
     if (union_array[x]==false) {printf("F, ");} 
    } 
    printf("\b\b}\n\n"); 
} 

bool intersection (bool array1[26], bool array2[26]) { 
    int x=0; 
    for (x=0;x<26;x++) { 
     if (array1[x]==true && array2[x]==true) {intersect_array[x]=true;} 
    } 
    printf("A Intersect B = {"); 
    for (x=0; x<26; x++) { 
     if (intersect_array[x]==true) {printf("T, ");} 
     if (intersect_array[x]==false) {printf("F, ");} 
    } 
    printf("\b\b}\n"); 
} 

Вот текст дамп моего кода: http://pastebin.com/nZugygkJ

умножу признателен за любую помощь вы можете предложить. :)

+4

Пожалуйста, ваш код _in в question_, а не снаружи. – Arc676

+2

Это не способ задать ваши вопросы. Пожалуйста, сломайте его. Один пост для одного основного вопроса. А затем включите любой код, который вы делали до сих пор. – itsols

+1

'total + = n/(n + 1)': 'n/(n + 1)' всегда становится '0'. – BLUEPIXY

ответ

0

Я дам вам несколько указателей на второй вопрос, но не решит все это для вас.

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

  2. Что касается typedef, то данная подсказка полезна. Вы должны сделать тип letters. Это будет массив размером 26 типа boolean.

    typedef boolean letters[26]; 
    

    Вы можете использовать этот тип для передачи наборов функций.

  3. Что касается функции подмножества, алгоритм идет примерно так.

    Subset = 1; // Subset is 1 if arr1 is a subset of arr2 
    for (i=0; i<26; i++) 
    { 
        if (arr[i] == 'T') 
        { 
         if (arr2[i] != 'T') 
         { 
          Subset = 0; 
         } 
        } 
    }  
    
Смежные вопросы