ページ 11

課題

Posted: 2009年1月08日(木) 12:00
by wakimo
はじめまして、学校の課題について質問させていただきます。
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に関しては基礎部分だけでありポインタは未学習であり、使用可能なライブラリは標準ライブラリのみとなっております。
どうかよろしくお願いします。

Re:課題

Posted: 2009年1月08日(木) 12:27
by non
プログラムは無駄が多いけど、間違ってないようです。
リングバッファが次の課題にでるのかな?

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

Re:課題

Posted: 2009年1月08日(木) 12:35
by 初級者
回答に誤りがあったため、削除

Re:課題

Posted: 2009年1月09日(金) 10:32
by wakimo
返答ありがとうございました。
戻値を表示させるようにしたところ無事に受理されました。