課題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
wakimo

課題

#1

投稿記事 by wakimo » 16年前

はじめまして、学校の課題について質問させていただきます。
C言語のプログラミングの授業でqueueを実装しろという課題が出されました。そこで以下のようなプログラムを組みました。
#include <stdio.h>

#define SIZE 5

int head = 1;
int tail = 1;
double queue[SIZE]={0};

void enqueue(double z)
{
  if ((tail%SIZE+1) == head%SIZE)
    printf("データがいっぱいです\n");
  else if (tail%SIZE+1 != head%SIZE) {
    queue[tail-1 % SIZE] = z;
    tail++;
  }
}

double dequeue(void)
{
  int i,k = queue[0];

  if ((head % SIZE) != (tail % SIZE)) {
    for (i = 1; i <= tail; i++) {
      queue[i-1] = queue;
      queue = 0;
    }
    tail--;
  }
  else
    printf("データがありません\n");
  return k;
}

void print(void)
{
  int j;
 
  printf("queue[/url] = |");
  for(j = 0; j < SIZE-1; j++)
    {
      printf("%2.1f | ", queue[j]);
    }
  printf("\n");
}

int main()
{
  enqueue(100);
  print();
  enqueue(30);
  print();
  enqueue(50);
  print();
  enqueue(40);
  print();
  enqueue(60);
  print();
  enqueue(6);
  print();
  enqueue(60);
  print();
  enqueue(7);
  print();
  dequeue();
  print();
  dequeue();
  print();
  dequeue();
  print();
  dequeue();
  print();
  dequeue();
  print();
  dequeue();
  print();

  return 0;
}

これを実行すると

queue[/url] = |100.0 | 0.0 | 0.0 | 0.0 |
queue[/url] = |100.0 | 30.0 | 0.0 | 0.0 |
queue[/url] = |100.0 | 30.0 | 50.0 | 0.0 |
queue[/url] = |100.0 | 30.0 | 50.0 | 40.0 |
データがいっぱいです
queue[/url] = |100.0 | 30.0 | 50.0 | 40.0 |
データがいっぱいです
queue[/url] = |100.0 | 30.0 | 50.0 | 40.0 |
データがいっぱいです
queue[/url] = |100.0 | 30.0 | 50.0 | 40.0 |
データがいっぱいです
queue[/url] = |100.0 | 30.0 | 50.0 | 40.0 |
queue[/url] = |30.0 | 50.0 | 40.0 | 0.0 |
queue[/url] = |50.0 | 40.0 | 0.0 | 0.0 |
queue[/url] = |40.0 | 0.0 | 0.0 | 0.0 |
queue[/url] = |0.0 | 0.0 | 0.0 | 0.0 |
データがありません
queue[/url] = |0.0 | 0.0 | 0.0 | 0.0 |
データがありません
queue[/url] = |0.0 | 0.0 | 0.0 | 0.0 |
と表示されるのですが、これに対して教員から「deqで戻値を使ってデータを取り出しているか?」という返答があり、受理されませんでした。dequeue関数でqueue[0]であるkを戻値として返しているので条件は満たしていると思うのですがどこがいけないのでしょうか。
UNIXを使用しており、Cに関しては基礎部分だけでありポインタは未学習であり、使用可能なライブラリは標準ライブラリのみとなっております。
どうかよろしくお願いします。

non

Re:課題

#2

投稿記事 by non » 16年前

プログラムは無駄が多いけど、間違ってないようです。
リングバッファが次の課題にでるのかな?

>「deqで戻値を使ってデータを取り出しているか?」
戻り値を表示しなさいってことじゃないでしょうか。

初級者

Re:課題

#3

投稿記事 by 初級者 » 16年前

回答に誤りがあったため、削除

wakimo

Re:課題

#4

投稿記事 by wakimo » 16年前

返答ありがとうございました。
戻値を表示させるようにしたところ無事に受理されました。

閉鎖

“C言語何でも質問掲示板” へ戻る