[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 08/07 07:52 / Filesize : 230 KB / Number-of Response : 708
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C/C++の宿題を片付けます 96代目



1 名前:デフォルトの名無しさん [2007/09/21(金) 08:46:37 BE:340816166-2BP(12)]
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html
【過去ログ検索】        chomework.sakura.ne.jp/
【wiki】               www23.atwiki.jp/homework/

【前スレ】
C/C++の宿題を片付けます 95代目
pc11.2ch.net/test/read.cgi/tech/1187944110/

367 名前:>>281 1/4 mailto:sage [2007/09/26(水) 22:27:07 ]
struct machine {
 struct product *p;
 int value;
};
struct product {
 struct machine *ms[4];
 struct product *original;
};
struct machine *createm() {
 return (struct machine *)calloc(1, sizeof(struct machine));
}
struct product *createp(struct machine *first, struct machine *second, struct machine *last) {
 struct product *p = (struct product *)calloc(1, sizeof(struct product));
 p->ms[0] = first;p->ms[1] = second;p->ms[2] = last;p->original = p;
 return p;
}
struct product *clonep(struct product *original) {
 if (!original) return 0;
 struct product *p = (struct product *)calloc(1, sizeof(struct product));
 *p = *original;
 return p;
}
struct product *clonep_at_random(struct product **ps, int size) {
 return clonep(ps[rand() % size]);
}
int n_completed(struct product *original, struct product **ps, int size) {
 int i, n = 0;
 for (i = 0; i < size; i++) {
  if (ps[i]->original == original && !ps[i]->ms[0]) n++;
 }
 return n;
}

368 名前:>>281 2/4 mailto:sage [2007/09/26(水) 22:27:50 ]
int n_existed(struct product *original, struct product **ps, int size) {
 int i, n = 0;
 for (i = 0; i < size; i++) {
  if (ps[i]->original == original) n++;
 }
 return n;
}
struct product *waitingproduct(struct machine *m, struct product **ps, int size) {
 int i;
 for (i = 0; i < size; i++) {
  if (ps[i]->ms[0] == m) {
   return ps[i];
  }
 }
 return 0;
}
void shift(struct machine **ms) {
 ms[0] = ms[1];ms[1] = ms[2];ms[2] = ms[3];
}
int main() {
 struct machine *ms[4];
 ms[0] = createm();ms[1] = createm();ms[2] = createm();ms[3] = 0;
 struct product *p, *ps[4];
 ps[0] = createp(ms[0], ms[1], ms[2]);
 ps[1] = createp(ms[1], ms[2], ms[0]);
 ps[2] = createp(ms[2], ms[0], ms[1]);
 ps[3] = 0;
 int values[][3] = {{5, 10, 15}, {10, 15, 5}, {15, 5, 10}};
 
 int i, n, maxsize = 64, size = 0;
 struct product *products[maxsize];
 for (n = 0; ; n++) {

369 名前:>>281 3/4 mailto:sage [2007/09/26(水) 22:28:31 ]
  // 289:各製品5回、発注が来たら終了でお願いします。
  // = 各五個完成したら終了?
  if (
   5 <= n_completed(ps[0], products, size)
   && 5 <= n_completed(ps[1], products, size)
   && 5 <= n_completed(ps[2], products, size)
  ) break;
  // 289:各製品5回、発注が来たら終了でお願いします。
  // = 終了の条件とは別に、発注の回数も各五回?
  // 287:他の製品の発注が来ることはありますが、同じ製品の追加はないです。
  // = 作業中でない製品タイプの発注のみが来る?
  p = clonep_at_random(ps, 4);
  if (p && (
   (p->original == ps[0] && 5 <= n_existed(ps[0], products, size))
   || (p->original == ps[1] && 5 <= n_existed(ps[1], products, size))
   || (p->original == ps[2] && 5 <= n_existed(ps[2], products, size))
   || (ms[0]->p && ms[0]->p->original == p->original)
   || (ms[1]->p && ms[1]->p->original == p->original)
   || (ms[2]->p && ms[2]->p->original == p->original)
  )) {
   free(p);p = 0;
  }
  // 受注
  if (p && size < maxsize) products[size++] = p;
  // 各機械が処理する製品を決定
  for (i = 0; i < 3; i++) {
   if (!ms[i]->p && (ms[i]->p = waitingproduct(ms[i], products, size))) {
    ms[i]->value = values[(&ms[i] - &ms[0])][((void *)ms[i]->p->original - (void *)ps[0]) / sizeof(struct product)];
   }
  }
  // 処理直前の状態。
  char cs[] = {'A', 'B', 'C', 'Q'};

370 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 22:30:14 ]
その長さなら>>1のうpロダを使って欲しい

371 名前:>>281 4/4 mailto:sage [2007/09/26(水) 22:30:56 ]
  printf("%3d",n);
  for (i = 0; i < 3; i++) {
   if (ms[i]->p) {
    printf(" [%c:%d]", cs[((void *)ms[i]->p->original - (void *)ps[0]) / sizeof(struct product)], ms[i]->value);
   } else {
    printf(" []");
   }
  }
  printf("\n");
  // 処理と処理済処理
  for (i = 0; i < 3; i++) {
   if (ms[i]->p) {
    ms[i]->value--; // 加工
    if (ms[i]->value <= 0) {
     shift(ms[i]->p->ms);
     ms[i]->p = 0;
    }
   }
  }
 }
 printf("%dh", n);
}

// 根本的に何か勘違いしているような気もする。

372 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 22:33:06 ]
>>370 すんまそん。

373 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 22:33:25 ]
>>364 簡単にしてみた
#include<stdio.h>
double get_average(double arr[], int arr_size){
double average=0;
int i;
for(i=0;i<arr_size;i++,arr++)
average=(average*i+*arr)/(i+1);
return average;
}
double get_sum(double arr[], int arr_size){
return *arr+((arr_size>0)?get_sum(arr+1, arr_size-1):0);
}
int main(void){
double data[]={10.8,20.3,30,6.40,10.4,2.12};
printf("sum : %f\n", get_sum(data, 6));
printf("average : %f\n", get_average(data, 6));
return 0;
}

374 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 22:45:06 ]
>>355>>360
添え字演算子はポインタ演算のシンタックスシュガーにすぎないんだから、
結局[]だってポインタ使ってるじゃないですか!
って反抗するのもよいって本で言ってた。

375 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 22:46:04 ]
>>374
「言ってた」って子供の絵本か!



376 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 22:50:12 ]
>>313
Short Coding というのがあるよ。
有名な例だと、

main(n){gets(&n);putchar(n%85+5);}
これをコンパイルして実行して、
1 2
とか
3 6
と入力すれば、足される。


377 名前:デフォルトの名無しさん [2007/09/26(水) 22:59:22 ]
[1] 授業
[2] OS Windows
[3]問題
double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
配列の全要素の合計と平気を求めるプログラムをポインタを使って作成しなさい 
誰か宜しくお願いします
ちなみに初心者です

378 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:03:25 ]
>>377
>>373 のどこが分からないのか説明してくれ

379 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:15:30 ]
>>378
もう放置で…

380 名前:デフォルトの名無しさん [2007/09/26(水) 23:19:19 ]
どなたか>>377をお願いします

381 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:20:50 ]
>>380
マルチポスト

382 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:24:31 ]
[1] 授業
[2] OS Windows
[3]問題
double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
配列の全要素の戦闘力と攻撃力を求めるプログラムをポインタを使って作成しなさい
誰か宜しくお願いします
ちなみに小心者です

383 名前:fubu ◆dFztVLlF36 mailto:sage [2007/09/26(水) 23:26:35 ]
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
atoi関数と同様の処理をする関数を作成しなさい
[3] 環境
 [3.1] OS: (Windows2000)
 [3.2] コンパイラ名とバージョン: CPad forBorland C++Compiler Ver2.31
 [3.3] 言語: (C/C++ どちらでも可)
[4] 期限: ([2007年09月28日10:00まで]
[5] atoiは文字列を10進数に変換する処理をするということはわかるのですが、
関数の自作というのがわかりません、、よろしくお願いします!!

384 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:26:42 ]
クマー

385 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:31:40 ]
>>383
int my_atoi(const char *str){int n;sscanf(str,"%d",&n);return n;}



386 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:35:13 ]
int mein_atoi(const char *str){return atoi(str);}

387 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:44:47 ]
int my_atoi(const char *str){return (int)strtod(str, NULL);}

388 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:46:19 ]
>>386 ちょw

389 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:48:28 ]
int my_atoi(const char *str){int n;istringstream i(str);i>>n;return n;}

390 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:53:34 ]
空気を読まずにマトモなやつを
#include<ctype.h>
int atoi_(const char*str){
  int sign = 0;
  int value= 0;
  while(isspace(*str))++str;
  if(*str == '+')++str;
  else if(*str == '-')sign = 1,++str;
  for(;isdigit(*str);++str){
    value *= 10;
    value += *str-'0';
  }
  if(sign)value = -value;
  return value;
}

391 名前:デフォルトの名無しさん [2007/09/26(水) 23:56:16 ]
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): 下に記入します
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限: 9月27日21時
[5] その他の制限:制限などは問題文にあるとおりです。

問題
char型の配列を使用し、ABCDEFGHIJKLMNというリテラルで初期化しておく。その後、
整数kを入力すると、k>0ならば文字列を右にk個巡回シフト、k<0なら左にk個巡回
シフトするプログラムを作成せよ。kはEOF入力まで繰り返し入力できるようにすること。

【実行例】どれだけシフトしますか--> 3
     LMNABCDEFGHIJK
     どれだけシフトしますか--> 4
HIJKLMNABCDEFG
     どれだけシフトしますか--> -7
ABCDEFGHIJKLMN
 どれだけシフトしますか--> 17
LMNABCDEFGHIJK
どれだけシフトしますか--> (EOF入力で終了)

ちなみに実行例を見ればわかると思いますが、シフトは毎回ABC〜から始めるのではなく
前の結果から巡回シフトを開始します。
わかるかたよろしくお願い致します。

392 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:00:13 ]
夏休みの宿題を今からかよって感じだな

393 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:05:45 ]
int myatoi(const char *cs) {
 int a = 1, b = 0;
 const char *c = cs;
 if (*c == '-') {
  a *= -1;
  c++;
 }
 for (; *c != '\0'; c++) {
  if (*c >= '0' && *c <= '9')
   b = (b * 10) + *c - '0';
  else
   break;
 }
 return a * b;
}

394 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:07:06 ]
>>391
#include<string.h>
#include<iostream>
using namespace std;
int main(){
  char s[]="ABCDEFGHIJKLMN";
  int size = strlen(s);
  char*end = s + size;
  int shift;
  while(cout << "どれだけシフトしますか--> ",cin>>shift){
    shift %= size;
    if(shift < 0)shift += size;
    rotate(s,end-shift,end);
    cout << s << endl;
  }
  cout<<endl;
}

395 名前:394 mailto:sage [2007/09/27(木) 00:10:00 ]
あ、いけね。#include<algorithm>忘れてた。



396 名前:デフォルトの名無しさん [2007/09/27(木) 00:25:40 ]
[1] 授業単元: リスト
[2] 問題文:
問:対称に並んだ文字列を検出する関数

与えられた文字リストの中の数字(1桁)に対応する数をnとして、
その数字の前後
n文字が対称的である部分を見つけ、複製して返す関数mirror_ima
ge()を作成せよ。

ここで「対照的」とは文字リストのi(i=1,2,...)番目の要素a(i)が
数字であり、それに対応
する数をnとすれば、条件a(i-1)=a(i+1),a(i-2)=a(i+2),...a(i-n
)=a(i+n)を全て満たす事である。

対称的である部分が複数ある場合には、それらの内の最も長いもの
を返すこと。
ただし最長の部分が複数ある場合には、そのいずれかを返せばよい

対称的な部分がなければ空リストを返す事。

関数mirror_image()のプロトタイプ宣言は以下の通りである。
struct node *mirror_image(struct node*);

他の関数はこれで御願いします↓
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img
/4974.txt



397 名前:デフォルトの名無しさん [2007/09/27(木) 00:27:44 ]
他の関数はこれで御願いします↓
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4974.txt


このプログラムに、例えばP1P、abcde3edcxyad、ba1ax4xa1af、ab2
ba2abを与えると、
それぞれ(P1P)、(cde3edc)、(a1ax4xa1a)、(ab2ba)又は(ba2ab)が
印字される。
また、USA、P2P、short5trohなどを与えると()が印字される。


[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 9月27日12:00まで
[5] その他の制限: リストを配列にコピーするのは御法度です。

よろしくおねがいします。



398 名前:デフォルトの名無しさん [2007/09/27(木) 01:18:40 ]
[1] 授業: 教科書
[2] OS Windows
[3]問題
double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
配列の全要素の合計と平気を求めるプログラムをポインタを使って作成しなさい 
誰か宜しくお願いします
ちなみに初心者です

399 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:22:55 ]
次からテンプレに「テンプレすら埋めれない池沼はお帰りください」って書こうぜ

400 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:26:37 ]
ポインタは危険だから気をつけろよ。

#include <stdio.h>
int main(void)
{
int i;
double data[5] ={10.8, 20.3, 30, 6.40, 10.4, 2.12}, max = 0;
char *p;

for (i = 0; i < 5; i++) {
max += data[i];
}
p = "max = %f, average = %f\n";
printf(p, max, max / 5);
return 0;
}

401 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:28:58 ]
危険なのはレーザーポインタ
ポインタ自身はそこまで危険じゃない

402 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:29:04 ]
問題文を読み返して思ったが

double data[5] ={10.8,20.3,30,6.40,10.4,2.12}:
だと変だな。
最後のコロンは置き換えたが、要素数が間違っているのまでは気づかなかった。
適当に修正してくれよ。


403 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:32:15 ]
>>399
テンプレに沿わない質問に答える気がないならお前が答えなくて良いよ
うっとうしいんだよ

404 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:37:14 ]
テンプレに沿わない質問がうっとおしい

405 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:41:43 ]
>>401>>400にマジレスしているのがかわいらしい




406 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:44:05 ]
>>403
無能乙www

407 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:58:34 ]
>>399が無能だろ。俺は普通に答えているわ、ボケが

408 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 02:08:18 ]
文字列いじる程度の簡単な奴だけだろw
ちょっと難しいのになると出てこないくせに

409 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 02:10:24 ]
テンプレに従ってなくても答えられるけど、従ってくれたほうが読みやすいことが多いね

410 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 02:24:52 ]
408 名前:デフォルトの名無しさん 投稿日:2007/09/27(木) 02:08:18
文字列いじる程度の簡単な奴だけだろw
ちょっと難しいのになると出てこないくせに
↑なんだこいつ?きめぇ。初歩的なもの以外、答えていないと思ってんのか?
お前がテンプレに沿った質問の仕方をしていないからって、答えないよと言っているだけで
テンプレに沿っていないけど初歩的ともいえる問題に答えることすら出来ないんだろ?w
gdgd言うなら別に答えなくて良いっつってんじゃん、ここはお前が主のスレじゃねーよ
答える側は任意

411 名前:デフォルトの名無しさん [2007/09/27(木) 02:26:46 ]
double data[5] ={10.8,20.3,30,6.40,10.4,2.12};

int main()
{
int last_index = sizeof(data)/sizeof(data[0]);
if (last_index-5)printf("This program is abnormal\n");// 平気か調べる。
for (double *p=data,sum=0.0;p!=data[last_index];p++){
sum+=*p;
}
char output_string[1024];
sprintf(output_string,"sum=%f,avg=%f",sum,sum/(float)last_index);
puts(output_string);
return 0;
}

死ね!

412 名前:デフォルトの名無しさん [2007/09/27(木) 02:49:45 ]
[1] 授業: 教科書
[2] OS Windows
[3]問題
double data[5] ={10.8,30,6.40,10.4,2.12}:
配列の全要素の合計と平気を求めるプログラムをポインタを使って作成しなさい 
誰か宜しくお願いします
ちなみに初心者です

413 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 03:01:06 ]
いいかげんこのネタやめろw

414 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 03:02:22 ]
>>396
node の定義や必要そうな include もこちらで補うのかい?

415 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 05:56:53 ]
>>396
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

struct node {
    char element;
    struct node *next;
};

int check(struct node *p, struct node *mid)
{
    int i, j, n = mid->element - '0';
    struct node *temp;
    for(i=0, temp = p; temp!=mid; i++, temp=temp->next);
    if(i!=n) return 0;
    for(i=0; i<n; i++, temp=temp->next) if(temp->next==NULL) return 0;
    for(i=0; i<n; i++, p=p->next) {
        for(temp=mid, j=0; j<n-i; j++, temp=temp->next);
        if(p->element != temp->element) return 0;
    }
    return 1;
}



416 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 05:59:16 ]
続き
struct node* mirror_image(struct node *list)
{
    struct node *p, *buf = NULL, *temp, *ret = (struct node*)malloc(sizeof(struct node));
    int max = 0;
    ret->next = NULL;
    for(p=list->next; p!=NULL; p=p->next) {
        for(temp=p->next; temp!=NULL; temp=temp->next) {
            if(isdigit(temp->element) && temp->element - '0' > max) {
                if(check(p, temp)) {
                    buf = p;
                    max = temp->element - '0';
                }
            }
        }
    }
    if(buf) {
        int i, l = 2 * max + 1;
        for(i=0, temp = ret; i<l; i++, buf = buf->next) {
            temp = temp->next = (struct node*)malloc(sizeof(struct node));
            temp->element = buf->element;
        }
        temp->next = NULL;
    }
    return ret;
}

417 名前:デフォルトの名無しさん [2007/09/27(木) 07:02:54 ]
>>396
眠いのに朝からやってやったお(^ω^)
ループ文なしでやってみたお。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4980.c

418 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 07:11:59 ]
- '0' とか意味無かったお・・・。冗長すぎワロタ欝出し脳

419 名前:デフォルトの名無しさん [2007/09/27(木) 11:01:25 ]
>>365

420 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:09:09 ]
>>396 1/2
char *createcs(struct node *list) {
 char *cs = 0;
 int i = 0;
 struct node *p;
 for (i = 0, p = list->next; p; i++, p = p->next) continue;
 cs = (char *)malloc(sizeof(char) * (i + 1));
 for (i = 0, p = list->next; p; i++, p = p->next) cs[i] = p->element;
 cs[i] = '\0';
 return cs;
}

421 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:09:41 ]
>>396 2/2
struct node *mirror_image(struct node *list) {
 char *cs = createcs(list);
 struct node *mirror = 0;
 int i, j, n, maxn_index = -1;
 for (i = 0; i < strlen(cs); i++) {
  if (!isdigit(cs[i])) continue;
  
  n = cs[i] - '0';
  if (i < n || (strlen(cs) - 1 - i) < n) continue; // 無理
  if (n < cs[maxn_index] - '0') continue; // 無駄
  for (j = 0; j < n; j++) { // n個チェック
   if (cs[i - (j + 1)] != cs[i + (j + 1)]) break;
  }
  if (n == j && cs[maxn_index] - '0' < n) maxn_index = i;
 }
 cs[maxn_index + (cs[maxn_index] - '0') + 1] = '\0';
 if (0 < maxn_index) {
  mirror = initclist(&cs[maxn_index - (cs[maxn_index] - '0')]);
 } else {
  mirror = (struct node *)calloc(1, sizeof(struct node));
 }
 free(cs);
 return mirror;
}

422 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:12:47 ]
>リストを配列にコピーするのは御法度です

423 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:20:08 ]
(ノ∀`) アチャー

424 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:22:00 ]
>>396
リストの先頭が空って、なんか気持ち悪くない?

425 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 13:34:59 ]
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク): 四則演算を関数としてもっているプログラム。
実数と整数の両方に対応し、式と結果を表示。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限:10月1日
[5] その他の制限:scanfを使用、関数はPlus(float a,float b)。
main関数では2つの数字を入力、関数Plusを呼び出し。
考えでは↓
実数では、float c; c=a+b;
整数では、int d; d=(int)a+(int)b;
最後にprintfを使って表示します。

宜しくお願いします<(_ _)>



426 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 13:52:40 ]
>>425
#include <stdio.h>

float Plus(float,float);

int main()
{
float a,b;

printf("1つ目=>");
scanf("%f",&a);
printf("2つ目=>");
scanf("%f",&b);

printf("float:%f\nint:%d",Plus(a,b),(int)Plus((int)a,(int)b));
return 0;
}

float Plus(float a,float b)
{
return a+b;
}

C++でもいいなら関数オーバーロードを使った方がいいと思うよ

427 名前:デフォルトの名無しさん [2007/09/27(木) 15:00:40 ]
[1] ファイル入出力
[2] 引数で渡された文字列をファイルに出力する関数を作り、入力した文字列をファイルに出力する。
[3] 環境
 [3.1]WindowsXP
 [3.2]BorlandC++
 [3.3]C++

#include <stdio.h>
#include <string.h>

void sdata(char str);

void main(void)
{
char str[128];

scanf("%s",str);
}

void sdata(char str)
{
FILE *fp;

fp = fopen("Return.txt","w");

fwrite(str,sizeof(str),1,fp);
}
一応自分でこんな感じかなみたいのはあるんですが…ここからよく分からないのです。

428 名前:425 mailto:sage [2007/09/27(木) 16:14:56 ]
>>426さん ありがとうございます。
四則の問題があるので、Plus()関数に
int s;
printf("1.+ 2.- 3.* 4./ =>");
scanf("%d",&s);
if(1==s){return a+b;
}else if(2==s){
return a-b;
}else if(3==s){
return a*b;
}else if(4==s){
return a/b;
}
と追加してみたら
1つ目=>4
2つ目=>2
1.+ 2.- 3.* 4./ =>4
1.+ 2.- 3.* 4./ =>3
float:8.000000
int:2
と出力されました。
1.+ 2.- 3.* 4./ =>のところを1回だけ表示するにはどうすると良いでしょうか?

429 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 16:55:26 ]
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク):読み込んだ整数の段数を持つピラミッドを表示するプログラム
例:3
  *
 ***
*****
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限:10月1日
[5] その他の制限:scanf,forを使用

430 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 17:04:03 ]
#include <stdio.h>

int main(void)
{
int i, j, n;

scanf("%d", &n);

for(i=0; i<n; i++) {
for(j=0; j<n-1-i; j++) putchar(' ');
for(j=0; j<2*i+1; j++) putchar('*');
putchar('\n');
}

return 0;
}


431 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 17:25:37 ]
>>428
>int s;
>printf("1.+ 2.- 3.* 4./ =>");
>scanf("%d",&s);
をPlus関数からmain関数に移し、Plus関数は新たに引数としてsを受け取るようにする

432 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 17:27:04 ]
>>429
#include<stdio.h>
int main(int c,int v){
if(c==1){
scanf("%d",&v);
main(v+1,v);
}
else{
int i;
if(c!=2)main(c-1,v);
for(i=0;i<v-c+3/2;i++)printf(" ");
for(i=0;i<2*c-3;i++)printf("*");
printf("\n");
}
return 0;
}

433 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 17:36:09 ]
>>429
#include <stdio.h>
int padd(int n, char c) {
 if (!n) return;
 putchar(c);padd(n - 1, c);
}
void pyramid(int n, int m, char c) {
 if (n <= m) return;
 padd(n - m - 1, ' ');
 padd(2 * m + 1, c);
 puts("");
 pyramid(n, m + 1, c);
}
int main() {
 int n;
 scanf("%d", &n);
 pyramid(n, 0, '*');
}


434 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 17:36:19 ]
>>428 関数名が悪い
#include <stdio.h>
#include <stdlib.h>
float calc(float,float,int);
int main()
{
int i,s;
float a,b;
char mode[]="+-*/";
printf("1つ目の数=>");scanf("%f",&a);
printf("2つ目の数=>");scanf("%f",&b);
printf("演算子\n");
for(i = 0;i < sizeof(mode)-1;i++){
printf("%d.%c\n",i+1,mode[i]);
}
printf("=>");scanf("%d",&s);

printf("%f %c %f = %f",a,mode[s-1],b,calc(a,b,s));
return 0;
}

float calc(float a,float b,int s)
{
switch(s){
case 1:return a+b;
case 2:return a-b;
case 3:return a*b;
case 4:if(b == 0){printf("0では割れない");exit(1);
}else{return a/b;}
default:printf("演算子指定が正しくない");exit(1);
}
}

435 名前:425 mailto:sage [2007/09/27(木) 18:23:54 ]
>>431さん、>>434さん ありがとうございました。




436 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 20:34:23 ]
test

437 名前:デフォルトの名無しさん [2007/09/27(木) 23:08:36 ]
[1] 授業単元:
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4982.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 9月28日18:00まで
[5] その他の制限: 特にないです

どちらか1つだけでも結構ですので、どうぞよろしくお願いします

438 名前:fubu ◆dFztVLlF36 mailto:sage [2007/09/27(木) 23:20:04 ]
>>390
ありがとうございますつД`)

439 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 23:29:36 ]
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):構造体(詳細は下記)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: (C/C++ どちらでも可)
[4] 期限: [9/30]
[5] 問題文
「本」の商品名、価格、ページ数を10冊分入力し、
10冊分の価格の昇順・降順にソートするプログラムを作成しなさい。

よろしくお願いします

440 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 23:48:59 ]
>>439
それぞれの限界値は指定しないのか?

441 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 23:51:00 ]
>>439
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct bk{
string n;int v,p;
void r(){cin>>n>>v>>p;}
void w(){cout<<n<<" "<<v<<" "<<p<<endl;}
bool operator<(const bk&b)const{return v<b.v;}
};
int main(){
bk b[10];
for(int i=0;i<10;i++)b[i].r();
sort(b,b+10);
for(int i=0;i<10;i++)b[i].w();
return 0;
}

442 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 23:51:31 ]
>>437
1つ目 改行が多いって言われたのでこっちで
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4983.c

443 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 00:14:32 ]
>>440
すいません…
商品名[10]、価格[4]、ページ数[3]を入れるのを失念しておりました…
ですので、
>>441
ありがとうございます!!
こちらのソースを元になんとか自分で考えてみます。


444 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 00:45:51 ]
>>437
2つ目
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4984.txt

445 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 01:20:44 ]
>>437 先越されたけど2つ目 君の瞳に映った僕に乾杯
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4985.c



446 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 07:35:42 ]

----【即系サイト×優良サイト=即会い即やり!】-----------------------

優良出会い系サイトと即出会えるサイトを併用して使い、即会いライフを楽しんでいます。
これが面白いほど会える☆ 会った後は・・・
俺の場合、出会い系サイト3つで女の子と週2〜3で出会えてます。
これ以外にもお気にの女の子とは週1で会ってます。

今回は皆さんにも出会いを楽しんでもらいたいので、俺が使っている
登録後一日以内に出会えたサイトを紹介するブログ始めました。
皆も休日にエンジョイしてください!

↓↓↓
【即出会えるサイト紹介ブログ】
deaigets.blog97.fc2.com/

--------------------------------------------------------------------

447 名前:437 [2007/09/28(金) 09:35:59 ]
>>442
>>444
>>445
本当にありがとうございます
助かりました

448 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 11:20:28 ]
任意の長さの文字列(英字のみ)データをファイルから読み込み、辞書順に並べ替えて
最終結果のみを表示するプログラムを作成する宿題なんですが、ファイルを読み込もうと
するところでなぜか止まってしまいます。原因がよくわからないので助けてください…。

Cテキスト
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4986.txt

読み込みファイル用テキスト(これじゃなくてもOK)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4987.txt


細かい指定は、
・英字の大文字小文字に関しては凝らなくていい
・データ最大数は1000
・文字列の最大長は64
・データは改行で区切られている


449 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 11:28:03 ]
>>448
そういうときは、色々な変数の値をprintfで吐き出すと良いよ

> scanf("%s,in_filename");

450 名前:448 mailto:sage [2007/09/28(金) 12:01:37 ]
なんというくだらないミス\(^O^)/

申し訳ありませんでした……

451 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 12:50:24 ]
ファイル読めない時のエラーメッセージもだしとけよ

452 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 15:00:32 ]
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
/****memo.txt********/
atsusa a ts u s a
au a u
awatadashii a w a t a d a sh i i
awa a w a
/*********************/

このmemo.txt というファイルがあるとして、
このファイルを読み込み、右の「a,ts,u,s,a」という単位で
かかれてある右の列(2列目)を(atsusaを1列目、a,ts,u,s,aを2列目)
a
ts
u
s
a
と表示できるようにしなさい。

[3] 環境
 [3.1] OS:LINUX
 [3.3] 言語:C
[4] 期限:早いほうがいいです
[5] その他の制限:なし



453 名前: ◆EtzJSByuaQ mailto:sage [2007/09/28(金) 16:43:58 ]

【質問テンプレ】
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):圧力P一定の下、温度変化量ΔTしたとき、1molの理想気体のガス容積の変化量ΔVを算出する関数を作成しなさい
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:CPad for Borland C++Compiler
ver2.31
 [3.3] 言語:C++
[4] 期限:2007年09月28日20時くらいまで


本当にわからなくて困っています。よろしくお願い致します。

454 名前: ◆vLIz8KOkPM [2007/09/28(金) 17:29:14 ]
[1] 授業単元: プログラミング演習
[3] 環境
 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C
[4] 期限: 9月29日(土)午後9時まで
[5] その他の制限: ポインタ、構造体、配列、関数まで習ったので、この範囲内でお願いします。


[2] 問題文(含コード&リンク):
**発展課題**について【下に、発展課題の問題文、自分の作成したプログラムをのせます】、
各口座のデータをバイナリファイルに保存する機能(口座データが変更される度にfwriteで)
各口座のデータをバイナリファイルから読み込む機能(プログラム起動時に1 回のみfreadで)を追加せよ.実行例を下に示す。

% ./kadai13
口座データ読込み(1:ファイルから2:初期値を使用)? 1
口座番号を入力してください: 9012
暗証番号を入力してください: 0123
引出し額を入力してください: 20000
ありがとうございました.残高は518600 円です
口座データ保存(1:ファイルへ2:保存しない)? 1
口座番号を入力してください: ← 口座番号入力に戻る

発展課題の問題については>>455
それに対する自分のプログラムは>>456

455 名前: ◆vLIz8KOkPM [2007/09/28(金) 17:29:46 ]
****************発展課題の問題文****************

ATM(Automated Teller Machine; 現金自動預け払い機) システムを実現するプログラムを作成する.
最初に,氏名,口座番号,暗証番号,預金残高を要素とする構造体を定義し,512 人分の口座が作成可能なようにせよ.
また,初期値として次のように構造体の内容を設定せよ.

• 田中太郎の口座番号は1234 で,預金残高を1,234,560 円に設定する.
• 山田花子の口座番号は5678 で,預金残高を 987,600 円に設定する.
• 鈴木一郎の口座番号は9012 で,預金残高を 538,600 円に設定する.
• 暗証番号は口座番号に1111 を足して10000 で割った余りに設定する.

このとき引出しの機能を実現せよ。具体的には,口座番号の入力,暗証番号の入力と確認,支払額の入力,預金残高の更新をするプログラムを作成せよ.
実行例を以下に示す

% ./kadai10
口座番号を入力してください: 5000 ← 存在しない
暗証番号を入力してください: 0123
口座番号または暗証番号が間違っています.
口座番号を入力してください: 9012
暗証番号を入力してください: 5555 ← 間違っている
口座番号または暗証番号が間違っています.
口座番号を入力してください: 9012
暗証番号を入力してください: 0123
引出し額を入力してください: 1000000 ← 預金額より多い
預金額が不足しています.
口座番号を入力してください: 9012
暗証番号を入力してください: 0123
引出し額を入力してください: 20000
ありがとうございました.残高は518600 円です.
口座番号を入力してください: ← 始めに戻る



456 名前: ◆vLIz8KOkPM [2007/09/28(金) 17:35:06 ]
**********発展課題について自分が作成したプログラム***************
#include<stdio.h> #include<string.h> #define MAC 256
main(){
char save[MAC]; int account; int code; int draw; int i;
struct{
char name[MAC]; int account; int code; int balance;
}ATM[500];
strcpy(ATM[0].name,"田中太郎"); ATM[0].account=1234; ATM[0].code=(ATM[0].account+1111)%10000; ATM[0].balance=1234560;
strcpy(ATM[1].name,"山田花子"); ATM[1].account=5678; ATM[1].code=(ATM[1].account+1111)%10000; ATM[1].balance=987600;
strcpy(ATM[2].name,"鈴木一郎"); ATM[2].account=9012; ATM[2].code=(ATM[2].account+1111)%10000; ATM[2].balance=538600;
printf("あなたの口座番号を入力して下さい:"); fgets(save,MAC,stdin); sscanf(save,"%d",&account);
for(i=0;i<=500;i++){ if(account==ATM[i].account) break; }
if(account!=ATM[i].account){ printf("そのような口座は存在しません.\n"); }
else{ printf("暗証番号を入力して下さい:"); fgets(save,MAC,stdin); sscanf(save,"%d",&code);
for(i=0;i<=500;i++){ if(code==ATM[i].code) break; }
if(code==ATM[i].code){ printf("%s 様ですね.\n",ATM[i].name); printf("引出し金額を入力して下さい:"); fgets(save,MAC,stdin); sscanf(save,"%d",&draw);
if(draw<0){ printf("ERROR!!\n"); }
else if(draw>ATM[i].balance){ printf("金額が不足しています.\n"); }
else if(draw<=ATM[i].balance){ printf("預金残高は %d 円です.\n",ATM[i].balance-draw); }}
else if(code!=ATM[i].code){ printf("認証に失敗しました.\n"); }}
return(0);
}

457 名前: ◆vLIz8KOkPM [2007/09/28(金) 17:40:24 ]
長文で申し訳ないですが、是非ともよろしくお願いします。m(_ _)m

458 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 18:00:37 ]
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):文字列AB、CD、EF、GHがある。キーボードから文字を入力しこの文字列があればそれを取り出す。
                  全部取り出したら終了する。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: BCC5.5
 [3.3] 言語:C
[4] 期限: 2007/10/1
[5] その他の制限:実行例
            現在:AB、CD、EF、GH
            文字を入力してください:AB
            ABはありました。
            現在:CD、EF、GH
            文字を入力してください:TR
            TRはありません。
            現在:CD、EF、GH
            文字を入力してください:
                ・
                ・
                ・
            現在:GH
            文字を入力してください:GH
            GHはありました。
            これで終了します。

459 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 18:46:37 ]
#include <stdio.h>
#include <string.h>
int main(void){
  char *a[]={"AB","CD","EF","GH"},b[9],c[]="現在:%s",d[]="、%s",*e;int i;
  while(1){
    e=c;
    for(i=0;i<sizeof(a)/sizeof(a[0]);++i){
      if(a[i]){
        printf(e,a[i]);
        e=d;
      }
    }
    if(e==c) break;
    printf("\n文字を入力してください:");
    scanf(" %8[^\n]",b);
    for(i=0;i<sizeof(a)/sizeof(a[0]);++i){
      if(a[i] && !strcmp(a[i],b)){
        printf("%sはありました。\n",b);
        a[i]=0;
        goto found;
      }
    }
    printf("%sはありません。\n",b);
    found:;
  }
  puts("これで終了します。 ");
  return 0;
}



460 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 19:02:44 ]
gotoかよw

461 名前:デフォルトの名無しさん [2007/09/28(金) 21:50:48 ]
[1]授業単元:プログラミング演習
[2]問題文:ポインタをつかって@変数aのアドレスを獲得する。A変数bのアドレスを変数aのアドレスの4バイト後方におきたい。B変数aのアドレスの4バイト後方に(a+90)の値を代入する。CA、Bの結果をprintf文で出力。
[3]環境
[3.1]Windows、Visual stdio Japan2005
(注)エラーが出ると思いますが、結果は出ます。
お願いします。

462 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 21:58:40 ]
変数の型は?

463 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 22:12:58 ]
一気に宿題されすぎでおれの宿題が答えられてないな。。。
おれも片付けに参加しようかね。

464 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 22:16:59 ]
どれ?

465 名前:デフォルトの名無しさん [2007/09/28(金) 22:48:52 ]
>>459 >>460

blogs.wankuma.com/jitta/archive/2007/09/27/98335.aspx
blogs.wankuma.com/jitta/archive/2007/09/28/98562.aspx



466 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 23:10:13 ]
>>452
どの程度自由度があるかわかんね.
"memo.txt"というファイル名に対して,a ts u saを表示するだけでいいの?
それとも,そのコメント風の部分も評価しなきゃいけないの?

467 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 23:28:39 ]
goto文使うとプログラム読みにくくなるしループとか抜け出すならbreakとかあるからな。
俺も極力使うなって言われたけど中にはそっちの方が分かりやすいって人もいるんじゃない?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<230KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef