2 :
デフォルトの名無しさん :2007/07/04(水) 10:28:19
v――.、
/ ! \
/ ,イ ヽ
.. / _,,,ノ !)ノリハ i
i jr三ミ__r;三ミ_ ヽ
l ,iヾ二ノ ヽ二 ハ ノ / ̄ ̄\
ヽ、.l ,.r、_,っ、 !_, /ヽ、___ノ| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
. ! rrrrrrrァi! L_./⌒( i " i | ./ <
>>1 糞スレ立てんな、蛆虫、氏ね。
ヾヾ ゝ、^'ー=~''"' ;,/. | i | i > \______________
ゞ","",,ヽ >、__,r / ヽ | i ″)
ヾ ,, ,, ヽ ノ | i i .丿
/ヾ ,, ,,ヽ ( / )/ | ‖i /
| ヾ ,,,, ヽ "──"" ノ(/| ii | )
ヽ ヾ ,, ,, ,,.ヽ ノ ./ .|__ii___|ヽ
ヽ ヾ ,,, ,, \ / i⌒( ̄ ~ |
/ )==(○)==( ヽ- ̄ ̄ /
(⌒-/",,--______-- ",, ヽ ゝ─-- /
.(__/ヾヾヾ ,,, ,,, ,,-ゞヾ/ ヽ.,,_,,/
ヽ( ソ""""\ ヽ i_/
<(⌒""`--.,__) /ヽ )
<(~`─" \ (~ /
<(_,,,__,,,, ) \  ̄ゝ
 ̄""" ヽ.,,__ゝ
3 :
デフォルトの名無しさん :2007/07/04(水) 10:52:26
[1] 問題文:入力した人の年齢の合計と平均を出力させるプログラムを作成して下さい。 ※入力時に累積の人数を表示 ※年齢入力時に数字属性と範囲のチェックを行う※nullは不許可とする ※0 〜 9 の文字のみで、かつ 1 〜 99 の範囲のみを許可する※年齢の平均は小数点第二位まで出力する※名前に空が入力された場合に年齢の合計と平均を出力してプログラムを終了する −実行結果− 1人目の名前:human1 1人目の年齢: 入力エラー(年齢を入力してください) 1人目の年齢:30 2人目の名前:human2 2人目の年齢:abc 入力エラー(年齢は数字のみで入力してください) 2人目の年齢:20 3人目の名前:human3 3人目の年齢:0 入力エラー(年齢は1から99の範囲で入力してください) 3人目の年齢:25 4人目の名前: 年齢の合計は75歳、年齢の平均は25.00歳 [2] OS: Windows2000 [3] 期限:2007年7月4日13時まで
4 :
デフォルトの名無しさん :2007/07/04(水) 11:04:29
前スレ
>>999 #include<stdio.h>
#include<string.h>
int main(void)
{
char a[]="aiai";
char b[]="ai";
int i,count;
count=0;
for(i=0;i<strlen(a)-strlen(b);i++)
if(strncmp(a,b,strlen(b))==0)count++;
printf("%d",count);
}
多分こんな感じ。ループの度にstrlen(b)やるので大量データに向いてないとかあるけど。
>>前スレ999 >if(a&&b)count++; とりあえず、これは無いだろうw aとbが有効なポインタだから (a && b)がtrueになっているだけであって、 決して "aiai"の先頭が "ai"だから trueになっている訳ではないぞw もし自力で実装するなら、以下の様に考えると、ベタでも動くものが作れるかと。 0: 捜索開始場所を aとする 1: まず bの先頭1文字を aから捜索する 2: 1文字目から不一致なら aを+1して 1へ 3: 発見した場合、その場所から +n文字目は bの+n文字目と同じか比較し、 bが終わるまでチェックする 4: すべて一致すれば ++countして、捜索開始場所を a+strlen(b)に変更し、1へ 5: 途中で不一致だった場合は、捜索開始場所を +1して 1に戻る
あ、間違い。 -if(strncmp(a,b,strlen(b))==0)count++; +if(strncmp(&a[i],b,strlen(b))==0)count++;
8 :
デフォルトの名無しさん :2007/07/04(水) 11:15:54
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 線形探索 次の表は、平成19年のお年玉付き年賀葉書の当選番号である。 1等 157788、457190 2等 5161、7093、7485、9614 3等 64、79 手元に届いた年賀状の抽選番号をキーボードから入力し、 当選したかどうかチェックして結果を表示するプログラムを作成する。 ただし、ここでは簡単のため下2桁だけを扱うものとする。 当選番号(の下2桁)は、キーの配列に初期値として格納する キーボードから2桁の数字を入力してターゲットに格納し、線形探索を行う。 探索結果を画面に出力する。当選した場合は何等が当たったか、も出力すること。 【発展】 余力のある人は、下2桁に限らず、全桁を初期値として格納し、当選のチェックを実行するプログラムを作成してみること。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VS 2005 [3.3] 言語: C [4] 期限: 明日まで [5] その他の制限: [発展]の方でお願いします
>>前スレ999 ”aaaa"と"aa"を比較した時に3回文字列が出現したと数えるか、 2回出現したと数えるかで文字列発見時のポインタ、配列参照の仕方が変わる
10 :
デフォルトの名無しさん :2007/07/04(水) 12:18:44
授業単元:C言語 環境:if文・for文・while文・do〜while文・switch〜case文・ OS:Windows コンパイラ名とバージョン:borland 言語:C 問題 文字列を入力して偶数番目の要素数と奇数番目の要素を別の配列に格納し、文字列として表示しなさい 実行画面 文字列入力==>ABC123def 偶数要素:AC2df 奇数要素:B13e
11 :
デフォルトの名無しさん :2007/07/04(水) 12:28:38
[1] 授業単元: プログラミング言語 [2] 問題文(含コード&リンク): 2次方程式 ax*x+bx+c=0 の係数a,b,cを与え、方程式の解を求めて出力せよ(関数は使わなくてよい) 係数の値によって3つの場合分けをする zの平方根yの計算はy=sqrt(z)で計算する。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:visual studio2005 [3.3] 言語: C++ [4] 期限: 7月6日 [5] その他の制限:特になし。 ネットで2次方程式を探しましたが、よくわからないので上の問題の条件で回答いただけると幸いです。 お願いいたします。
>>10 ってね、前にも同じ問題があったけど、偶数要素は入力された奇数番目なんよ。
要するに、入力された文字列を格納した配列の要素番号が奇数か偶数かってことだよね?
13 :
デフォルトの名無しさん :2007/07/04(水) 13:03:33
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 5 名の体重をキーボードから読み込んで,5 名の平均値以上の 値を持つ人の番号と体重を表示するプログラムを作成しなさ い. [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 7月5日 実行結果 1 番目の体重= 60.5 2 番目の体重= 57.3 3 番目の体重= 68.1 4 番目の体重= 52.4 5 番目の体重= 65.2 ---------------- 平均値: 60.7kg 3 番目: 68.1kg 5 番目: 65.2kg よろしくお願いします
14 :
デフォルトの名無しさん :2007/07/04(水) 13:04:22
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 5 名の体重をキーボードから読み込んで,それらの値を小さい 順に表示するプログラムを作成しなさい. [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 7月5日 (実行結果例) 1 番目の体重= 60.5 2 番目の体重= 57.3 3 番目の体重= 68.1 4 番目の体重= 52.4 5 番目の体重= 65.2 ---------------- (1): 52.4kg (2): 57.3kg (3): 60.5kg (4): 65.2kg (5): 68.1kg よろしくお願いします
15 :
デフォルトの名無しさん :2007/07/04(水) 13:05:59
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 5 名の体重をキーボードから読み込んで,値の小さい順に,何 番目の人かと,その体重を表示するプログラムを作成しなさ い.なお,同じ値があれば,番号の小さい方を先に表示する. (ヒント:番号を保存する配列を別途用意して,体重データを入れ替え る時に番号も入れ替える) [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 7月5日 (実行結果例) 1 番目の体重= 60.5 2 番目の体重= 57.3 3 番目の体重= 68.1 4 番目の体重= 52.4 5 番目の体重= 65.2 ---------------- (1) 3 番目: 52.4kg (2) 1 番目: 57.3kg (3) 0 番目: 60.5kg (4) 4 番目: 65.2kg (5) 2 番目: 68.1kg よろしくお願いします
16 :
デフォルトの名無しさん :2007/07/04(水) 13:07:16
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 三角形の「底辺の長さ」と「高さ」を仮引数として,三角形 の面積(底辺の長さ×高さ÷2)を返却値とする関数triangle を定義しなさい.この関数triangle を用いてキーボートから 読み込んだ底辺の長さ,高さの三角形の面積を表示するプロ グラムを作成しなさい. [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 7月5日 (実行結果例) 三角形の面積計算 底辺の長さ:10.8 高さ:8.6 ---------------- 面積: 46.44 よろしくお願いします
17 :
デフォルトの名無しさん :2007/07/04(水) 13:08:57
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 3つの整数tanka,kosu,pay を仮引数として, pay − tanka×kosu の値を返す関数otsuri を定義しなさい.この関数otsuri を用 いて,キーボートから読み込んだ単価,購入個数,支払金額 に対して,おつり(=支払金額 − 単価×個数)を表示するプ ログラムを作成しなさい. [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 7月5日 (実行結果例) 単価:129 購入個数:17 支払金額:5000 ----------------- おつり:2807 円 よろしくお願いします
夏休み前のラッシュ 必死だな とだけレスしとく、すまんw
同じ書き込みを繰り返しやがってとおもったら少しずつ違ったのね
20 :
デフォルトの名無しさん :2007/07/04(水) 13:14:38
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 要素数がnum であるdouble 型の配列xv の全要素に,値c を代入する関数SetValue を定義しなさい(関数SetValue は 値を返さないvoid 型).この関数SetValue を用いて,要素数 10 のdouble 型配列buf_A とbuf_B の全要素を,それぞれキ ーボードから読込んだ値に設定するプログラムを作成しなさ い.(設定後のbufA とbufB の全要素を画面に表示する) [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 7月5日 (実行結果例) bufA に設定する値= 1.23 bufB に設定する値= 3.45 ------------------- bufA[0]=1.23 bufB[0]=3.45 bufA[1]=1.23 bufB[1]=3.45 : bufA[9]=1.23 bufB[9]=3.45 よろしくお願いします
>>3 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 256
typedef struct{
char name[N];
int age;
}ID;
int main(void){
ID data[N];
char str[N];
int i,sum=0;
for(i=0;;i++){
printf("%d人目の名前:",i+1);
fgets(data[i].name,N-1,stdin);
if(data[i].name[0]==' ')break;
printf("%d人目の年齢:",i+1);
while(1){
data[i].age=strtol(fgets(str,N-1,stdin),NULL,0);
if(data[i].age<100&&data[i].age>0)break;
printf("入力エラー(年齢は数字のみで入力してください)\n");}
sum+=data[i].age;}
printf("年齢の合計は%d歳、年齢の平均は%.2f歳\n",sum,(double)sum/(i+1));
return 0;
}
string.hは前書いてたコードの消し忘れorz
>>10 MAX文字までの制限つきだけど、良いのかしらん。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 512
int main(void) {
char str[MAX] , str_e[MAX/2]={"\0"} , str_o[MAX/2]={"\0"} , ch;
unsigned int i;
printf("文字列入力==> ");
fgets(str,sizeof(str)/sizeof(str[0]),stdin);
for(i=0; i<strlen(str)-1; i++) {
if(i%2) str_o[i/2]=str[i];
else str_e[i/2]=str[i];
}
printf("偶数要素:%s \n",str_e);
printf("奇数要素:%s \n",str_o);
return 0;
}
>>20 #include <stdio.h>
#define NUM 10
void SetValue(int num,double *xv,double *c){
for(;-1<num;num--)
*(xv+num) = *c;
}
void main(void)
{
int i;
double c,buf_A[NUM],buf_B[NUM];
printf("bufA に設定する値= ");
scanf("%lf", &c);
SetValue(NUM,buf_A,&c);
printf("bufB に設定する値= ");
scanf("%lf", &c);
SetValue(NUM,buf_B,&c);
for(i=0;i<10;i++)
printf("bufA[%d]= %lf bufB[%d]= %lf \n",i,buf_A[i],i,buf_B[i]);
}
7.4課題 次のプログラムを元にして、足し算などの式を入力すると計算結果を 表示するプログラムを考える (1)現在の内容を理解しコメントをつけよ (2)たとえば式1+2「ENTER」を入力すると結果の3が表示されるような のにつくりなおせ。他の演算が出来るようになっているとさらにいい評価 #include <stdio.h> #include <ctype.h> main() { char c[10]; char *p; int i=0; printf("Enter a number"); fgets(c,6,stdin); p = &c; while(isdigit(*p)){ i=i*10+(*p++)-48;//←これよくわからない } printf("You have entered:%d\n",i); }
#include <stdio.h> int Otsuri (int tanka,int kosu,int pay){ return pay - tanka * kosu; } void main(void) { int otsuri,tanka,kosu,pay; printf("単価> "); scanf("%d", &tanka); printf("購入個数> "); scanf("%d", &kosu); printf("支払金額> "); scanf("%d", &pay); printf("(実行結果例)\n 単価:%d \n 購入個数:%d \n 支払金額:%d \n----------------- \n おつり:%d 円\n",tanka,kosu,pay,Otsuri(tanka,kosu,pay)); }
27 :
デフォルトの名無しさん :2007/07/04(水) 14:15:27
授業単元:C言語 環境:if文・for文・while文・do〜while文・switch〜case文・ OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:標準関数の利用 問題1 文字列を入力し、文字列中の英字と数字の文字数をカウントしなさい 使用する標準関数:isdight() 実行画面 文字列入力==>AB123CDEF45G 英字:7 数字:5
28 :
26 :2007/07/04(水) 14:16:42
>>27 #include <stdio.h>
#include <ctype.h>
int main(void) {
int cnt_a=0, cnt_n=0 , ch;
printf("文字列入力==>");
while( (ch=getchar()) != '\n') {
if( isdigit(ch) ) cnt_n++;
else if ( isalpha(ch) ) cnt_a++;
}
printf("英字:%d \n",cnt_a);
printf("数字:%d \n",cnt_n);
return 0;
}
30 :
デフォルトの名無しさん :2007/07/04(水) 14:26:54
すみませんが、前スレの
>>914 をお願いします。
31 :
デフォルトの名無しさん :2007/07/04(水) 14:29:35
914 名前:デフォルトの名無しさん 投稿日:2007/07/03(火) 15:36:08
[1] 授業単元:プロC
[2] 問題文(含コード&リンク):
1. コマンドライン引数でファイル名をn個指定し、 ファイル1からファイルnまでの内容をこの順に連結し、
その結果を標準出力に出力するプログラムを書け。 入力ファイルに関してエラーが発生した場合、
そこで処理を終了せず、残りのファイルの処理を続けること。
ただし、以下のオプションをとることができるようにせよ。
-u 出力の際に、アルファベット小文字を対応する大文字に変換する。
-l 出力の際に、アルファベット大文字を対応する小文字に変換する。
-e 出力の際に、空行を除去する。
-s 出力の際に、#から始まる行を除去する。
*入出力を行うシステムコールを直接使用すること。
2.コマンドライン引数でファイル名を2個指定し、 標準入力からテキストを入力し、
#で始まる行をファイル1に出力し、 それ以外の行をファイル2に出力せよ。
ただし、以下のオプションをとることができるようにせよ。
-a 同名のファイルがすでに存在する場合は、末尾に追加するようにする。 このオプションがない場合は、上書きする。
-e ファイル2への出力の際に、 空行を除去する。
-s ファイル1への出力の際に、 行頭の#一文字を除去する。
*入出力を行うシステムコールを直接使用すること。
*ただし、複数のオプションが同時にしていされているときは、両方なるように
すること。
ファイルをコピーするプログラム。入力と出力にはシステムコールを直接使用する。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4485.c [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 木曜日まで
[5] その他の制限:ないです
どうかよろしくお願いします。
>>32 この順って、どの順?
前スレで久々「ありがとう」の言葉をもらった
嬉しいもんだ
34 :
デフォルトの名無しさん :2007/07/04(水) 14:54:11
>>33 さん
ファイル1→ファイル2→ファイル3
ということです。
>>25 足算と引算だけやってみたが何かおかしいかもしれない・・
#include <stdio.h>
#include <ctype.h>
#define BUF 100
void main(void){
char *p,c[BUF];
int i=0,ii=0,f=0;
printf("計算式入力(足算/引算):");
fgets(c,BUF,stdin);
p = &c;
do{
while(isdigit(*p)){
i=i*10+(*p++)-48;//←これよくわからない
}
if(f){
if(f == 1) ii = ii + i;
if(f == 2) ii = ii - i;
}
else
ii = i;
if((*p) == '+') f = 1;
if((*p) == '-') f = 2;
i = 0;
*p++;
}while(*p);
printf("計算結果:%d\n",ii);
}
(実行結果)
計算式入力(足算/引算):10+10-1-1
計算結果:18
36 :
デフォルトの名無しさん :2007/07/04(水) 15:27:22
前スレの942さんのプログラムをコンパイルすると、 mainの戻り値の型がintではありません。と警告が出るのですが これは出ちゃうものなんでしょうか?
37 :
デフォルトの名無しさん :2007/07/04(水) 15:29:39
[1] 授業単元: C言語演習 [2] 問題文(含コード&リンク): 文字型配列のstr1とstr2を用意しておき、str1に文字列をキーボードから 読み込んだ後、ポインタを用いてstr2に逆順に文字を格納し、表示せよ。 なお最終的な表示部は「printf("%s\n" ,str2);」を用いること。 (実行例) 文字列を入力せよ:Tanaka Tarou 結果:uoraT akanaT (ヒント) 配列を読み込んだ文字を一文字づつ切り出して格納する。 このとき配列要素の指定はポインタを介して行うこと。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin gcc Ver,? [3.3] 言語: C言語 [4] 期限: 7/5 PM12:00
>>36 ISO、ANSI準拠で int main(void) { return 0; } といったスタイルにしないと
エラーが出ちゃうようなコンパイラだと でっ、でちゃうぅ〜〜〜
39 :
デフォルトの名無しさん :2007/07/04(水) 15:41:29
倍精度実数が 0 であるかどうかを判定しても いいでしょうか
>>37 #include<stdio.h>
#include<string.h>
#define N 256
int main(void)
{
char str1[N],str2[N];
int i=0,l,k;
printf("文字列を入力せよ:");
scanf("%s",str1);
k=strlen(str1);
while(str1[i]!='\0')
*(str2+i++)=*(str1+k-i-1);
str2[k]='\0';
printf("結果:%s\n",str2);
return 0;
}
41 :
デフォルトの名無しさん :2007/07/04(水) 16:06:08
>>40 ありがとうございます。
ただこれ実行すると
文字列を入力せよ:Tanaka Tarou
結果:akanaT
という感じでスペース以降が逆順で表示されないのですが、
スペース以降含めて文字列全て逆表示にできないでしょうか?
結果:uoraT akanaT
みたいに
>>41 ごめん、なんかlとかよく分からないの入ってたり色々…。
#include<stdio.h>
#include<string.h>
#define N 256
int main(void)
{
char str1[N],str2[N];
int i=0,k;
printf("文字列を入力せよ:");
fgets(str1,N-1,stdin);
k=(int)strlen(str1);
while(str1[i]!='\0')
*(str2+i++)=*(str1+k-i-1);
str2[k]='\0';
printf("結果:%s\n",str2);
return 0;
}
43 :
デフォルトの名無しさん :2007/07/04(水) 16:17:51
>>42 早い手直しありがとうございます。
もしかして前スレの
>>991 さんでしたら、そちらもありがとうございます。
違ってたらすいません。
44 :
デフォルトの名無しさん :2007/07/04(水) 16:18:38
>>42 早い手直しありがとうございます。
もしかして前スレの
>>991 さんでしたら、そちらもありがとうございます。
違ってたらすいません。
35様、ありがとうございます。 掛け算割算も工夫してみます
46 :
31 :2007/07/04(水) 17:17:04
分かる方いらっしゃらないでしょうか・・・?
>>46 そのままコピペしたらエラー出まくり。
プログラムの仕様くらい書け。
おまけに長いくせに別関数にするだけ。
自分でやった方が早いと思うよ。
49 :
デフォルトの名無しさん :2007/07/04(水) 17:33:42
あの・・・
>>32 をお願いできますでしょうか?
前スレ
>>965 の人へ
前スレにもある通り、与えられたそのままの条件でプログラムを書くと
出力が滅茶苦茶になる。
もう一度良く問題文を確かめて欲しい。
>>46 gets_s()だのstrcpy_s()だの、VC++8.0専用のソースのようだが
引数が足りなくてコンパイルエラーになる箇所があるようだねえ
数値を入力しIEEE754のビットパターンを出力するCのプログラ ム頼む! 漏れの命がかかってるorz
53 :
デフォルトの名無しさん :2007/07/04(水) 18:05:56
>>38 さん
エラー表示が出なくなりました。ありがとです
コンパイラによって違うのですね・・・
gets_s使うくらいならfgets使え
>>52 #include <stdio.h>
void putbin(unsigned char n)
{
int i;
for (i = 1 << 7; i > 0; i >>= 1)
putchar((n & i) ? '1' : '0');
}
int main()
{
int i = 1;
unsigned char *s = (unsigned char *)&i;
int islittle = s[0];
double x;
while (scanf("%lf", &x) == 1) {
s = (unsigned char *)&x;
if (islittle) {
for (i = sizeof(x)-1; i >= 0; --i)
putbin(s[i]);
} else {
for (i = 0; i < sizeof(x); ++i)
putbin(s[i]);
}
putchar('\n');
}
return 0;
}
57 :
デフォルトの名無しさん :2007/07/04(水) 18:53:10
あの・・・ 何回もすみませんが
>>32 をお願いできますでしょうか?
[1] 授業単元:C演習 [2] 問題文(含コード&リンク):abc.txt には、データが何行にも分けて 書いてある。それを1行ずつ読んで、 1)先頭に&がついていたら a.txt に追記(書込み) 2)先頭に&がついてなかったら b.txt に追記(書込み) するプログラムを作れ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Borland [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: 7月8日 [5] その他の制限:30行以下 よろしくお願いします。
>>57 ここは基本的に問題出す方も投げ出しっぱなし、
説く方も気が向き次第なスレです。
そんな必死に頼りにする所ではありませんカス。
>>58 データって
111
&222
333
444
&555
こんな感じでいいの?
>>60 多分、そうだと思います。
その場合だと、
&222
&555が、a.txtへ
111
333
444が、b.txtへ
という感じだと思います。
お願いします。
>>5 >>6 >>9 ありがとうございます。これを理解して応用していけるようにがんばります。
>>58 #include <stdio.h>
int main(void)
{
FILE *fabc, *fa, *fb, *current;
int c, prev;
if (!(fabc = fopen("abc.txt", "r"))
|| !(fa = fopen("a.txt", "w"))
|| !(fb = fopen("b.txt", "w")))
return fputs("can't open files\n", stderr), 1;
current = fb;
for (prev = '\n'; (c = getc(fabc)) != EOF; prev = c) {
if (prev == '\n' && c == '&') current = fa;
else if (prev == '\n') current = fb;
putc(c, current);
}
fclose(fabc), fclose(fa), fclose(fb);
return 0;
}
>>63 とても早くて助かります。
ありがとうございました。
>>58 #include<stdio.h>
#define N 256
int main(void)
{
FILE *abc,*a,*b;
int n=0;
char str[N];
fopen_s(&abc,"abc.txt","r");
fopen_s(&a,"a.txt","a");
fopen_s(&b,"b.txt","a");
while(fgets(str,N-1,abc)!=NULL&&n<30){
if(str[0]=='&')
fprintf(a,"%s",str);
else fprintf(b,"%s",str);
n++;
}
fclose(abc);
fclose(a);
fclose(b);
return 0;
}
>>52 #include <stdio.h>
#include <string.h>
int main()
{
float f;
unsigned int bitf;
int i;
char buff[sizeof(int)*8 + 1] = {'\0'};
scanf("%f",&f);
memcpy(&bitf,&f,sizeof(int));
for(i = sizeof(int)*8-1; i >=0 ; i--)
{
if(bitf%2)
buff[i] = '1';
else
buff[i] = '0';
bitf /= 2;
}
printf("%s\n",buff);
return 0;
}
68 :
デフォルトの名無しさん :2007/07/04(水) 19:23:41
>>67 double型なのに徹頭徹尾%dを使ってるとことか。
>>69 ありがとうございました。
基本的なところで間違ってたのかorz
[1] 授業単元:While文 [2]スーパーのレジの処理を行うプログラム。 品物の値段を入力していき、最後に0(ゼロ)を入力すると消費税を加算した金額を表示する。 さらに、預かり金を入力すると、お釣りを表示する。 <出力結果例> いらっしゃいませ XXX←値段を入力 小計=XXX円 XXX←値段を入力 小計=XXX円 0 小計=XXXX円 消費税XX円 合計金額XXXX円 お預かり金額(入力させる) お釣り XXX円(お釣りは1万円何枚、5000円何枚などを表示させる) [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン:UNIX [3.3] 言語: C言語 [4] 期限: 2007年07月04日24:00まで [5] その他の制限: While文、scan,printfだけを関数では使うようにしてください・・・
>>72 #include <stdio.h>
int main(void)
{
int sum=0;
int x,azukarikin,goukei,turi,man,gosen,sen,gohyaku,hyaku,gojyu,jyu,go,iti;
printf("いらっしゃいませ。\n");
while(1){
scanf("%d",&x);
if(!x)break;
sum+=x;
printf("小計:%d\n",sum);}
goukei=(int)sum*1.05;
printf("小計:%d 消費税:%.0f 合計:%d\n",sum,sum*0.05,goukei);
printf("お預かり金額:");
scanf("%d",&azukarikin);
turi=azukarikin-goukei;
printf("お釣り:%d\n",turi);
man=turi/10000;turi%=10000;
gosen=turi/5000;turi%=5000;
sen=turi/1000;turi%=1000;
gohyaku=turi/500;turi%=500;
hyaku=turi/100;turi%=100;
gojyu=turi/50;turi%=50;
jyu=turi/10;turi%=10;
go=turi/5;turi%=5;
iti=turi;
printf("一万円:%d枚 五千円:%d枚 千円:%d枚\n",man,gosen,sen);
printf("五百円:%d枚 百円:%d枚 五十円:%d枚\n",gohyaku,hyaku,gojyu);
printf("十円:%d枚 五円:%d枚 一円:%d枚\n",jyu,go,iti);
return 0;
}
>>73 1番目
#include <stdio.h>
int main(void)
{
char str[256],str2[256];
int n,i;
printf("str:");
scanf("%s",str);
printf("n:");
scanf("%d",&n);
for(i=0;i<n;i++)
str2[i]=str[i];
str2[n]='\0';
printf("%s\n",str2);
return 0;
}
77 :
デフォルトの名無しさん :2007/07/04(水) 21:42:54
ジョブショップスケジューリングにおいて、ディスパッチングルールとして、EDDを用いたスケジューリングを作成するプログラムを作成しなさい という宿題が出たんですけど、もしわかるひとがいたらよろしくお願いします。
>>72 >>74 とほぼ同じだけど
#include <stdio.h>
int main(void)
{
int price, subtotal = 0, tax, pay, change;
int ichiman, gosen, sen, gohyaku, hyaku, goju, ju, go, ichi;
printf("いらっしゃいませ\n");
while(price) {
scanf("%d", &price);
if(price) printf("小計 = %d円\n", price);
subtotal += price;
}
tax = 0.05*subtotal;
printf("小計 = %d円 消費税%d円 合計金額%d円\n", subtotal, tax, subtotal+tax);
printf("お預かり金額 : ");
scanf("%d", &pay);
change = pay-(subtotal+tax);
if(change < 0) {
printf("お金が足りません");
return 0;
}
ichiman = change/10000; change -= ichiman*10000; gosen = change/5000; change -= gosen*5000;
sen = change/1000; change -= sen*1000; gohyaku = change/500; change -= gohyaku*500;
hyaku = change/100; change -= hyaku*100; goju = change/50; change -= goju*50;
ju = change/10; change -= ju*10; go = change/5; change -= go*5; ichi = change;
printf("1万円 : %d枚 5千円: %d枚 千円 : %d枚\n", ichiman, gosen, sen);
printf("5百円 : %d枚 100円: %d枚 50円 : %d枚\n", gohyaku, hyaku, goju);
printf("10円 : %d枚 5円: %d枚 1円 : %d枚", ju, go, ichi);
return 0;
}
>>68 #include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
void execpwd(char **argv) { execlp("pwd", "pwd", (char*)0); }
void execls(char **argv) { execvp("ls", argv); }
void (*execfn[])(char **argv) = { execpwd, execls, 0 };
int main(int argc, char **argv) {
pid_t pid;
int i, status;
for (i = 0; execfn[i]; ++i) {
if ((pid = fork()) == 0) {
(*execfn[i])(argv);
_exit(1);
}
if (pid == -1) return perror("fork"), 1;
waitpid(pid, &status, 0);
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
return fprintf(stderr, "command failed\n"), 1;
}
return 0;
}
>>16 #include <stdio.h>
#include <stdlib.h>
double triangle(double a, double h)
{
return a * h / 2;
}
int main(void)
{
char buf[256];
double a, h;
printf("三角形の面積計算\n");
printf("底辺の長さ:");
if (fgets(buf, 256, stdin) == 0) {
return 1;
}
a = atof(buf);
printf("高さ:");
if (fgets(buf, 256, stdin) == 0) {
return 1;
}
h = atof(buf);
printf("----------------\n");
printf("面積:%g", triangle(a, h));
return 0;
}
>>72 2000円札忘れてたぜ
#include <stdio.h>
int main(void) {
int price, subtotal = 0, tax, pay, change;
int ichiman, gosen, nisen, sen, gohyaku, hyaku, goju, ju, go, ichi;
printf("いらっしゃいませ\n");
while(price) {
scanf("%d", &price);
if(price) printf("小計 = %d円\n", price);
subtotal += price;
}
if(subtotal == 0) {
printf("何も買ってません"); return 0;
}
tax = 0.05*subtotal;
printf("小計 = %d円 消費税%d円 合計金額%d円\n", subtotal, tax, subtotal+tax);
printf("お預かり金額 : ");
scanf("%d", &pay); change = pay-(subtotal+tax);
if(change < 0) {
printf("お金が足りません"); return 0;
}
ichiman = change/10000; change %= 10000; gosen = change/5000; change %= 5000;
nisen = change/2000; change %= 2000; sen = change/1000; change %= 1000;
gohyaku = change/500; change %= 500; hyaku = change/100; change %= 100;
goju = change/50; change %= 50; ju = change/10; change %= 10;
go = change/5; change %= 5; ichi = change;
printf("壱万円紙幣 : %d枚 五千円紙幣 : %d枚 弐千円紙幣 : %d枚 千円紙幣 : %d枚\n", ichiman, gosen, nisen, sen);
printf("五百円硬貨 : %d枚 百円硬貨 : %d枚 五十円硬貨 : %d枚\n", gohyaku, hyaku, goju);
printf("十円硬貨 : %d枚 五円硬貨 : %d枚 一円硬貨 : %d枚", ju, go, ichi); return 0;
}
[1] 授業単元:C言語 [2] 問題文: #include<stdio.h> #include<ctype.h> main(){ char c[10]; char *p; int i=0; printf("Enter a number; "); fgets(c,6,stdin); p=&c; while(isdigit(*p)){ i=i*10+(*p++)-48; printf("You have entered; %d\n",i); } } 上記のプログラムを元にして、足し算が出来るプログラムにせよ。 1+2を入力しENTERを押すと3が出力されるようにせよ。 また、足し算のほかにも引き算、掛け算、割り算のプログラムも作れ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2007年07月05日まで [5] その他の制限:特になし
>>87 86です。
引き算、掛け算、割り算も出来るプログラム教えてください。
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
最小二乗法は計測データの分析に使われる方法である.
ある測定で,xとyのn組のデータ(x1,y1),(x2,y2), .......(xn,yn)が得られたとする.それらの点は一次関数y=ax+bで表される直線の近傍で誤差を持ってばらついているとみなされるとき,一般に最小二乗法を用いる事でこの直線を推定できる.
それによれば,a,bは以下の式で求められる.
式→
http://vista.crap.jp/img/vi8356319177.jpg 1行にxとyのそれぞれ値がスペースで区切られ,n組のデータがn行となって書かれたテキストデータを受け付け,最小二乗法でa, bを求めるプログラムを書け.
ファイル名の長さは最大で(マクロ定数で定義された)FILENAME_MAX文字までとしてよい.
データの行数は最大128行とする.
読み込んだデータはdouble型として扱い,配列x[], y[]に代入する.
最小二乗法でa, bを求める関数linestをプロトタイプ宣言し,x, yの配列の先頭アドレスとデータ数を渡す.
main関数以外の関数内で配列は使用せず,for文とポインタを利用すること.
出力する傾きと切片は,それぞれ"a = ","b = "の後に続けて小数第4位まで一行ずつ表示する.
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 7月5日10時まで
[5] その他の制限:特になし
よろしくお願いします。
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4509.txt [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 7月5日9時まで
[5] その他の制限:
実行結果
/home]% ./calender
2007 7
sun mon tue wed thu fri sat
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
/home]% ./calender
2006 7
sun mon tue wed thu fri sat
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
/home]%
よろしくお願いします。
>>94 その実行画面でWindows…?
それにしても横に長い問題文だなw
っつか、カレンダーの問題である年月日の曜日が何曜日であって、それを基点に合計日数を求めて とかって問題があるが、俺それは苦手だw まぁ、グレゴリオ暦が1582年10月15日(金)から始まっているから そこからの合計日数を求めちゃえば良いんでね?
>>99 >グレゴリオ暦が1582年10月15日(金)
どこの話? 世界中で切り替わったわけではないのだけれど。
#だから、古いカレンダーを作らせる課題は現実的じゃない。
110 :
本日の揚げ足取り厨 :2007/07/05(木) 06:05:51
108 名前:デフォルトの名無しさん 投稿日:2007/07/05(木) 05:55:43
>>99 >グレゴリオ暦が1582年10月15日(金)
どこの話? 世界中で切り替わったわけではないのだけれど。
#だから、古いカレンダーを作らせる課題は現実的じゃない。
どこの話? 世界中で切り替わったわけではないのだけれど。
#だから、古いカレンダーを作らせる課題は現実的じゃない。
どこの話? 世界中で切り替わったわけではないのだけれど。
#だから、古いカレンダーを作らせる課題は現実的じゃない。
どこの話? 世界中で切り替わったわけではないのだけれど。
#だから、古いカレンダーを作らせる課題は現実的じゃない。
グレゴリオ暦の話だよ?????現在使用されているグレゴリオ暦の起源だよ?
何で 言ってもいないこと まで言ったことになってんの?
そうだよ、世界中でなんて誰も言ってないよ?w
早とちり揚げ足厨乙。お前ってさぁ、日ごろそういう、相手のあら探しをしようとして
逆に相手に深いな思いをさせて嫌われて干されているタイプだろ?
俺の方が知ってるぜぇ〜みたいな。あぁきめぇ。
>>109 > 委員会の作業の末、完成した新しい暦は1582年2月24日に発布され、
> 同年10月4日(木曜)の翌日を10月15日(金曜)とすることが決定した。
何も間違ってないじゃん。グレゴリオ暦については。何が言いたいんだ
>>108 こいつは?
いつ誰がどこで日本でもなんて書いた?お前の妄想って痛すぎ。
>>108 > どこの話?
どこのじゃなくてグレゴリオ暦の始まりの話。どこのとかじゃなくて、グレゴリオ暦についての話。
なんでどこの国がいつ導入したって話しまでしなきゃだめみたいな言い方してんだ?
グレゴリオ暦はグレゴリオ暦だろ。存在は日本が導入する前からあったってことで良いじゃん。
なんなら、日本で有効とするために、そのグレゴリオ暦のカレンダーを算出するプログラムに
日本で導入した年月日以上の値が入力されなきゃ無効にするコードを追加すりゃええやろ。
そんなの自分でやれよ、初心者
>>94 > 少なくとも、うるう年の判断を1800年から2200年まで正しく行うものとする.
ふぅ、やれやれ。
> # 1873年(明治6年)1月1日 - 日本
んじゃ、この課題は日本では今使われているグレゴリオ暦が使われていなかった頃にも
対処しなきゃならないのか。グレゴリオ暦以前のカレンダーってさぁ
閏年もグレゴリオ暦と違っていて、しかもそれ以前の暦の法則を間違えて使っていたって
話しだし、どうすりゃええのん?
>>108 (・∀・)ニヤニヤ 反論まだかにゃ〜?いつ誰が日本でもグレゴリオ暦を
制定通りに施行されたと言ったのかにゃ〜?どこの話じゃなくてグレゴリオ暦の話ね。
>>108 フォルツァ!何とか言えや、小僧。いつだれが日本でも導入したって言うた?あぁん?
口の穴から手ぇ突っ込んで痔核ガタガタ言わせてやんよ?
>>108 さんハァハァ、出ておいで、いじめたりしないからハァハァ
ちょっとぼくちん、君の事が気になって「しょうがない」んだよ。
君がこのスレの住人に注目されても「しょうがない」んだよ。
しょうがないけど、僕は辞任しませんよ。だって、僕は大臣じゃないから。
君ってグレゴリオ暦の詳細について知っていてすごいね。それを学校で言ったら
先生に褒められて成績も+αのボーナスがもらえるんでしょ?これで成績優秀はバッチリだね ♥
つーかあれだ、グレゴリオ暦の起源から日数を数えるのがナンセンスなのよね。 別に現行暦で1年1月1日を想定してそこから数えりゃ充分でしょ。 #time_tは1970年、Excelあたりは1900年、一部の処理系は1904年基準だったかな?
でたよ、行頭に # をつける気持ち悪い奴。お前か、通りで。マジきめぇ。
119 :
デフォルトの名無しさん :2007/07/05(木) 07:36:51
授業単元:C言語 環境:if文・for文・while文・do〜while文・switch〜case文・ OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:文字配列の操作 問題 文字列を入力して偶数番目の要素と奇数番目の要素を別の配列に格納し、文字として表示しなさい 実行画面 文字列入力==>ABC123def 偶数要素:AC2df 奇数要素:B13e
>>117 > つーかあれだ、グレゴリオ暦の起源から日数を数えるのがナンセンスなのよね。
> 別に現行暦で1年1月1日を想定してそこから数えりゃ充分でしょ。
んなこたーねーけど、仮に今の暦の法則を過去にも適用して戻した場合の
1年1月1日からの合計日数を割ったあまりを曜日にするってのは俺も同意する。
が、お前はきめぇ。妄想ぶっこく前に勝手なことを言うのは慎み給え。
自分にとって価値があるないだの、そういう話はナンセンス。
グレゴリオ暦は1582年10月15日を金曜日としてスタートしているんだし
122 :
デフォルトの名無しさん :2007/07/05(木) 11:49:56
[1] 授業単元: プログラミングU [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc最新版 [3.3] 言語:C [4] 期限:07年7月9日まで [2] 問題文 直線x=0, y=1, y=x^2で囲まれた部分の面積を求めよ。また, この図形をy軸のまわりに回転させた図形の体積を求めよ。 [5] その他の制限: 面積は下記のように求められたのですが体積の値が分りません。ご教授願います。 for(x=0; x<1; x+=0.001) for(y=0; y<1; y+=0.001) if(x*x<=y) count1++; s=count/1000000.0;
123 :
デフォルトの名無しさん :2007/07/05(木) 12:06:20
授業単元:C言語 環境:if文・for文・while文・do〜while文・switch〜case文・ OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:文字配列の操作 問題1:キーボードより表示開始文字と表示開始文字と表示終了文字を入力し、開始〜終了までの文字を表示しなさい char moji[]="ABCDEF〜XYZ"; /*大文字26*/ 実行画面 moji:ABCDEF〜XYZ 開始位置==>B 終了位置==>F 表示:BCDEF moji:ABCDEF〜XYZ 開始位置==>D 終了位置==>D 表示:0 moji:ABCDEF〜XYZ 開始位置==>E 終了位置==>B 表示:EF〜XYZAB
124 :
123の続き :2007/07/05(木) 12:13:46
授業単元:C言語 環境:if文・for文・while文・do〜while文・switch〜case文・ OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:文字配列の操作 問題:文字列と検索文字、置換文字を入力し文字列の検索文字を置換文字に置き換えなさい 実行画面 文字(m1)入力==>ABCDEFAABCDABC 削除文字==>A 置換文字==>* 結果文字列(m1):*BCDEF**BCD*BC 問題2:文字列と削除文字列を入力し文字列中から削除文字を排除しなさい 実行画面 文字列入力(m1)==ABCDEFAABCDABC 削除文字==>A 結果文字列(m2)==>BCDEFBCDBC
>>122 #include <stdio.h>
#include <string.h>
#include <math.h>
int main(void)
{
double v = 0.0, y, dy = 1.0/1024;
for (y = 0.0; y < 1.0; y += dy)
v += dy * M_PI * y;
printf("%g\n", v);
return 0;
}
126 :
デフォルトの名無しさん :2007/07/05(木) 12:41:10
[1] 授業単元:実プロC
[2] 問題文(含コード&リンク):
1.xclock -update 1 を何個か起動し、 指定された間隔で一つずつSIGTERMで停止させる
プログラムを書け。 ただし、個数と間隔は、コマンドライン引数で次のように指定できるものとする。
オプション
-n n n個起動する。デフォルト値は6。
-t t 約t秒間隔で停止させる。デフォルト値は10。
2.emacs と xclock -update 1 を起動し、 emacs が終了すると
xclockをSIGTERMで停止させるプログラムを書け。
↓xclock -update 1 を起動し、約30秒後にSIGTERMで停止させるプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4513.c [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:来週の火曜日まで。
[5] その他の制限: ないです。
どうかよろしくお願いします。
127 :
デフォルトの名無しさん :2007/07/05(木) 13:08:54
授業単元 C のプログラム 問題文double func(double x) という関数funcについて x=x0からx=x1までの範囲について数値積分した値を返す 関数areaをつくれ 積分の計算方法は、x0からx1の範囲をn等分し、各分点xでの 関数値func(x)に刻み幅をかけた矩形の面積を足し合わせて 求めるものとする。 double area(double x0, double x1, int n) 環境 LINUX 期限 早めに お願いします
128 :
デフォルトの名無しさん :2007/07/05(木) 13:11:37
129 :
デフォルトの名無しさん :2007/07/05(木) 13:21:37
[1]単元:プログラミング技術 [2]問題:アップローダーNo.4514に載せておきました。 [3]環境 OS:リナックス コンパイラ:gcc 言語:C [4]期限:できれば今日中にお願いします
130 :
デフォルトの名無しさん :2007/07/05(木) 13:33:09
[1] 授業単元: プログラミング2 [2] 問題文: 2つの整数の配列(aとbとする)を引数とし、配列aの有効な全ての要素bの先頭から コピーする関数を作りなさい。ただし、配列aには先頭から正の整数データが格納されている ものとし、データの最後には必ず0が入ってる。また、配列bは呼び出し側で配列aの値を コピーする十分な大きさが与えられているものとする。この条件を満たさずにこの関数が 呼び出された場合、動作は保証しなくてよい。 この関数を呼び出す適当なmain関数を作って動作を確かめなさい。main関数には 配列を3つ(m1,m2,m3)作りm1にデータを入力(または初期値で設定)し、関数を2回呼び出して、 m1をm2にコピーし、さらに、m2をm3にコピーしなさい [3] 環境 [3.1] OS: WindowsXP home [3.2] コンパイラ名とバージョン:gpp [3.3] 言語:c++ [4] 期限:本日17時まで [5] その他の制限:関数についての習ってるところの課題です よろしくお願いします
>>129 #include <stdio.h>
void zz(char *array, int n, int r, int min)
{
int i;
if (r == 0)
puts(array);
else
for (i = min; i < n; ++i) {
if (array[i] == '-') {
array[i] = 'O';
zz(array, n, r - 1, i + 1);
array[i] = '-';
}
}
}
int main(int argc, char **argv)
{
int n, r;
char array[10] = "---------";
zz(array, 9, 3, 0);
return 0;
}
>>127 double area_(double (*fn)(double), double x0, double x1, int n)
{
int i;
double s = 0.0, dx = (x1-x0)/n;
for (i = 0; i < n; ++i)
s += dx * (*fn)(x0 + (x1-x0)*i/n);
return s;
}
double area(double x0, double x1, int n) { return area_(func, x0, x1, n); }
>>132 もっと早く
double area_(double (*fn)(double), double x0, double x1, int n)
{
int i;
double s = 0.0, x = x0, dx = (x1-x0)/n;
for (i = 0; i < n; ++i) {
s += dx * (*fn)(x);
x += dx;
}
return s;
}
135 :
sage :2007/07/05(木) 14:33:26
>>130 #include <iostream>
#include <iterator>
template <typename InputIterator, typename OutputIterator, typename Type>
OutputIterator
zcopy(InputIterator src, OutputIterator dst, Type value)
{
for (;;) {
*dst = *src;
if (*src == value)
break;
++dst;
++src;
}
}
int main()
{
int m1[] = { 1, 2, 3, 4, 5, 0 }, m2[10], m3[10];
zcopy(m1, m2, 0);
zcopy(m2, m3, 0);
zcopy(m3, std::ostream_iterator<int>(std::cout, " "), 0);
std::cout << '\n';
}
137 :
136 :2007/07/05(木) 14:36:11
すまん #include <iostream> #include <iterator> template <typename InputIterator, typename OutputIterator, typename Type> OutputIterator zcopy(InputIterator src, OutputIterator dst, Type value) { for (;;) { *dst = *src; if (*src == value) break; ++dst; ++src; } return dst; } int main() { int m1[] = { 1, 2, 3, 4, 5, 0 }, m2[10], m3[10]; zcopy(m1, m2, 0); zcopy(m2, m3, 0); zcopy(m3, std::ostream_iterator<int>(std::cout, " "), 0); std::cout << '\n'; }
138 :
デフォルトの名無しさん :2007/07/05(木) 14:38:39
何方か123 124お願いします
140 :
デフォルトの名無しさん :2007/07/05(木) 14:39:27
141 :
デフォルトの名無しさん :2007/07/05(木) 14:48:32
何方か123 124お願いします
142 :
デフォルトの名無しさん :2007/07/05(木) 14:49:34
>>137 こんな短時間でありがとうございます
助かりました
>>123 #include <stdio.h>
char moji[]="ABCDEF〜XYZ"; /*大文字26*/
int main(void)
{
char c1, c2;
printf("moji:%s\n", moji);
printf("開始位置==>");
c1 = getchar();
printf("終了位置==>");
c2 = getchar();
printf("表示:");
moji[c2 - 'A' + 1] = '\0';
printf("%s", &moji[c1]);
if(c2 < c1)
printf("%s", &moji[0]);
return 0;
}
144 :
takeru :2007/07/05(木) 15:48:01
東京大学かよ
[1] 授業単元:c言語 [2] 問題:キーボードから1桁の整数データを順次入力しデータを印刷し 入力データの和を求め、最後にゼロのデータが入力されたら処理を終了し 入力データの和と個数を出力するプログラムをwhile文を用いて作成せよ [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ Microsoft Visual Studio 2005 [3.3] 言語: C [4] 期限:07年7月5日24時まで [5] その他の制限:特になし よろしくお願いします
C言語 大文字を小文字に変換、小文字を大文字に変換するプログラムを関数を使ってしめせ。 ソラリス8 gcc 4時半までにお願いします。初心者なのでできれば詳しくお願いします。
>>144 天下の東大の宿題なんて、3流大の俺には出来ないぽ
CとC++の区別もつかず 2chに宿題丸投げするような東大工学部の学部学生がいるんだな
150 :
デフォルトの名無しさん :2007/07/05(木) 17:35:34
151 :
デフォルトの名無しさん :2007/07/05(木) 18:24:21
152 :
デフォルトの名無しさん :2007/07/05(木) 18:54:16
>>146 #include <stdio.h>
int main(void){
#define BUF_SIZE 10
char c[BUF_SIZE];
int sum=0,cnt=0,ch;
while(fgets(c,BUF_SIZE,stdin) && c[0]!='0'){
if ('1'<=c[0]&&c[0]<='9') {
sum+=c[0]-'0';
cnt++;
printf("input: %c\n",c[0]);
}
else
printf("(´・ω・`)\n");
}
printf("count: %d, sum: %d\n",cnt,sum);
return 0;
}
153 :
151 :2007/07/05(木) 19:42:51
制限つきました。 ・同じ処理は関数化して処理するようにする。 ・プロトタイプ宣言した関数内で使う変数が4つ以上の場合 変数を構造体にする。 という制限と共に、問題1と2を一緒にやる結果になりました。 あと問題の内容というか処理としては、 1を入力したらIPアドレスの表示 2を入力したらホスト名の取得 3を入力したら終了 という処理にすることになりました。 よろしくお願いいたします。
154 :
デフォルトの名無しさん :2007/07/05(木) 19:51:17
156 :
デフォルトの名無しさん :2007/07/05(木) 20:17:42
>>155 さん
はい。申し訳ありませんでした・・
どうもありがとうございます。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 以下をメンバに持つ構造体を定義し、仮想商品20個の商品名と利益率を利益率の高い順に一覧表にせよ。但し、利益率とは(利益/仕入値)である。 ・商品コード(整数) ・商品名(文字列) ・価格の構造体(仕入値、売値(共に整数)からなる) [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: [2007年7月6日17:00まで] [5] その他の制限:91代目で書き込んだのですが、力不足で理解できませんでした。 もう一度お願いします。
前スレの993ですが、 iの公式が間違っていたので正しい式に直したらきちんとした値が出力されました。 アドバイスしていただいた方々ありがとうございました。 #include <iostream> int main() { double i, i2, v3 = 0.0, v32, tk, v0 = 0.0, t1, t2, dt = 0.0001, t; int N = 100; i = 0.0; v3 = 0.0; t = dt; std::cout << "t(" << t << "), i = " << i << ", V3 = " << v3 << std::endl; do { if (v3 < 5) v0 = 10.0; else if (v3 > 7) v0 = 0.0; i2 = i + (v0 - 100.0 * i - v3)*dt; v32 = v3 + 1000.0 * i * dt; i = i2; v3 = v32; t += dt; std::cout << "t(" << t << "), i = " << i << ", V3 = " << v3 << std::endl; } while (--N); } 作りなおしたソースが以上になったのですが、この出力の結果をfprintf関数でファイルに出力するにはどうすればいいのでしょうか?
>>158 変数の範囲(-2147483648〜2147483648)で正常な計算が行えることを確認する
-2147483648〜2147483647
の間違いだろなこれ
161 :
デフォルトの名無しさん :2007/07/06(金) 00:01:22
>>158 (2)
#include <stdio.h>
#include <stdlib.h>
int main() {
int a, b;
char i, buf[64];
printf("変数a >");
scanf("%s", buf);
a = atoi(buf);
printf("変数b >");
scanf("%s", buf);
b = atoi(buf);
printf("a + b: %d\n", a+b);
printf("a * b: %d", a*b);
return 0;
}
162 :
デフォルトの名無しさん :2007/07/06(金) 00:47:33
163 :
デフォルトの名無しさん :2007/07/06(金) 00:52:37
>>159 例えば 1.txt に出力する場合
#include <iostream>
#include <fstream>
int main()
{
double i, i2, v3 = 0.0, v32, v0 = 0.0, dt = 0.0001, t;
int N = 100;
std::ofstream ofs("1.txt");
i = 0.0;
v3 = 0.0;
t = dt;
ofs << "t(" << t << "), i = " << i << ", V3 = " << v3 << std::endl;
do {
if (v3 < 5)
v0 = 10.0;
else if (v3 > 7)
v0 = 0.0;
i2 = i + (v0 - 100.0 * i - v3)*dt;
v32 = v3 + 1000.0 * i * dt;
i = i2;
v3 = v32;
t += dt;
ofs << "t(" << t << "), i = " << i << ", V3 = " << v3 << std::endl;
} while (--N);
}
>>158 初心者っぽくやってみた
#include <stdio.h>
int main(void){
int num,i,j=2,temp_min,temp_max,min[3],max[3];
while(num){
while(j){
scanf("%d",&num);
min[j]=num;
max[j]=num;
j--;
}
scanf("%d",&num);
temp_min=min[0]; temp_max=max[0];
for(i=0;i<3;i++){
if(min[i]>temp_min) temp_min=min[i];
if(max[i]<temp_max) temp_max=max[i];
}
for(i=0;i<3;i++){
if((min[i]==temp_min)&&(min[i]>num)) min[i]=num;
if((max[i]==temp_max)&&(max[i]<num)) max[i]=num;
}
}
for(i=0;i<3;i++) printf("%d ",min[i]);
printf("\n");
for(i=0;i<3;i++) printf("%d ",max[i]);
return 0;
}
>>48 48のだと結果が0になっていまうんですけど。
何をいれても0
なんで私のはダメなんでしょう・・・?
169 :
デフォルトの名無しさん :2007/07/06(金) 02:20:06
[1] 授業単元:c言語 [2] 問題: 対象ファイルより基数ソートでの並び替えならびに出力を行い時間を計る [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ Microsoft Visual Studio 2005 [3.3] 言語: C [4] 期限:07年7月6日AM12時 [5] その他の制限:関数の使用 入力ファイル: sort.txt 出力ファイル: sort_c.txt 補足:並べ替えする対象は1-99999の数値がランダムに1001個ならんでおり 一つずつ改行されている 初めてお願いします。説明等不足があるかもしれませんがよろしくお願いします。
確かgccです
gccでも問題なし もう一回コンパイルしてみれば?
エラーが出て、全部のプログラム見ても大丈夫なんですけど。
じゃあ入力の仕方が変なんじゃね?
そうかも知れないですね。可能性はあります。いちいち再起動が憂鬱です。
176 :
デフォルトの名無しさん :2007/07/06(金) 04:54:13
[1] 授業単元: Cプロ [2] 問題文 キーボードから順次入力された正の整数を0が入力されるまで、配列に順番に格納し、入力された(0を除く)値の平均値(実数)に、最も近い値が何番目に入力されたどういう値であるかを表示するプログラムを作成せよ。 [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン:(gcc) [3.3] 言語:C [4] 期限: 7月9日(月) [5] 実行例 数字(1)を入力してください 2 数字(2)を入力してください 5 数字(3)を入力してください 3 数字(4)を入力してください 1 数字(5)を入力してください 0 入力された数字の平均は2.75です これは、3番目に入力された3に最も近いです よろしくお願いします。
>>176 その課題、そのままそっくりのを少し前に見かけた気がする・・・ちと過去ログあさってくる。
180 :
176 :2007/07/06(金) 06:35:52
>>177 >>178 >>179 解答ありがとうございます。実は、最初に書いておかなくて、申し訳ないんですが、179の解答で使用されているatoi関数、fgets関数、malloc関数、stdin関数、realloc関数、sizeof演算子はまだ授業で習っておりません。
別の方法(できれば初歩的な方法で)表現できないでしょうか…
int nNewmeric = (int)(cBuf[0]-'0'); if( 0 <= nNewmeric && nNewmeric <= 9 ) {// 整数だった // バッファに格納 } else {// それ以外 printf("整数って言ってるだろボケ\n"); } atoiの代わりは上のコードでなんとかなる malloc習ってないなら固定長でもいいんじゃ? ちと、会社行くんであとはまかせた。
184 :
デフォルトの名無しさん :2007/07/06(金) 07:19:16
188 :
デフォルトの名無しさん :2007/07/06(金) 08:00:06
単語帳から、少なくとも2語以上の単語を含む合成語を 削除するプログラムを教えてください!! ひと 人 やま 山 た 田 やまだ 山田 たろう 太郎 かんり 管理 かんりにん 管理人 かんりにん 管理者 やまだたろう 山田太郎 やまだはなこ 山田花子 ↓ 使用後 ひと 人 やま 山 た 田 やまだ 山田 たろう 太郎 かんり 管理 かんりにん 管理者 やまだはなこ 山田花子
189 :
108 :2007/07/06(金) 08:10:39
失礼な、私がそんなスペリングミスなどするものか。
>>188 山と田はあるが山田を消さないためには山田は合成語ではない、という
情報が必要だ。それだけでは無理だな。
192 :
188 :2007/07/06(金) 11:01:46
少なくとも2語以上の単語を含む合成語です
>>192 だから、山田は山と田を含んでいるだろう
意味分かってる?
>>188 の結果はそれに応じて処理されていないと思うんだが・・・
195 :
188 :2007/07/06(金) 11:25:02
>>193 山田は、一語の単語しか含みません
山田人、山田山は2語の単語を含みます
山田川は、2語の単語を含みますが、単語帳から合成できません
>>195 > 山田は、一語の単語しか含みません
で、それをどうやったら知ることができるんでしょうか?
えーと、素のCだけで、日本語の「単語」を認識できると思ってるの?
197 :
188 :2007/07/06(金) 11:31:16
単語帳(合成語を含む)は188にのっています
>>197 で、
>>188 のデータの単語と合成語をどうやって区別すんの?
山田は単語で、管理人は合成語、と。
どっちも単語帳の別の二語を足したもんだよね?
まさか二語以上って二文字以上って意味?
201 :
188 :2007/07/06(金) 11:34:46
合成語は、2文字以上の単語を含むものです
>>188 げんご かんきょう とかも かいたほうがいいと おもうよ
203 :
188 :2007/07/06(金) 11:55:06
標準のC++でおねがいします
>山田は、一語の単語しか含みません
>>188 を見ると、管理って単語と人って単語があるよね。これらを合わせた管理人は合成語になるんだよね。
でも山って単語と田って単語があるようだけど、山田は山って単語と田って単語を合わせた合成語ににはならないんだよね。何で?
管理+人は合成語で山+田は合成語じゃないって事をどうやって知るの?
206 :
デフォルトの名無しさん :2007/07/06(金) 13:32:40
207 :
188 :2007/07/06(金) 13:37:54
管理は2語で、山と田は一語です
208 :
デフォルトの名無しさん :2007/07/06(金) 13:39:39
ひらがなも見ろと言うことか?
209 :
188 :2007/07/06(金) 13:43:14
ひらがなは関係ないです
>199が書いてる通り語を文字の意味で使ってる日本語の不自由な可哀想な子なんだろ。
211 :
188 :2007/07/06(金) 13:46:40
ひらがなは関係ないです
「2語以上の単語を含む合成語を削除する」んだよね。
山と田は1語なら山+田は1+1=2語になるよね。
2語以上なら2語も含まれるから削除されると思うけど。違う?
>>208 (ひと 人)と(かんり 管理)で(かんりにん 管理人 )が削除されてるよ。
(ひと 人)で無く(にん 人)ならわかるんだけど。
>>210 どうやらそうらしいね。
213 :
188 :2007/07/06(金) 13:48:23
管理は一語で、山と田は2語です
214 :
188 :2007/07/06(金) 13:49:52
管理は一語で、山と田は2.5語です
215 :
188 :2007/07/06(金) 13:51:07
管理は野イチゴで、山と田は2.5語です
216 :
デフォルトの名無しさん :2007/07/06(金) 13:51:38
188もういい
217 :
188 真 :2007/07/06(金) 13:52:16
単語長が2字以上のものを含むヤツです
単語長が3字以上のもんを含むヤシです ヤシ
219 :
188 真 :2007/07/06(金) 13:57:29
「管理」と「人」を足すと、管理人となるけど、これが野イチゴなんです。ちなみにラッキーカラーは赤です。
あああ orz どなたか206もお願いします
2ちゃんで名前を管理人にすると変換されました
>>206 ・ソートにかかった時間は成績に反映します
がんばれ
223 :
デフォルトの名無しさん :2007/07/06(金) 14:08:52
ファイル出力する際にフォルダを指定するにはどうすればいいのでしょうか
225 :
デフォルトの名無しさん :2007/07/06(金) 14:12:24
FILE *fp; int n, a[128]; fp = fopen("array.txt", "r"); n = 0; while(fgets(buf, 32, fp)) { a[n++] = atoi(buf); } fclose(fp); qsort(..., n, compare);
226 :
188(真) :2007/07/06(金) 14:13:16
ヒント出すので、188をつくってくれ 高速な基数ソートのやりかた char tmp[40000]; tmp[i]をゼロクリアする 入力データをdとするとき、tmp[d]に1を加える すべてのデータが処理できたら tmp[0]からtmp[40000]の数値分だけ出力する
169 = 206 =220 お願いしてる立場なのにすみません 信じて待ってみます
228 :
188(真) :2007/07/06(金) 14:15:46
>>227 ヒント出したからあとは中学生でも出来るよ
山田太郎は 山 田 太郎なのか 山田 太郎なのか
山田 太郎は、芸能人
>229 太郎が二文字の時点でどっちでもいいだろ。
232 :
デフォルトの名無しさん :2007/07/06(金) 14:19:24
山 、田 、太 、郎、 山田、太郎、 山田太 が辞書に入っていたら、単語帳が最長になる、 山田太 郎 としてください
233 :
225 :2007/07/06(金) 14:21:26
fp = fopen("s_array.txt", "w"); while(n) { fprintf("%d\n", a[--n]); } fclose(fp);
235 :
188(真) :2007/07/06(金) 14:25:54
>>227 あと高速化できるのは、ファイルをバイナリで一度にメモリに読み込むとか、
読み込みと、足し算の処理をマルチスレッド化することだな
225,226,233,235,ありがとうございます。 225-233 なのですが文字列の格納先のアドレスがbufのところがわからなく、 エラーになってしまいます><
char buf[32];
atoiとqsortの識別子を教えていただけませんか>< 理解しようとしたのですができませんでした
失礼しました識別子じゃなくてどんな風に定義すればいいですか?
>>239 #include <stdlib.h>でOK
>>226 これか
/*ソート開始*/
fp = fopen("array.txt", "rt");
while (fgets(buf, 32, fp)) {
tmp[atoi(buf)]++;
}
fclose(fp);
fp = fopen("s_array.txt", "wt");
for (i = 0; i < 40000; i++)
{
while (tmp[i]--)
{
fprintf(fp, "%d\n", i);
}
}
fclose(fp);
/*ここまで*/
>>241 やったね。fprintfの行をfprintf(fp, "%d\n", a[n--]); に修正。
qsortをマニュアル見て修正。やってみそ
244 :
188(真) :2007/07/06(金) 14:53:11
#include <stdio.h> #include <time.h> #include <stdlib.h> int main(void) { time_t timer1,timer2; /*変数宣言*/ time(&timer1); /*処理を記述 --- Start--- */ FILE *fp; int n, a[40000]; fp = fopen("array.txt", "r"); char buf[32]; for(n=0;n<40000;n++)a[n]=0; while(fgets(buf, 32, fp)) { n = atoi(buf); a[n]++; } fclose(fp); fp = fopen("s_array.txt", "w"); for(n=0;n<40000;n++)for(int i=0;i<a[n];n++) fprintf(fp,"%d\n", n); fclose(fp); /*処理を記述 --- End --- */ time(&timer2); printf("経過時間: %f秒\n",difftime(timer2,timer1)); return 0;}
242,244ほんとーーーーにありがとうございました!!! ぎりぎり間に合いました!!! 二つともをzip形式固めてで提出させていただきます 2chの人ほんとにいいひとだー> <,
246 :
デフォルトの名無しさん :2007/07/06(金) 14:57:48
教科:プログラミング入門 問題1 5人の成績管理プログラムを作成せよ。 全員の生徒の学籍番号、国語、算数の成績を入力する。(3つの配列を定義) 検索機能として、学籍番号を入力した際、該当者の2教科の成績と平均点を出力する。 学籍番号に0が入力されるまで繰り返し検索できるようにする。 問題2 10個の整数を入力し、小さい順に並べ替えよ。 バブルソートを使用すること OS:XP コンパイラ:cygwin 言語:1番、2番共にC++です。 どなたかよろしくお願いします
247 :
244 :2007/07/06(金) 15:11:34
まちがえてしもた for(n=0;n<40000;n++)for(int i=0;i<a[n];n++) for(n=0;n<40000;n++)for(int i=0;i<a[n];i++) だった すまん
248 :
デフォルトの名無しさん :2007/07/06(金) 15:14:17
244をそのまま出すと、ソートが正しく行われない為、零点かも・・・わざとじゃないよ
249 :
169 ◆NPjWSW9EXI :2007/07/06(金) 15:39:03
OKですギリギリごたごたにまぎれて変更できました^^ 三時すぎてたのにありがとうございます。
250 :
250 :2007/07/06(金) 15:50:00
問題文:C++で次の微分方程式を数値計算を用いて解け。 アルゴリズムはルンゲクッタ法または後退オイラー法を使用すること。 ・3*d^2/dt^2+dx/dt+2x=2 ・x(t=0)=0 ・dx/dt(t=0)=0 わかる方いらっしゃいましたらおねがいします!
251 :
250 :2007/07/06(金) 15:55:38
250の修正です ・3*d^2x/dt^2+dx/dt+2x=2です d^2x/dt^2のxが抜けてましたすみません
>>249 自分でやってないのがばれた時点でマイナスだろうけどね
255 :
デフォルトの名無しさん :2007/07/06(金) 18:58:49
>>255 - n = sizeof(status_name_table) / sizeof(status_name_table[0]);
- while (n > 0) {
- nbsp; nbsp; n--;
- nbsp; nbsp; printf("Condition %s.\n", status_name_table[n]);
nbsp; nbsp; nbsp; sleep(1);
nbsp; }
---------------------------------------------------------------------
+ n = 1;
+ while (n < argc -1) {
+ nbsp; nbsp; printf("Condition %s.\n", argv[n++]);
nbsp; nbsp; nbsp; sleep(1);
nbsp; }
257 :
256 :2007/07/06(金) 19:52:16
うわすまん - n = sizeof(status_name_table) / sizeof(status_name_table[0]); - while (n > 0) { - n--; - printf("Condition %s.\n", status_name_table[n]); sleep(1); } --------------------------------------------------------------------- + n = 1; + while (n < argc -1) { + printf("Condition %s.\n", argv[n++]); sleep(1); }
[1] 授業単元:C言語実習課題 [2] 問題文(含コード&リンク):横棒グラフ ・10人分の氏名と売上台数を入力して、順位をつけて、 順位の昇順(売上1番から)売上台数を横棒グラフにして表示する。 ・星印は、5台で1個とする。5に満たないものはなし。 (たとえば、23台なら星4つ) ・250台以上は、全て星50個とする。 ・売り上げが同じなら氏名の昇順とする。文字列関数(strcmp)を用いる。 ・氏名は、15文字以内とする。 [3] 環境 [3.1] OS: WindowsVista [3.2] コンパイラ名とバージョン: Visual Studio 2006 [3.3] 言語: C++ [4] 期限: 7月20日 [5] その他の制限:配列を使用 よろしくお願いします。
>>258 いきなり星印って言われても、
実行画面をどうしたいのかサッパリ分からないんだが。
260 :
デフォルトの名無しさん :2007/07/06(金) 20:05:19
>>258 > [1] 授業単元:C言語実習課題
> [3.3] 言語: C++
> コンパイラ名とバージョン: Visual Studio 2006
突っ込みどころが満載過ぎる
262 :
デフォルトの名無しさん :2007/07/06(金) 20:47:32
263 :
デフォルトの名無しさん :2007/07/06(金) 21:05:33
以下の各機能を果たす整数型関数を書け。 a)カ氏温度を受け取って、セ氏温度を返す関数celsius。 b)セ氏温度を受け取って、カ氏温度を返す関数fahrenheit。 補足:カ氏温度をF、セ氏温度をCとすると、F = (9 / 5)*C + 32。 c)これらの関数を使って、0から100度までのセ氏温度に対応するカ氏、および32度から212度までカ氏温度に対応するセ氏温度をそれぞれ表の形にプリントするプログラムを書け。ただし、表は読みやすいように行数を最小限にすること。 よろしくおねがいします。
264 :
◆KqBLZKKJjc :2007/07/06(金) 21:19:01
すいません こんなのもお願い [1] 授業単元:プログラミング入門 [2] 問題 : 100万までの隣り合う素数の差が、 最大のものを出力するプログラムを作成せよ 例)19-17,23-19 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:stady C [3.3] 言語:C [4] 期限:2007年07月09日12:00まで
>>258 C言語&scanfのエラー処理無し
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define RECORD_NUM 10
typedef struct tag_record_t{
char name[101];
int result;
}record_t;
int record_compare(const void *va, const void *vb){
const record_t *a, *b;
a=va;b=vb;
if(a->result==b->result) return strcmp(a->name, b->name);
return b->result-a->result;
}
void record_display(const record_t *record){
int i;
printf("%8s [%3d]", record->name, record->result);
for(i=0;i<50 && i<record->result/5;i++) printf("*");
printf("\n");
}
int main(void){
record_t record[RECORD_NUM];
int i;
printf("氏名、売上台数を入力して下さい\nex. YamadaTarou 23\n");
for(i=0;i<RECORD_NUM;i++) scanf("%s %d", record[i].name, &(record[i].result));
for(i=0;i<RECORD_NUM;i++) record_display(&record[i]);
qsort(record, RECORD_NUM, sizeof(record[0]), record_compare);
printf("------------------------------------------------------------\n");
for(i=0;i<RECORD_NUM;i++) record_display(&record[i]);
return 0;
}
>>266 > 現在のソースコードのすべての行にコメントをつける。
majikayo
>>267 xとyは使ってないから消しても問題なし
270 :
デフォルトの名無しさん :2007/07/06(金) 22:19:44
>>4 期限が7月11日までに延びましたので、再度依頼させていただきます
お暇がありましたら、回答の方よろしくお願いします
>>266 ひでぇソースだな
そういう教官に教わらなきゃいかんとはご愁傷様
272 :
デフォルトの名無しさん :2007/07/06(金) 22:59:40
問題文[1] 授業単元:C言語 [2] 問題文: :入力した人の年齢の合計と平均を出力させるプログラムを作成して下さい。 ※入力時に累積の人数を表示 ※年齢入力時に数字属性と範囲のチェックを行う※nullは不許可とする ※0 〜 9 の文字のみで、かつ 1 〜 99 の範囲のみを許可する※年齢の平均は小数点第二位まで出力する ※名前に空が入力された場合に年齢の合計と平均を出力してプログラムを終了する −実行結果− 1人目の名前:abc 1人目の年齢: 入力エラー(年齢を入力してください) 1人目の年齢:30 2人目の名前:def 2人目の年齢:abc 入力エラー(年齢は数字のみで入力してください) 2人目の年齢:20 3人目の名前:ghi 3人目の年齢:0 入力エラー(年齢は1から99の範囲で入力してください) 3人目の年齢:25 4人目の名前: 年齢の合計は75歳、年齢の平均は25.00歳 [3] 環境 [3.1] OS:Windows [3.2] LCpad [3.3] 言語: C [4] 期限: 2007年7月9日まで [5] 初心者です。
>>268 >>271 分からないとこあったら聞けっていうから
ここが分からないって聞いても
「ネットで調べてください」で終わり。
そのくせ期限までやらないと、なぜ終わらなかったのかの理由と今後の対策を
レポート形式で提出。
レポート何回出したことやら・・・・
まぁ、特にプログラミングなんてネットで調べて出てくることなら 自分で調べるのは当たり前でしょ。
まあレポートは途中まででも出すことに意味があるから 別におかしいことでもない
>264 隣り合う素数の差って答えは一つの差になるんじゃないの? それとも19をはさんで23と17の差が最大ってこと?
>>266 プログラムに関する「コメント」を書いてみたお
1) 最後に(どうでもよい)_getch()を一回使うためだけにconio.hをインクルード、
VC++依存
2) fgets()でいいところをgets_s()なんてものを使っているせいでVC++8.0依存
3) 最初に画面をクリアしていないのでコマンドプロンプトから起動すると
画面が崩れる。当然最後に画面の後始末をするという考えも無い
4) 画面のクリア処理が不十分なので「指定が違いますせん!」などという楽しい
メッセージが見られたりする
5) 使うまでも無いgotoの嵐
6) 入力が[A-Ca-c][1-3]の範囲に入っていることを確認するという下らない仕事の
ために、main()の6行と関数2つも使っている。涙を禁じえない
7) 関数Locate()で、戻り値をBOOLにして単にSetConsoleCursorPosition()の
戻り値をそのまま返してやれば3行減るのに無駄にintに変換。
で、わざわざそんなことをやっているが、Locateの戻り値をチェックしている
箇所は実は1箇所もない
秋田からそろそろやめるわ
279 :
デフォルトの名無しさん :2007/07/07(土) 00:56:44
>254 たすかりました!ありがとうございました!
>>266 コメントのそろえ方がタブ使ってたり空白だったりばらばら
関数や変数の命名規則がめちゃくちゃ
Locale() (大文字かよ)
boardshow (board_show()じゃない)
↓コメントが嘘。
/*
指定した位置に、既に石が置かれているかどうかを調べる関数です。
対応するBoard[row][col]が0以外ならばすでに石が置かれているので
-1を返します。0ならば0を返します。
*/
〜 中略 〜
if ( Board[row][col] == 0 )
nRet = TRUE;
else{
nRet = FALSE;
〜 以下略 〜
281 :
◆KqBLZKKJjc :2007/07/07(土) 04:51:25
>>277 例が分かりづらくてスマン
あくまでも隣り合う素数の差であります。
3-2=1
5-3=2
7-5=2
11-7=4
みたいに、ある素数から一つ手前の素数を引いたのをそれぞれ求めて、
その中から最大の結果だけを出力するようにしたいんです。
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> static bool isPrime(int no) { for (int ic = 3; ic * ic <= no; ic += 2) if (no % ic == 0) return false; return true; } static int getNextPrime(int base) { int no; for (no = base + 2; ! isPrime(no); no += 2) ; return no; } static void primeDist(int limit) { struct Dist {int upper; int lower; int dist;} maxDist = {3, 2, 1}; for (int prime = 3; prime <= limit;) { int nextPrime = getNextPrime(prime); if (nextPrime <= limit) { struct Dist tmp = {prime, nextPrime, nextPrime - prime}; if (tmp.dist > maxDist.dist) maxDist = tmp; } prime = nextPrime; } printf("%d-%d:%d\n", maxDist.upper, maxDist.lower, maxDist.dist); } int main(int argc, char ** argv) { if (argc < 2) return 1; int limit = atoi(argv[1]); primeDist(limit); return 0; }
283 :
282 :2007/07/07(土) 05:30:53
>>282 Usage: ./a.out 1000000
きそう、100万までなら0.5秒で終わるのに1000万だと10秒、2000万だと30秒掛かるぜ。
>264 #include <stdio.h> #define N 1000000 int prime[100000]; int main(void) { int i, j, cnt = 0, max, max_index = 0; prime[cnt++] = 2; prime[cnt++] = 3; for(i=5; i<N; i+=2) { int flag = 0; for(j=1; prime[j]*prime[j] <= i; j++) { if(i%prime[j]==0) { flag = 1; break; } } if(!flag) prime[cnt++] = i; } max = prime[1] - prime[0]; for(i=1; i<cnt-1; i++) { int temp = prime[i+1] - prime[i]; if(temp > max) { max = temp; max_index = i; } } printf("%d - %d = %d\n", prime[max_index+1] , prime[max_index], max); return 0; }
>#define N 1000000 >int prime[100000]; プ
>282より>284が遅いのはなんでなんだぜ。
>285 プ
288 :
◆KqBLZKKJjc :2007/07/07(土) 11:49:12
>>282 ・・・速いッスね
ありがとうございます。
こんなに速く回答いただけて、嬉しいです。
ありがとうついでに、
あつかましいのを承知でお願いしてもいいですか?
このプログラム、自分じゃ手に余ってしまいます。(ムズイ)
上からどんな動作をしているのかを説明してもらえますか?
>>274 質問の仕方を工夫する訓練なんだよ
無料でなんでも教えてくれるのは学生の間だけだぜ
>286 100万程度じゃ差は感じられないだろ。 Nを20000000、prime[2000000]にしてやって見れば282とどっちが速いか分ると思うけど。
見つけた素数を配列に入れて覚えとくと Nがデカいときには効いてくるが、メモリもアホみたいに食う罠
>>288 isPrime()
素数判定関数。毎回その数の平方根以下の全ての奇数の剰余を求めるから遅い。
getNextPrime()
次の素数取得関数。引数には3以上の奇数以外を与えてはならないのにガードも注釈も無い。
primeDist()
素数間距離の最長を見つける関数。引数には見つける範囲の上限を与える。
但し、仮令2以下の数値を与えても(初期値として固定で持っている)2から3の間の1が最長という結果を出力する。
main()
コマンドライン引数から素数間距離の最長を見つける範囲の上限を取得して上記primeDist()を呼ぶ。
引数なしで起動したときに何の説明もしてくれないと言う、これも困った我が儘仕様。
>>264 のstady CってのはStudy CとかいうCのインタプリタのことか?
たぶんC99には対応してないんじゃないかな
294 :
188 :2007/07/07(土) 12:40:59
単語帳の処理ありがとうございました
素数なら篩が最速だろ #include <stdio.h> #define N 1000000 char sieve[N]; int main(void) { int i, j, temp1, temp2, max, m1, m2; sieve[0] = sieve[1] = 1; for(i=2; i*i<N; i++) { if(sieve[i]==0) { for(j=2*i; j<N; j+=i) sieve[j] = 1; } } m1 = temp1 = 3; m2 = temp2 = 2; max = m1 - m2; for(i=5; i<N; i++) { if(sieve[i]==0) { temp2 = temp1; temp1 = i; if(temp1 - temp2 > max) { max = temp1 - temp2; m1 = temp1; m2 = temp2; } } } printf("%d - %d = %d", m1, m2, max); return 0; }
うおっ、無茶苦茶速ぇ
そりゃまぁ、剰余計算が全く無いからね。
> 295 幸い、1000000 で最大のパターンが1つだからそのロジックでいいけど 複数あるとダメだねwww
300 :
デフォルトの名無しさん :2007/07/07(土) 19:16:43
本当にC++かそれは・・・
302 :
300 :2007/07/07(土) 19:30:18
初心者なもので、すいません… コンパイラはC++で間違いないと思いますが、言語はC言語かもしれないです…
303 :
デフォルトの名無しさん :2007/07/07(土) 19:50:04
それすらも分からんのか・・・
305 :
デフォルトの名無しさん :2007/07/07(土) 19:54:59
void swap(int *px, int *py) { int tmp; tmp = *px; *px = *py; *py = tmp; } void main() { int a=3, b=5; printf("a=%d, b=%d\n", a, b); swap(&a, &b); printf("a=%d, b=%d\n", a, b); } ポインタってどういう仕組みなんですか?? aとbのアドレスをポインタ*pxと*pyに渡すとどうなるんですか?
306 :
300 :2007/07/07(土) 20:03:35
1回、C言語の書き方で作ってもらえませんか?
307 :
デフォルトの名無しさん :2007/07/07(土) 20:06:49
>>306 参考のプログラムをどういう風に使わせたいのかな。
それ使わないといけないの?構造体は使ってはだめ?
309 :
300 :2007/07/07(土) 20:17:01
使わないといけないということはないです。 要するに、2次元配列を使ってプログラムを作れとのことです。 構造体はまだ授業で扱っていないので、使わないようにお願いします。
310 :
デフォルトの名無しさん :2007/07/07(土) 20:20:39
312 :
デフォルトの名無しさん :2007/07/07(土) 22:03:33
314 :
312 :2007/07/07(土) 22:48:32
>>309 fcloseをしてなかった。
最後と、配列不足で抜けるreturnの前に、
fclose(fp)を入れてくれ。
315 :
300 :2007/07/07(土) 22:55:32
316 :
312 :2007/07/07(土) 22:59:18
まだあった。 int count; を int count = 0; に書き直してくれ。
317 :
デフォルトの名無しさん :2007/07/07(土) 23:00:34
俺が、回答者の気持ちを代弁してやる #include "stdlib.h" ってしろや ってかそれくらいわかったれや
>>313 方法だけ書くと単純にプリムのアルゴリズムでOK。
とりあえずプリムのアルゴリズムでAcceptが出たのを確認してきた。
多少冗長気味に書いても通ったので実行速度とか気にせず書けばいい。
319 :
300 :2007/07/07(土) 23:03:13
もう1つ 大文字と小文字は区別せず、アルファベットの逆順にソートするものです。 たとえば適当にこのような英文があれば… I want to go Zoo. Zoo want to I go みたいな感じです。
320 :
312 :2007/07/07(土) 23:11:35
>>315 >アルファベットの"逆順"でソート
Aとaは同じ順位として扱うのか、それとも、
z>a>Z>Aの並び方にするのか?
321 :
312 :2007/07/07(土) 23:16:31
もう一つ質問だ。 大文字、小文字の区別を付けない場合、 テキスト内に、"WORD","word","Word"と3通りあったら、結果の表示はどうする? 最初に見つけた綴りで行うのか? それとも表示の際に書き換えても良いのか?
322 :
320 :2007/07/07(土) 23:17:08
Aとaは同じ順位で扱います。
323 :
321 :2007/07/07(土) 23:20:44
書き換えても構いません。
324 :
312 :2007/07/07(土) 23:37:18
325 :
324 :2007/07/07(土) 23:45:47
エラーがでましたけど… エラー E2268 report.cpp 42: 未定義の関数 'isalpha' を呼び出した(関数 main(int,char * *) ) エラー E2268 report.cpp 47: 未定義の関数 'tolower' を呼び出した(関数 main(int,char * *) )
>>325 それぐらいググれば一発なのに・・・
isalphaもtolowerもctype.h内の標準ライブラリ関数。
わかんなかったら#include<ctype.h>をソースの先頭に書く。
>>325 323だよな、きっと
番号は最初の質問番号でいいよ
そのつど変えなくて
328 :
312 :2007/07/08(日) 00:03:42
>>325 >>326 が書いているとおりです。
#include <ctype.h>
をソースに追加して下さい。
駄目なときは同様の処理関数を実装しないといけないが、
出来れば車輪は発明したくない。
329 :
300 :2007/07/08(日) 00:07:33
>>326 ctype.hは授業ではやっていないです。
違うように書き換えることってできますか?
>>327 すいません。あんまり書き込みをしないもので…
330 :
デフォルトの名無しさん :2007/07/08(日) 00:14:08
tolower(char c){ if(c >='A' && c<'Z')return c+'a'-'A'; } こんな感じか?動かしてはいない
331 :
300 :2007/07/08(日) 00:16:50
isalphaの方も早く教えてください
332 :
312 :2007/07/08(日) 00:21:25
333 :
デフォルトの名無しさん :2007/07/08(日) 00:24:55
tolower( c) = (c >='A' && c<'Z')?c+'a'-'A':c; isalpha(c) = ((c >='A' && c<'Z')||(c >='a' && c<'z'))?1:0;
334 :
303 :2007/07/08(日) 00:26:40
335 :
312 :2007/07/08(日) 00:26:42
buf[i++] = toLower((char)c); よく見るとこれはまずいな buf[i++] = (char)toLower(c); こうすべきですね。
336 :
266 :2007/07/08(日) 00:45:50
>298 ありがとうございました。 朝から全行コメントしてるけど、わけ分からなくなってきたwwwwwwww
337 :
300 :2007/07/08(日) 00:57:27
>>332 大域変数を使わないように書き換えることってできますか?
自分でやれ
最初から条件にそう書いとけよ。 後から後から文句を言うな。
340 :
312 :2007/07/08(日) 01:11:25
>>337 mainのローカル変数に置きたいと言うことですか?
データの量にもよるでしょうが、サイズが大きいと
stackoverflowするんじゃないですかね。
341 :
313 :2007/07/08(日) 01:16:53
>>318 あ〜プリムですか。
いま別問題でクラスカルをかいていたのですが、AとかBとかそこら辺の処理をまちがったのかな・・。
ちなみにプリムの実装はどんな感じでやりましたか?
クラスカルを実装する際に昇順ソートの
<int,int,greater<int> >というキューかリストが使えると便利だなと思って頑張ったのですが
どうもエラーが多発&わけがわからなくなったので
multimap<int,int>+struct[int]{int,int}で実装しましたが・・。これでも結構複雑に成ってしまいました。
3引数っていうのも難しいのですが、その上に特定の箇所の重みでソートをかけるという指定があまり良く分かっていなかったりするのが原因なのでしょうが・・。
342 :
デフォルトの名無しさん :2007/07/08(日) 01:19:21
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):入力ファイル(in.txt)から4行4列の行列Aを読み込み 行列Aの逆行列を求めそれを出力ファイル(out.txt)に出力せよ。 [3] 環境 [3.1] OS:Windows [3.3] 言語:C [4] 期限:2007年7月8日23:00 [5] 入力ファイル in.txt A 2 0 1 0 0 -1 1 -2 1 0 1 0 0 1 -1 3 です。どなたかお願いします!!
312がいい人過ぎて泣いた
344 :
300 :2007/07/08(日) 01:21:43
>339
すいません。
>>340 そういうことです。
345 :
◆KqBLZKKJjc :2007/07/08(日) 01:27:57
素数の質問した者です。
いくつかのプログラムをお答えいただき、本当にありがとうございます!!
自分としては、どう処理が行われているかを大体理解できる
>>295 さんのが気に入りました。
本来ならもっと早くお礼を述べたかったのですが、
半日ぐらい過ぎてしまいました。
申し訳ない・・・
最後に、自分の拙い質問に、真剣に考えてくださった方々へ
本当の本当にありがとうございました。
C言語です。 二つの符号なし整数a,b(ただしa>bとし、bは2のべき乗とする)をキーボードから読み込み、 @a,bを2進表示し、配列の中にビットを格納しなさい。 Aa,bの四則演算(上のを使って、相手に10進で入力させ、それを2進表示する) c=a+b d=a-b e=a*b f=a/b(商のみ) を計算し、その結果を出力しなさい。 7月14日までです。お願いします。
348 :
312 :2007/07/08(日) 01:52:28
349 :
300 :2007/07/08(日) 02:39:29
>>348 本当にありがとうございます!!
助かりました!!
イキナリで申し訳ありませんm(__)m 当方某学校にて「C言語入門」を勉強しているのですが、 宿題がわからないんです! 優しい方、お手数ですが教えていただけないでしょうか。 わからない、その1 「コンピュータが計算する、任意の数の型は何型ですか。」 わからない、その2 「関数yesno(char *msg)で、キーボードから a を入力したときの、戻り値は何か。」 もし、よろしければ答えてくださると助かります。 よろしくお願いいたします。
マルチするのはえぇよw
マルチ申し訳ありません。 はい、当方とても眠いです。 俺に聞けスレは勢いがなさそうでしたので、こちら様に同じものを書いてしまいました。 携帯からのカキコミなので、くやしく書くと恐らく途中でねてしまうかもしれません( ;´Д`) 今日の朝9時15分頃にパソコンが使える状況になるのですが、 その時に宿題をUPしてもよろしいでしょうか。
356 :
デフォルトの名無しさん :2007/07/08(日) 03:51:33
342の書き込みをしたものです。逆行列を求めるプログラムは何とかで見つかったんですが、 ↓のを改変して4行4列の行列を入力ファイル(.txt)から読み込んで出力ファイル(.txt)に書き込むようにできる方いらっしゃいませんか?おねがいします。 include <stdio.h> #define NN 50 main(){ int i,j,n ; double a[NN][NN]; printf( "n×n行列の逆行列を計算します。\n" ); printf("n=?\n"); scanf ( "%d" , &n ); for ( i = 0 ; i < n ; ++i ){for ( j = 0 ; j < n ; ++j ){ printf("%d行%d列成分 a[%d][%d]=?\n",i+1,j+1,i+1,j+1); scanf("%lf",&a[i][j]);}}for ( i = 0 ; i < n ; ++i ){ for ( j = 0 ; j < n ; ++j )printf ( "%10.2lf " ,a[i][j] ); printf ( " \n" );}printf ( "\n \n" ); inv(a,n,NN);for ( i = 0 ; i < n ; ++i ){ for ( j = 0 ; j < n ; ++j )printf ( "%10.2lf " ,a[i][j] ); printf ( " \n" );}} /* 逆行列の計算 */ int inv(a,n,nn) double *a; int n,nn;{int i,j,k; double p,q; double *ak,*ai; for ( k = 0 , ak = a ; k < n ; ++k , ak += nn ){ p=ak[k]; ak[k]=1.0; for ( j = 0 ; j < n ; ++j ) ak[j]/=p; for ( i = 0 , ai = a ; i < n ; ++i , ai += nn ){ if ( i!=k ){q=ai[k]; ai[k]=0.0; for ( j = 0 ; j < n ; ++j ) ai[j]-=q*ak[j];}}}}
359 :
358 :2007/07/08(日) 06:30:43
ミスった if(max < fabs(a[j][i]))をif(fabs(max) < fabs(a[j][i]))に直してください
360 :
358 :2007/07/08(日) 06:34:12
追記 もしかしたら#include <stdlib.h>が必要かも
361 :
358 :2007/07/08(日) 07:01:08
362 :
358 :2007/07/08(日) 07:16:30
あれ。。。。 スワップするともしかしてマズイ?
>>342 #include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 4
int main(void){
FILE *fpin = fopen("in.txt", "r"), *fpout = fopen("out.txt", "w");
double a[N][2*N], tmp, mul;
int i, j, k;
if(!fpin || !fpout) exit(1);
for(i = 0; i < N; i++) for(j = 0; j < N; j++) if(fscanf(fpin, "%lf", &a[i][j]) != 1) exit(2);
for(i = 0; i < N; i++)
for(j = N; j < 2*N; j++){
if(i + N == j) a[i][j] = 1;
else a[i][j] = 0;
}
for(i = 0; i < N; i++){
tmp = a[i][i];
for(j = 0; j < 2*N; j++) a[i][j] /= tmp;
for(j = 0; j < N; j++)
if(i != j){
mul = a[j][i]/a[i][i];
for(k = 0; k < 2*N; k++) a[j][k] -= mul*a[i][k];
}
}
for(i = 0; i < N; i++){
for(j = N; j < 2*N; j++) fprintf(fpout, "%.2f\t", a[i][j]);
fprintf(fpout, "\n");
}
fclose(fpin); fclose(fpout);
return 0;
}
364 :
デフォルトの名無しさん :2007/07/08(日) 07:50:43
>>341 えーと、プリムはpriority_queue<pair<int,int> >で、
とりあえず、pair::firstにコストの逆数を突っ込んで実装しました。
クラスカルも実装してみました。
こっちは短いのでそのまま貼り付けてみる。
構造体の代わりにintに全て押し込んでます。
#import<algo.h>
main(){for(int n,m,l,i,u,c,d;cin>>n,n;){char c,d;int p[32]={},
t[32]={},g[1024];for(c=d=u=i=0;i<n-1;++i,p[i]=i)for(cin>>c>>m;
m--;g[u++]=l<<10|c-'A'<<5|d-'A')cin>>d>>l;sort(g,g+u);for(;++m
<u;)for(l=32,(n=p[g[m]&31])-(i=p[g[m]
>>5 &31])?t[p[n]=i]+=t[n]+
(g[m]
>>10 ):0;l--;)p[l]=p[p[l]];cout<<t[*p]<<'\n';}}
368 :
デフォルトの名無しさん :2007/07/08(日) 11:23:55
教科:プログラミング入門 問題1 5人の成績管理プログラムを作成せよ。 全員の生徒の学籍番号、国語、算数の成績を入力する。(3つの配列を定義) 検索機能として、学籍番号を入力した際、該当者の2教科の成績と平均点を出力する。 学籍番号に0が入力されるまで繰り返し検索できるようにする。 問題2 10個の整数を入力し、小さい順に並べ替えよ。 バブルソートを使用すること OS:XP コンパイラ:cygwin 言語:1番、2番共にC++です。 どなたかよろしくお願いします
369 :
303 :2007/07/08(日) 11:35:33
303をお願いします。 128×128×128の配列で作ってみたんですが、大きすぎるのかバグって止まります・・・・
128 = 2^7 すなわち 2^7 * 2^7 * 2^7 = 2^21 = 2,097,152
371 :
デフォルトの名無しさん :2007/07/08(日) 11:54:18
助けてください [1] 授業単元: C言語 [2] 問題文:strcpy(文字列コピー)とstrcat(文字列追加)と同じ動きの関数を独自に作成 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: 2007年7月9日 12:00 [5] その他の制限:string.hは使用禁止 よろしくお願いします。
>>371 char*strcpy_(char*dst,const char*src){
char*p=dst;
while(*p++=*src++){}
return dst;
}
char*strcat_(char*dst,const char*src){
char*p=dst;
while(*p)++p;
strcpy_(p,src);
return dst;
}
>>371 char *strcpy(char *dest, const char *src)
{
char *s = dest;
while(*s++ = *src++);
return dest;
}
char *strcat(char *dest, const char *src)
{
char *s = dest;
while(*++s);
strcpy(s, src);
return dest;
}
すでにある回答とほとんど同じなのは切ない
375 :
371 :2007/07/08(日) 12:12:48
>>372 ありがとうございます。
まだコンパイルしてないけど
while(*p++=*src++){}
こんな記述できるんですね。
初めて知りました。
static をつけて、一時しのぎ
3重ポインタでmalloc
379 :
デフォルトの名無しさん :2007/07/08(日) 12:44:03
windows APIを使って、ファイルを開くダイアログに ファイルの削除ボタンと追加保存ボタンを追加したいのですが、 どうやってやればいいんでしょうか??(C言語です)
>>374 destの一文字目がNUL文字のときにstrcatに問題あるくね?
char s[100]="";
strcat(s,"Hello");
puts(s);
>>380 そこまで考えて無かった
while(*s++);
strcpy(s-1, src);
あたりで大丈夫だと思う。試してないけど。
382 :
◆KrpcpKelXU :2007/07/08(日) 12:52:35
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 文字列s2の任意の文字に等しい文字をs1から除去する形のプログラムを書け。 (例) s1にThe C programming language.と入力 s2にhr gl.と入力すれば、 TeCpoamminanuaeと画面に表示するプログラムを書いて下さい。 [3] 環境 [3.1] OS: (Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10日23:59まで
383 :
デフォルトの名無しさん :2007/07/08(日) 13:05:02
>>382 #include <stdio.h>
int main(void)
{
char s1[1024], s2[1024], *s, *t;
gets(s1);
gets(s2);
for(s=s1;*s!='\0';s++)
{
for(t=s2;*t!='\0' && *t!=*s;t++);
if(*t=='\0')
putchar(*s);
}
return 1;
}
384 :
デフォルトの名無しさん :2007/07/08(日) 13:07:58
どなたか368お願いします・・・
テンプレに催促厳禁って書かないか?
>>368 問題1
#include <iostream>
int main(){
int i, search, num[5], lang[5], math[5];
for(i = 0; i < 5; i++) std::cin >> num[i] >> lang[i] >> math[i];
while(1){
std::cin >> search;
if(search == 0) break;
for(i = 0; i < 5; i++) if(search == num[i]) break;
if(i < 5) std::cout << lang[i] << " " << math[i] << " " << (lang[i] + math[i])/2.0 << std::endl;
}
return 0;
}
問題2
#include <iostream>
#define N 10
#define swap(type, x, y) do{type tmp = x; x = y; y = tmp;}while(0)
void bsort(int n[], int size){
int i, j;
for(i = 0; i < size - 1; i++) for(j = i + 1; j < size; j++) if(n[i] > n[j]) swap(int, n[i], n[j]);
}
int main(void){
int i, n[N];
for(i = 0; i < N; i++) std::cin >> n[i];
for(i = 0; i < N; i++) std::cout << n[i] << "\t";
std::cout << std::endl, bsort(n, N);
for(i = 0; i < N; i++) std::cout << n[i] << "\t";
std::cout << std::endl;
return 0;
}
int i, jはforの中でいいか
催促するときは、未回答一覧を作成することっていうテンプレがあったんだが 面倒すぎて誰も従わないから消えた
390 :
342 :2007/07/08(日) 14:09:24
>>358 ,363
ほんとありがとうございますm(__)m
>>365 君の書いてるコードはTCPだな。UDPじゃない。
まずはUDPでの送受信のやりかたを調べるんだね。
問題文のプロトコルの「ID」の意味はちょっと分からないな。
ファイルの識別子なのか、ファイル自体は固定で、
これを通番のように使えという意味なのか。
多分後者で、これを使ってパケットロスに対処しろということだろうが。
どなたか303をお願いします。考察もして明日ださなきゃいけないのであせってます・・・・
393 :
デフォルトの名無しさん :2007/07/08(日) 16:00:32
[1] 授業単元: C言語プログラミング [2] 問題文(含コード&リンク): データを圧縮するプログラムを作成する. たとえば,1111のように1が4 つ連続して出現した場合,14のように表す. 同様に,00000のように 0が5つ連続して出現した場合,05のように表す. 例えば,111100000(計9文字)のようなデータは,1405 (4文字)と表されるので, 同じデータを少ない文字数で表すことができる. 実行例 %cat compress.txt 1011111000010111100 %./compress 1101150411011402 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:明日 [5] 標準ライブラリは使ってはいけない
標準ライブラリ一切使っちゃいけないのかwww
>>393 #include<unistd.h>
int main(){
char cm[2];
char d,l;
cm[1]='0';
l=read(0,cm,1);
while(l>0){
do{
l = read(0,&d,1);
}while(++cm[1] != '9' && cm[0] == d && l>0);
write(1,cm,2);
cm[0]=d;
cm[1]='0';
}
return 0;
}
397 :
デフォルトの名無しさん :2007/07/08(日) 16:58:48
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):”rand1000.dat”というデータの個数nとその個数分の整数データが保存されているファイルがある
(
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4151.txt )
次の手順で動作するプログラムbinsearch.cを作成し,その動作を確認せよ.
まずファイルからnを読み込み,その数だけデータを読み込み2分探索木に格納する.
次に整数を一つキーボードから入力する.
そしてその整数が配列内に存在する場合にはyes,存在しない場合にはnoを2分探索により判定し,yes/noの判定結果をディスプレイ上に表示する.
さらに,読み込んだデータの最小値を表示し,プログラムを終了する.
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
[3.3] 言語: C
[4] 期限: 7月10日 夜まで
[5] その他の制限:いろいろなデータについて実行し,yes/noの判定と最小値が正しいことを確認すること.
どなたか解る方。お願いいたします。
398 :
310 :2007/07/08(日) 17:38:13
>>389 さん、ありがとうございます。やってみます。
[1] 授業単元:プログラム技術 [2] 問題文(含コード&リンク): 問題1. 下の表のようなデータを入力したとき,(a)〜(o) を求めるプログラムを作成しなさい.な お,表のデータはあくまでも例なので,実際には,汎用的に使えるように,商品数,単価, 個数は実行時に任意の数・データをキーボードから入力すること. 表 品物名単価個数代金累積代金消費税込み累積代金 商品1 249 15 (a) (b) (c) 例 商品数を入力して下さい. --> 1 <商品1> 単価を入力して下さい. --> 249 .. 個数を入力して下さい. --> 15 .. ** 単価×個数** ==> 3735 ** 累積合計代金** ==> 5895 ** 消費税込み累積合計代金** ==> 6189.75 問題2. 正整数n を入力し,n× n の正方行列において,以下のような○と●のパターンを出力す るプログラムを作成しなさい. n = 1 n = 2 n = 3 n = 4 n = 5 ・ ・ ○●○●○ ●○●○ ●●○●○ ○●○ ○○●○ ○○○●○ ・ ・ ・ ●○ ●●○ ●●●○ ●●●●○ ○ ○○ ○○○ ○○○○ ○○○○○ よろしくおねがいします
ずれたorz 問題2. 正整数n を入力し,n× n の正方行列において,以下のような○と●のパターンを出力す るプログラムを作成しなさい. n = 1 ○ n = 2 ●○ ○○ n = 3 ○●○ ●●○ ○○○ n = 4 ●○●○ ○○●○ ●●●○ ○○○○ n = 5 ・ ・ ・ ○●○●○ ●●○●○ ○○○●○ ●●●●○ ○○○○○・・・ よろしくおねがいします
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): (1)入力したグレースケール画像(256×256画素、8ビット256諧調)を8枚のビットプレーンに分解し、それぞれのプレーンを出力するプログラムを作成せよ。 (2)(1)で作成した8枚のビットプレーンのうち、いずれかのプレーンを指定して透かし画像(1、ランダム画像 2、ロゴ画像)と置き換えた透かし埋め込み画像を出力するプログラムをかけ。またそれぞれの画像を表示した結果を示せ。 (3)(2)で作成した透かし入り画像から、好かし画像を抽出(検出)して表示するプログラムを作れ。また、その画像を表示した結果を示せ。 [3] 環境 [3.1] OS:MacOSX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 明日までにお願いします。
403 :
400 :2007/07/08(日) 18:33:14
[3][4][5]忘れてたオワタ [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限 来週の火曜辺りまで [5] その他の制限 なし
>>400 >(a)〜(o) を求めるプログラムを作成しなさい.
(a)〜(o)は何?
406 :
400 :2007/07/08(日) 19:20:29
>>405 (a)〜(c)まででOKです。打ち間違いです
>401 #include <stdio.h> int main(void) { int i, j, n; scanf("%d", &n); for(i=n; i> 0; i--) { if(i%2) { for(j=0; j<n-i+1; j++) printf("○"); for(j=0; j<(i-1)/2; j++) printf("●○"); } else { for(j=0; j<n-i; j++) printf("●"); for(j=0; j<i/2; j++) printf("●○"); } putchar('\n'); } return 0; }
ちょっと改良 #include <stdio.h> int main(void) { int i, j, n; printf("n="); scanf("%d", &n); for(i=n; i > 0; i--) { if(i%2) for(j=0; j<=n-i; j++) printf("○"); else for(j=0; j<n-i; j++) printf("●"); for(j=0; j<i/2; j++) printf("●○"); putchar('\n'); } return 0; }
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):関数定義 double myDistance(double x1, double y1, double x2, double y2)にする 平方根の計算にはsqrt()関数を用いる sqrt()を使うためにはmath.hをincludeする必要があります. プログラムのはじめに「#include <math.h>」を書くこと を満たして、点p=(x1,y1)と点q=(x2,y2)との距離を求める関数を作りなさい。 [3] 環境 [3.1] OS:Win [3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003 [3.3] 言語: C++ [4] 期限:2007年07月09日09:30まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) できるだけ簡単なものにしてください。よろしくお願いします。
>>410 #include <stdio.h>
#include<math.h>
typedef struct{
double x;
double y;
}dot;
double myDistance(double x1, double y1, double x2, double y2){
return(sqrt(pow(x2-x1,2)+pow(y2-y1,2)));
}
int main(void)
{
dot p;
dot q;
printf("点p=(x1,y1)\n");
printf("x1:");scanf("%lf",&p.x);
printf("y1:");scanf("%lf",&p.y);
printf("点q=(x2,y2)\n");
printf("x2:");scanf("%lf",&q.x);
printf("y2:");scanf("%lf",&q.y);
printf("p-q間の距離は%fです。\n",myDistance(p.x,p.y,q.x,q.y));
return 0;
}
△return(sqrt(pow(x2-x1,2)+pow(y2-y1,2))); ○return sqrt((x2-x1) * (x2-x1) + (y2-y1) * (y2-y1));
◎return hypot(x2-x1,y2-y1);
>>413 数学っぽくないな。
それは全然○じゃない。
>>411 >>415 >>416 >平方根の計算にはsqrt()関数を用いる
とあるからpow()もhypot()を使うことは想定されていないと思うんだ。
>できるだけ簡単なものにしてください。よろしくお願いします。
とあるから、数学っぽいかどうかは考慮されていないと思うんだ。
>>417 >平方根の計算にはsqrt()関数を用いる
>とあるからpow()もhypot()を使うことは想定されていないと思うんだ。
「sqrtを使う=他の数学関数を使わない」ってどういう理屈?
数学っぽい=プログラミングに疎くても直感的に分かりやすい。
とことんプログラミングの初心者用にするなら構造体使わないほうが良いけど、
使った方が点として数学の知識で直感的に分かりやすい、と。
寧ろ漏れは、>413のどこが数学っぽくないのか聞きたい。
>>419 数学の授業で(x2-x1)*(x2-x1)って書き方するか?
数学の授業でpowって習う?
まぁ、わざわざ△付けて自分のに○付けるほどの答えではないな。
どっちでもいいのに何でくだらない事で盛り上がってんの?
>>421 pow使って二乗と同じように一まとめにして形を公式に近くしてる。
って考えると俺は
>>415 に一票。
プログラミングの宿題として考えたら、sqrt()しかヒントが無い状況でpow()を使うほうが無理があるだろ。
math.hを使うようにって書いてあるのにpow使うのが無理があることか?
他のヘッダで定義されてるもの使ってるならまだ分かるけど。
てか結局の所
>>413 はたいして優れたこと言ってないのに
人の答えに△付けて自分に○付けるのがどうかと…。
どっちも下らないことで粘着しすぎ 実にどうでもいい
430 :
デフォルトの名無しさん :2007/07/09(月) 00:17:00
432 :
430 :2007/07/09(月) 00:55:24
>>431 済まない。一カ所修正が漏れていた。
230行目
n=&htnode[i*CHAR_SIZE+j];
を、
n=&htnode[(i*CHAR_SIZE+j)*CHAR_SIZE+k];
にしてくれ。
433 :
デフォルトの名無しさん :2007/07/09(月) 03:30:30
[1] 授業単元:数値計算 [2] 問題文: 以下の問題からプログラムを作成して下さい。 RLC回路においてV0=10V、R=100Ω、L=1H、C=1mFのとき、 コンデンサの両端の電位差V3が7Vになったら、V0と接続するスイッチを切る。 5Vになったらスイッチを再びもどす。 以下これを繰り返すことにする。 ただし、t=0において電荷は無し(V3=0)とする。 このとき回路の閉路方程式、条件を表し、時間tに対するi(t)、V3(t)の変化をグラフに示せ。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VisualC++6.0 [3.3] 言語: C++ [4] 期限: 2007/7/9 [5] その他の制限: 特になし
435 :
デフォルトの名無しさん :2007/07/09(月) 05:25:43
[1] 授業単元:計算プログラム [2] 問題文(含コード&リンク):組み合わせ nCkを表すプログラムの作成 [3] 環境 [3.1] OS:WindowXp (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: Microsoft Visual [3.3] 言語: C++ [4] 期限: 2007年7月9日12:00([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: なし(どこまで習っているか、標準ライブラリは使ってはいけない等々)
>>428 >5科目の【総合得点】が最も高かったすべての学生に【奨学金】として10万円与える。
最も高かったすべての学生って
総合得点が同点の場合、同率1位扱いするってことか?
>>435 こういうのはありか?ほかに漸化式と再帰を使うとかあるけど・・・。
#include <iostream>
using namespace std;
int main() {
int n,k,i;
int a,b;
cout << "Input n > "; cin >> n;
cout << "Input k > "; cin >> k;
if(n<k || n<0 || k<0) return 1;
for(i=n,a=1; i>n-k; i--) a*=i;
for(i=2,b=1; i<=k; i++) b*=i;
cout << a/b;
return 0;
}
#include <iostream> int nCk(int n, int k) { if((n>k) && (k>0)){ return nCr(n-1,k-1) + nCr(n-1,k); } else if(n==k || k==0){ return 1; } } int main() { int n,k; std::cin >> n; std::cin >> k; std::cout << nCk(n,k) << std::endl; return 0; }
440 :
デフォルトの名無しさん :2007/07/09(月) 10:00:40
[1] 授業単元: プログラミング C [2] 問題文(含コード&リンク): 面白いプログラムを作成せよ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限: 今日中にお願いします [5] その他の制限: while,do-whileを習った後の課題です。 面白いってのはシステム的ではなく、お笑い系。 教授が関西出身のようで・・・・・・。 他の課題は済ませたのですが、自分では面白いプログラムを作る自信がありません。 どうか力をかしてください。 お願いします。
>>440 何かキーを押したら「わっはっはっはっは、うっひゃっひゃっひゃっひゃ、あ〜〜〜腹痛ぇ」
みたいな文字列を表示させるプログラムでもええんか?do while を使って
EOFが検出されるまで
442 :
440 :2007/07/09(月) 10:56:33
>>441 ちゃんと機能するならそれで良いと思います。
#include <windows.h>
char a[]=" 747:7:@:@C@AC@ACCCCCC<7<7HFHLOMLJLMLHJCJCJLMOQOMLMOTOMHHLMOOHJLMOQ"
"QTSQOOOOONMMMLLLJHGEGEC",b[]=" 747747:7:@:>@:>@>7542<7<7<<77<77>
>>77 >>77>>"
">77<<<777<7<<7:77755<<<55789:;<=>?@ABCCC>
>>7 ",c[]="1822822822222222<<6666666"
"62442642222426624422224222222266426622242642422222222222222222228";float f(i)
{return i?f(i-1)*1.0595:55;}main(i,t){for(i=t=0;c[i]&&(t--||(t=c[++i]-*c));Be\
ep(f(b[i]-*b),40))Beep(f(a[i]-*a),40);}
>>442 >>440 もうアホとも何とでも言ってくれ
#include <stdio.h>
int main(void) {
int cnt=0,i;
while( getchar() != EOF ) {
printf("わっ");
cnt++;
for(i=0; i<cnt; i++) {
printf("はっ");
}
printf("\n");
if(cnt%10==9) cnt=0;
}
return 0;
}
>>435 漏れ流パスカルの三角形を使用
#include <iostream>
using namespace std;
#define MAX 34
int nCr(int n, int r) {
int a[MAX][MAX],i,j;
if(r==n || r==0) return 1;
else if(r==1 || (n-r)==1) return n;
a[0][0]=1;
a[1][0]=1; a[1][1]=1;
for(i=2; i<=n; i++) {
a[i][0]=1; a[i][1]=i;
for(j=2; j<i-1; j++) {
a[i][j] = a[i-1][j-1]+a[i-1][j];
}
a[i][i-1]=i; a[i][i]=1;
}
return a[n][r];
}
int main(void) {
int n,r;
cout << "n = ";
cin >> n;
cout << "r = ";
cin >> r;
if(n<0 || r<0 || n<r || n>=MAX) return 1;
else cout << n << "C" << r << " = " << nCr(n,r);
return 0;
}
>>446 問題見たら、びっくりした
解くとかそういう次元じゃない
もうたまらん。
449 :
440 :2007/07/09(月) 12:44:34
>>445 ありがとうございます。
僕が考えるより確実に良いです。
あほって言われるくらいがいいと思いますし。
助力感謝します。
>>440 #include <stdio.h>
int main(void){printf("Hello World\n");return 0;}
451 :
258 :2007/07/09(月) 13:15:18
>>265 大変遅くなりましたが、ありがとうございます。
452 :
デフォルトの名無しさん :2007/07/09(月) 14:11:47
age
すいません。
>>347 のaとbは8ビットで結果は16ビットです。ごめんなさいm(_ _)m
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 整数を扱うa〜zという名前のメモリに対し、加減乗除を行うプログラムを作成しなさい。 @メモリへの設定(i:in) 例)メモリcに10を設定する。 function ==> i memory ==>c data ==>10 Aメモリ内容の参照(r:refer) 例)メモリdの内容を参照する。 function ==>r memory ==>d data ==>5 Bメモリ内容の加算(a:add) 例)メモリcの内容にメモリdの内容を加える。(結果はメモリcに設定) function ==>a memory1 ==>c memory2 ==>d 10 + 5 = 15 以下減算(s:subtract)、乗算(m:multiply)、除算(d:divide)と続きます。 プログラムの終了(q:quit) function ==>q [3] 環境 [3.1] OS:Windows [3.2] Bcc 5.5 + BccDev [3.3] C [4] 期限:無期限 [5] その他の制限:配列とポインタという章まで習いました。
456 :
デフォルトの名無しさん :2007/07/09(月) 14:38:17
static int memory[26]; int main(void) {
char func; printf("function ==>"); scanf("%c", &func); switch((int)func) { case 'i':
printf("memory ==>"); scanf("%c", &c2); printf("data ==>"); scanf("%d", &data); memory[tolower(c2) - 'a'] = data; break;
>>458 ありがとうございます。光明が見えました。
C言語です。 二つの符号なし整数a,b(ただしa>bとし、bは2のべき乗とする。またaとbは8ビットで、演算の結果は16ビットです。)をキーボードから読み込み、 @a,bを2進表示し、配列の中にビットを格納しなさい。 Aa,bの四則演算(上のを使って、相手に10進で入力させ、それを2進表示する) c=a+b d=a-b e=a*b f=a/b(商のみ) を計算し、その結果を出力しなさい。 習ったのはfor文、if文、do文、while文、シフト演算子{(>>)(<<)}、ビット単位のAND演算子(&)、OR演算子(|)、排他的OR演算子(^)、1の補数(~)です。 7月14日までです。お願いします。
462 :
デフォルトの名無しさん :2007/07/09(月) 15:35:39
>>397 やってみようとしたがこれ、マジ分からん
どうでも良いけど問題出すくせに
>>461 みたいなURLの置き方マジ止めて欲しい。
見てもらう気あるのかと。
464 :
デフォルトの名無しさん :2007/07/09(月) 16:09:16
1] 授業単元:情報演習 [2] 問題文: 入場料の算出表 種別 料金 人数 子供 x円 s人 大人 y円 t人 老人 z円 u人 子供は14歳以下、老人は60歳以上とする。 消費税r%、割引あり [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual C++ 6.0 [3.3] 言語: C++ [4] 期限: [5] その他の制限: できる限り簡単にお願いします。 上記の問題よろしくお願いします。
>>464 割引とはどんな場合にどの程度なんだ???????
466 :
デフォルトの名無しさん :2007/07/09(月) 16:19:54
>>465 わかりません課題文にそう書いたあります・・・
割引はスルーで構わないので、お願いします。
>463 2chブラウザ入れることもできない人には見てもらわなくても結構ってことなんじゃね?
>>464 消費税が端数の時切り捨てるのであれば以下
チェックはしていない
#include<stdio.h>
int main(){
int x,y,z,s,t,u,r;
printf("子供の料金=");scanf("%d",&x);
printf("子供の人数=");scanf("%d",&s);
printf("大人の料金=");scanf("%d",&y);
printf("大人の人数=");scanf("%d",&t);
printf("老人の料金=");scanf("%d",&z);
printf("老人の人数=");scanf("%d",&u);
printf("消費税率=");scanf("%d",&r);
printf("売り上げ=%d\n",x*(100+r)/100*s+y*(100+r)/100*t+z*(100+r)/100*u);
return 0;
}
469 :
デフォルトの名無しさん :2007/07/09(月) 16:44:01
[1] 授業単元: プログラム実習 [2] 問題文(含コード&リンク): 次の微分方程式を数値計算を用いて解け(その後エクセルで表にする)。 アルゴリズムはルンゲクッタ法または後退オイラー法を使用すること。 ・3*d^2x/dt^2+dx/dt+2x=4 ・x(t=0)=0 ・dx/dt(t=0)=0 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: bcc32 [3.3] 言語: C++ [4] 期限: 大至急! [5] その他の制限: 制限なし
>>468 さんありがとうございました。助かりました。
>>467 2chブラウザ入れてるけど普段firefoxのfoxage2chから見てるから
h抜きリンクとかひどく不便なんだよなぁ。
472 :
デフォルトの名無しさん :2007/07/09(月) 17:19:14
>>397 二分木に数値は登録して最小値表示までやった。数値検索yes/noの関数とヒープのfree関数
は、作ってない。なぜかというとソースを書いてて、なんかむなしくなってきたから。以上
#include <stdio.h> #include <stdlib.h>
typedef struct BTree BTree;
struct BTree{
int data;
BTree *left;
BTree *right;
};
int search_min(BTree *root)
{ if(root==NULL) return -1;
if(root->left==NULL) return root->data;
return search_min(root->left); }
BTree *MakeNode(int data)
{ BTree *temp = malloc(sizeof(BTree));
if(temp == NULL) return NULL; temp->data = data; temp->left = NULL; temp->right = NULL;
return temp; }
void MakeBTree(BTree **root,int data)
{ if(*root == NULL){ *root = MakeNode(data); return; }
if(data < (*root)->data) MakeBTree(&((*root)->left), data);
if(data > (*root)->data) MakeBTree(&((*root)->right), data); }
int main()
{ FILE *fp = fopen("rand1000.dat","r"); char buff[256]; BTree *root = NULL;
while(fgets(buff,sizeof(buff),fp)) MakeBTree(&root, atoi(buff));
printf("min %d\n",search_min(root));
return 0;
}
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4569.txt 実行例
1:コーラ 2:ミルクティー 3:ビール 4:オレンジジュース 5:緑茶
110円 140円 210円 190円 120円
希望の飲み物の番号を入力(終了する場合はCTRL+D) 1
商品はコーラ(価格=110円) お金を入れてください。
1000円:1
500円:0
100円:0
50円:0
10円:0
商品価格=110 釣銭あり
投入貨幣 =1000円(1), 500円(0), 100円(0), 50円(0), 10円(0)
釣銭 =1000円(0), 500円(1), 100円(3), 50円(1), 10円(4)
釣銭用貨幣=1000円(1), 500円(9), 100円(7), 50円(9), 10円(6)
希望の飲み物の番号を入力(終了する場合はCTRL+D)
[3] 環境
[3.1] OS: WindowsXP
[3.2]gcc
[3.3] 言語: C
[4] 期限: 7/11まで
[5] その他の制限: 特になし
よろしくお願いします。
476 :
473 :2007/07/09(月) 18:12:41
>>473 は俺んとこじゃ文字化けしてへんけど・・・
UTF-8らすぃ
480 :
デフォルトの名無しさん :2007/07/09(月) 18:52:57
[1] 授業単元: プロC [2] 問題文(含コード&リンク): findコマンドを呼び出して、指定されたディレクトリ (複数可。指定がない場合は、カレントディレクトリ)以下にあるディレクトリ(指定されたディレクトリ自身も含む) を表示するプログラムを作れ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 今週中 [5] その他の制限:無いです どうかよろしくお願いします
プロCそろそろ自重w
うお、もう10回以上丸投げしてるのか、強者だ
483 :
◆KqBLZKKJjc :2007/07/09(月) 19:14:14
すいません、素数の問題を質問した者です。
質問内容
>>264 >>281 >>295 さんのプログラムで自己完結させていただいたのですが、
どう処理されているのかを、
説明してもらえないでしょうか?
あと、マシンパワーの問題で、
100万で実行しても、処理してくれないんです。
1万では実行できました。
100万で実行した結果を教えてください。
お願いします。
お前はなめてるのかと
malloc習ってないのか?
マシンパワーというか、Study Cとかいう変なインタプリタを使ってる からだろうな
>>480 #include <unistd.h>
int main(int argc, char **argv)
{
execvp("find", argv);
return 1;
}
[1] 授業単元: プログラミング技術 [2] 問題文(含コード&リンク): (2)例えば式1+2[ENTER]を入力すると3を出力するように足し算の出来る プログラムに改造したいです。他にも掛け算や割り算、引き算も出来るように お願いします。 #include <stdio.h> #include <ctype.h> main(){ char c[10]; char *p ; int i=0; printf("Enter a number: "); fgets(c,6,stdin); p = &c; //ここでWarningが出るが問題にはならない While(isdigit (*p));{ i=i*10+(*p++)-48; } printf("You have entered: %d\n", i); } [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 明日中 [5] その他の制限:特になし
490 :
デフォルトの名無しさん :2007/07/09(月) 22:12:29
>char c[10]; これに収まる程度の計算式で良いのか?
494 :
デフォルトの名無しさん :2007/07/09(月) 23:45:10
1] 授業単元: C言語 [2] 問題文(含コード&リンク): “数字を入力してください”と表示して整数を入力し、 その数が2の何乗より大きいか求め “それは2のn乗より小さいね”と表示する。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限: 7/10の昼ごろまで [5] その他の制限: 特になし よろしくお願いします。
495 :
282 :2007/07/09(月) 23:47:59
>>483 最初の二重ループはエラトステネスの篩の実装だね。
N以下の全部の数について求めているので、奇数限定篩に代えれば
メモリ半減と処理速度アップが見込めそうだ。
次のループに突入前にm1, m2, maxの初期値として素数2と素数3の
ペアを代入している。これは私のプログラムでも似たようなもんだ。
次のループは5以上N以下(…おっと、N未満か)の全ての整数について、
篩の目から零れ落ちてなければ一個前の素数との距離を求めて
それをm1 - m2(=max)と比較してより大きければm1, m2, maxを更新している。
ここも、奇数限定にすれば若干速くなりそうだな。
まぁ、奇数篩にするとロジックは追い難くなるから諦めてまともな処理系を導入するんだね。
そうそう、結果も貼っておこう。数値が更新されるたびに出力したものがこれ。
--
3:5:2
7:11:4
23:29:6
89:97:8
113:127:14
523:541:18
887:907:20
1129:1151:22
1327:1361:34
9551:9587:36
15683:15727:44
19609:19661:52
31397:31469:72
155921:156007:86
360653:360749:96
370261:370373:112
492113:492227:114
--
おー、丁度32行で収まったよw
496 :
デフォルトの名無しさん :2007/07/09(月) 23:53:42
動的引数関数を#defineでラップする方法を教えてください。 #define ABC( prm00, prm01, ... ) \ func( prm00, prm01, ...);\ void func( int prm00, int prm01, ... ) { } エラーになってしまいます・・・ VC2005です 他で質問をしたけど馬鹿ばっかでマトモな答えが出ませんでした。 ここはそんな事、無・い・で・す・よ・ね???
うお、トリップになっちまったぜ(謎
なんてこったい……_/ ̄|○
どれ
>>494 >その数が2の何乗より大きいか求め
>“それは2のn乗より小さいね”と表示する。
大丈夫か?
>>479 それじゃエスパーかお前と同じ講義を受けてるやつにしか
解答できんだろうな。
504 :
494 :2007/07/10(火) 00:26:19
>>502 僕もそこは疑問に思いましたが、一応問題文そのままです。
考えてくださるのならどちらに合わせても良いですので、よろしくお願いします。
505 :
デフォルトの名無しさん :2007/07/10(火) 00:34:17
496だけど、やっぱりここも無能の巣窟か・・・ 偉そうに片付けるとか言ってお前らの許容範囲を超えると全否定か・・・ 構って貰いたいからって粋がるな! このクズ達が!
507 :
デフォルトの名無しさん :2007/07/10(火) 00:50:26
テンプレに従ってないやつは各自の判断で、 そもそも宿題じゃないのは無視でお願いします。
>>494 #include <math.h>
#include <stdio.h>
int main()
{
int no = 0;
scanf("%d", & no);
int n = (int) (log(no) / log(2));
printf("“それは2のn乗より小さいね”\n");
return 0;
}
512 :
494 :2007/07/10(火) 01:07:34
>>510 ありがとうございます。
助かりました。
>>494 #include <stdio.h>
int main(void) {
int n,i;
printf("数字を入力してください : ");
scanf("%d",&n);
for(i=0; n!=0; n/=2) i++;
printf("それは2の%d乗より小さいね \n",i);
return 0;
}
>>512 ちょっwwwwwwほんまに それは2のn乗より小さいね って表示で良いんかい!?
>>494 #include <stdio.h>
int main(void) {
int n,i;
printf("数字を入力してください : ");
scanf("%d",&n);
for(i=1; n>>i>0; i++);
printf("それは2の%d乗より小さいね \n",i);
return 0;
}
だれか
>>491 お願いします。 期限: 2007年07月10日AM0820まで
せかされると余計にやりたくなくなる性分
さぁタイムリミットが近づいて参りました!ここらでさくっと答えてくれる救世主が現れることを期待して 俺はただただ見て〜〜るぅ〜♪
519 :
デフォルトの名無しさん :2007/07/10(火) 06:51:05
>>516 構造体を定義するだけで終わるんじゃないのか?
520 :
◆KrpcpKelXU :2007/07/10(火) 07:45:01
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 次の動作をするようなプログラムを書く・ ただしあまり極端な入力は想定しなくて良い。 1.入力として空白で区切られた浮動小数点数を2つ 受け取り、(入力終了は改行文字)それらの積を出力する。 ただし、scanf()は使用しないこと。 @入力として10000以下の正の整数を受け取り、 (入力終了は改行文字)その整数が素数であれば、prime number と出力し、素数でなければnot prime numberと出力する。 A入力として10000以下の正の整数を受け取り、 (入力終了は改行文字)その整数の全ての素因数を小さい方か ら順に「,」で区切って出力する。 (入力が60なら、出力は2,2,3,5となる) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 13日お昼12時 自分でも考えているのですが、 よろしくおねがいします。
521 :
479 :2007/07/10(火) 08:11:45
>>503 おっしゃる通りです。
用語やアルゴリズムに関しての補足説明はすべきだと思いましたが
あまりにこちらの補足が足りず見苦しいレスになってしまって申し訳ないですorz
問題文に目を通してくださってありがとうございました。
atof strtok
>1.入力として空白で区切られた浮動小数点数を2つ >受け取り、(入力終了は改行文字)それらの積を出力する。 >ただし、scanf()は使用しないこと。 暇だったから↑のだけ作ってみた コメントつけてないんで意味わからんかも #include <stdio.h> void question0 (void); double scanf_ex(void); int main(void){ question0(); return 0; } void question0 (void){ /*浮動小数点を二つ受け取りそれらの積を出力する*/ double ans; char str[32]; ans = scanf_ex(); ans = ans * scanf_ex(); printf("%lf",ans); gets(str); }
>>520 へ
525続き
double scanf_ex(void){
int i; int j; int cnt;
double ans;
char str[1024];
ans = 0;
printf("入力開始\n");
gets(str);
for(i = 0;i < 1000;i++){
if(str[i] == 0x20){
cnt = 1;
for(j = (i-1);j >= 0;j--){
ans += (str[j]-0x30) * cnt;
cnt = cnt * 10;
}
i = i + 1;
break;
}
}
printf("入力中[%lf]\n",ans);
for(cnt = 1;i < 1000;i++){
if(str[i] == '\0'){
break;
}
cnt = cnt * 10;
ans = ans + ( (double)(str[i]-0x30) / (double)cnt);
}
printf("入力完了[%lf]\n",ans);
return ans;
}
gets 使っちゃだめだから、gets(str);を fgets(str, 1024, stdin);に書き換えといて
ゲッツ!
524だがgets使っちゃダメなのか
>520 A #include <stdio.h> int main(void) { int n, i = 2; scanf("%d", &n); while(i < n) { if(n%i==0) { printf("%d,", i); n /= i; } else i++; } printf("%d", i); return 0; }
改行が見つからないと「永遠にお待ちください」になる上に まってるとデータ破壊していくのか それはすまんかった
524 「gets()」使えないならつくっちまえ と言うことで作った /*gets(str);*/ /*バッファ(srt)は↑で1024確保してあるので1024までなら大丈夫*/ for(i=0;i<1024;i++){ str[i] = getchar(); if(str[i] == '\n'){ str[i] = '\0'; break; } }
連投すまん 534書き込んでから冷静に読み返したら 527さんのでいいではないか・・・ てことで525続き double scanf_ex(void){ int i; int j; int cnt; double ans; char str[1024]; ans = 0; printf("入力開始\n"); gets(str); for(i = 0;i < 1000;i++){ if(str[i] == 0x20){ cnt = 1; for(j = (i-1);j >= 0;j--){ ans += (str[j]-0x30) * cnt; cnt = cnt * 10; } i = i + 1; break; }} printf("入力中[%lf]\n",ans); for(cnt = 1;i < 1000;i++){ if(str[i] == '\0'){ break; } cnt = cnt * 10; ans = ans + ( (double)(str[i]-0x30) / (double)cnt); } printf("入力完了[%lf]\n",ans); return ans; }
そしてまた間違えた524 525続き double scanf_ex(void){ int i; int j; int cnt; double ans; char str[1024]; ans = 0; printf("入力開始\n"); fgets(str, 1024, stdin); /*←この辺修正*/ for(i = 0;i < 1000;i++){ if(str[i] == 0x20){ cnt = 1; for(j = (i-1);j >= 0;j--){ ans += (str[j]-0x30) * cnt; cnt = cnt * 10; } i = i + 1; break; }} printf("入力中[%lf]\n",ans); for(cnt = 1;i < 1000;i++){ if(str[i] == '\0'){ break; } cnt = cnt * 10; ans = ans + ( (double)(str[i]-0x30) / (double)cnt); } printf("入力完了[%lf]\n",ans); return ans; }
期限10分以内。言語はC++ 文法エラーを修正し、プログラムを実行できるようにせよ。 文法エラーを修正できた後、ロジック・ミス(正しい結果 をだせない)を見つけ、修正せよ。 #include <stdio.h> int main() { int data[10] = {5*i}; int key,i;/* 検索する数値 */ index_counter, /* ループカウンター */ data_number = 10, /* 配列内のデータ数 */ counter = 0; /* 同じ数があるかないかを判断する変数 */ i++; printf( "検索したい数を入力せよ>" ); scanf( "%d", key ); for ( index_counter=1; index_counter <= data_number; index_counter++ ) if( key == data[index_counter] ){ printf( "同じ値が見つかりました.位置は %d です.\n", index_counter ); counter++; } if ( counter == 0 ) printf( "同じ数は存在しません.\n" ); } 誰か頼む
コンパイルは通った #include <stdio.h> int main() { int key,i;/* 検索する数値 */ int data[10] = {5*i}; int index_counter, /* ループカウンター */ data_number = 10, /* 配列内のデータ数 */ counter = 0; /* 同じ数があるかないかを判断する変数 */ i++; printf( "検索したい数を入力せよ>" ); scanf( "%d", &key ); for ( index_counter=1; index_counter <= data_number; index_counter++ ) if( key == data[index_counter] ){ printf( "同じ値が見つかりました.位置は %d です.\n", index_counter ); counter++; } if ( counter == 0 ) printf( "同じ数は存在しません.\n" ); }
int data[10] = {5*i}; 上は見たことないからここか? int data[10] = {0,5,2,1,3,4,,6,7,8,9}; /*←ここ*/
ほい #include <stdio.h> int main() { int key,i;/* 検索する数値 */ int data[10] = {0,5,2,1,3,4,6,7,8,9}; /*←ここ*/ int index_counter, /* ループカウンター */ data_number = 10, /* 配列内のデータ数 */ counter = 0; /* 同じ数があるかないかを判断する変数 */ i=0; printf( "検索したい数を入力せよ>" ); scanf( "%d", &key ); for ( index_counter=1; index_counter <= data_number; index_counter++ ) if( key == data[index_counter] ){ printf( "同じ値が見つかりました.位置は %d です.\n", index_counter ); counter++; } if ( counter == 0 ) printf( "同じ数は存在しません.\n" ); }
わざとミスを残しておくあたりが笑えるw
すいません非再帰のマージソートのプログラムってどうすればいいですか?
[1]授業単元:プログラミング演習 [2]問題文:二つの符号なし整数a,b(ただしa>bとし、bは2のべき乗とする。またaとbは8ビットで、演算の結果は16ビットとする。)をキーボードから読み込み、 @a,bを2進表示し、配列の中にビットを格納しなさい。 Aa,bの四則演算(上のを使って、相手に10進で入力させ、それを2進表示する) c=a+b d=a-b e=a*b f=a/b(商のみ) を計算し、その結果を出力しなさい。 [3]環境 [3.1]Windows XP [3.2]VisualC++,UNIX [3.3]C言語 [4]2007年7月14日まで。 [5]習ったのはfor文、if文、do文、while文、シフト演算子{(>>)(<<)}、ビット単位のAND演算子(&)、OR演算子(|)、排他的OR演算子(^)、1の補数(~)、符号なしありの表し方(unsignなど)です。お願いしますm(_ _)m
できるだけ初心者っぽくわかりやすく書いたつもり
コメントつけてみたからあとは自分でしてみ
#include <stdio.h>
int main(){
int i;
char a,b;
char hairetu_a[8],hairetu_b[8];
printf("入力a(0-255):");
rewind(stdin);/*[stdin]入力バッファをクリアする*/
scanf("%d",&a);/*変数aへキーボードから入力された文字を10進数で受け取る*/
printf("入力b(0-255):");/*↑256以上の数字だと変数a以降のデータ領域を破壊するが知らん*/
rewind(stdin);/*[stdin]←入力バッファ(キーボードを押した時のキー情報)をクリアする*/
scanf("%d",&b);
printf("a=");
for(i=0;i<8;i++){
hairetu_a[i] = ((a&0x80)
>>7 );/*配列[0-7]へ先頭ビットからほりこむ*/
printf("%d",hairetu_a[i]); /*↑0x11101010(変数a) & 0x10000000(プログラムでは16進表記0x80)*/
a=a<<1; /*↑ので取った先頭ビットを右へ7ビットシフトして変数へ*/
}/*↑次のビットを先頭へ移動させる*/
printf("\n");
printf("b=");
for(i=0;i<8;i++){
hairetu_b[i] = ((b&0x80)
>>7 );
printf("%d",hairetu_b[i]);
b=b<<1;
}
printf("\n");
return 0;
}
>>540 名誉のために言っておこう
素で間違えt(ry
549 :
みえ :2007/07/10(火) 17:15:24
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 次を元にして、足し算などの式を入力すると計算結果を表示するプログラムを作ることを考える。たとえば式1+2ENTERを入力すると結果の3が表示されるようにプログラムを作り直してください、エラー処理は無視してよい。 他の演算ができるようになっているとさらに高く評価する。 #include<stdio.h> #include<ctype.h> main(){ char c[10]; char *p; int i=0; printf("Enter a number:"); fgets(c,6,stdin); p=&c; while(isdigit(*p)){ i=i*10+(*p++)-48; } printf("You have entered: %d\n",i); } [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 7月10日 よろしくお願いします
550 :
デフォルトの名無しさん :2007/07/10(火) 17:32:23
ぽいっとな #include<stdio.h> #include<ctype.h> main(){ char c[10]; char enzansi; char *p; int i=0,j=0; printf("Enter a number:"); fgets(c,6,stdin); p=c; while(isdigit(*p)){ i=i*10+(*p++)-48; } enzansi = (char)(*p++); while(isdigit(*p)){ j=j*10+(*p++)-48; } switch(enzansi){ case '+':i=i+j; break; case '-':i=i-j; break; case '*':i=i*j; break; case '/':i=i/j; break; case '%':i=i%j; break; } printf("You have entered: %d\n",i); getch(); }
で、p=&c; と例題にはあるんだがコレだとc配列のアドレスのアドレス 見に行くことになってエラーが出る気がする 変数名がローマ字なのはわかりやすくするためなんだが 気分を害したらすまん
&c[0〜10]って書くか、p=c(cの先頭のアドレス)って書くならエラーは出ないだろうけど
554 :
デフォルトの名無しさん :2007/07/10(火) 19:13:35
fgets(c,6,stdin);がもったいない気がする
>>553 は 0〜9やな。訂正。まぁ、その説明すら要らんだろうけど・・・
[1] 授業単元:プログラミング [2] 問題文:TAX料金を算出するプログラムを作る。 乗客が申告した距離から料金を算出する。(初乗り3kmまで500円。300m毎に50円加算。) 申告距離は0<km<49まで。以外は賃走できない。50kmの場合は賃走をやめ、営業所に 帰り、日報を作成する。 稼ぎがない場合は稼ぎはないと記す。 《日報内容》 ア、走った総距離 イ、一日の売上 ウ、走った平均距離 エ、平均金額 オ、走ったなかでの最長距離 カ、走ったなかでの最短距離 [3] 環境 [3.1] OS: (Windows xp) [3.2] コンパイラ名とバージョン: (VS 2003) [3.3] 言語: Visual C++ [4] 期限: [2007年7月15日3:30まで] 自分で考えてみましたが、特にオ、カ、が手に負えないので宜しくお願いします。
>>556 とりあえず自分で考えたのUPしてみて。
>>556 最長と最短の変数を用意しておいて、申告と比較すればよいのではないの?
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):与えた文字列を逆順に並べる関数str_inve()をポインタを用いて実現せよ。 たとえば, char str[] = "This is a pen."; と初期化してから str_inve(str); と呼び出せば,配列 str は,その先頭から .nep a si sihT と格納される. ※印字するのではなくて,配列に「格納」されないといけない. [3] 環境 [3.1] OS: (Windows/Linux/等々) Linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 今週中 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 配列の添字やポインタのオフセット使用は不可 よろしくおねがいしますm(_ _)m
>>559 #include <stdio.h>
#include<string.h>
#define N 256
int main(void)
{
char str[N],strev[N];
int i=0,n;
printf("文字列を入力してください:");
fgets(str,N-1,stdin);
n=(int)strlen(str)-2;
while(n>=0)
strev[i++]=str[n--];
strev[i]='\0';
printf("%s\n",strev);
return 0;
}
間違った、関数にするのか。 #include <stdio.h> #include<string.h> #define N 256 char *str_inve(char *str) { static char strev[N]; int n,i=0; n=(int)strlen(str)-2; while(n>=0) strev[i++]=str[n--]; strev[i]='\0'; return strev; } int main(void) { char str[N]; printf("文字列を入力してください:"); fgets(str,N-1,stdin); printf("%s\n",str_inve(str)); return 0; }
>>556 こんな感じでどう?
変数の入れ替えの仕方はいろいろあるからググると楽しいかも
#include<stdio.h>
#include<string.h>
void str_inve(char*str){
int i,j;
char buf;
for(i=0,j=(strlen(str)-1);i<j;i++,j--){
buf = str[i];
str[i] = str[j];
str[j] = buf;
}
}
int main(void){
char str[]="This is a pen.";
str_inve(str);
printf("%s",str);
getch();
return 0;
}
>>561 fgets側で\0の分の確保はしてくれるからわざわざN-1を引数にとらなくてもいいんじゃないの?
Nで良いか、仕様の勘違い。
567 :
563 :2007/07/10(火) 22:34:58
間違えたついでに答えてみよう、ただしこのまま提出はするな #include<stdio.h> #define KOREIJOUHATARAKAN 48999 int otonanosekaino_keisan(int h_kyori){ h_kyori-=3000; if(h_kyori<0){ return 300; } return ((h_kyori/300)*50);/*端数切捨て?*/ } int main(void){ int i; int kyori=0,kane=0; int total=0,max=0,min=KOREIJOUHATARAKAN; for(i=0;i<KOREIJOUHATARAKAN;i++){ printf("距離入力/メートル(0で終了):"); rewind(stdin); scanf("%d",&kyori); if(kyori==0 ){i+=1;break; }else if(total>=KOREIJOUHATARAKAN){total=KOREIJOUHATARAKAN;i+=1; printf("おっとお客さん、今日は営業終了だ、ココで降りてもらうぜ");break; } total+=kyori; kane += otonanosekaino_keisan(kyori); if(kyori>max){max=kyori;}if(kyori<min){min=kyori;} } printf("日報内容\n"); printf("ア、走った総距離 %d\n",total); printf("イ、一日の売上 %d\n",kane); printf("ウ、走った平均距離 %d\n",total/i); printf("エ、平均金額 %d\n",kane/i); printf("オ、走ったなかでの最長距離%d\n",max); printf("カ、走ったなかでの最短距離%d\n",min);return 0; }
>>564 1番
#include <stdio.h>
#include<stdlib.h>
int main(void)
{
char *str;
int i=0;
str=(char *)malloc(sizeof(char)*50);
fgets(str,50,stdin);
while(str[i]!='\0')
putchar(str[i++]);
free(str);
return 0;
}
こういうのってポインタを使ったって言って良いのかな。
putchar(*(str+i++));みたいに分かりやすくポインタしてないとダメ…?
>>568 malloc関数とかはまだ習っていないんですが。
>>569 そこはどうでも良い所だから、普通にchar str[50]でいいや。
*(str+i++) ではなく *p++ がいい!
#include <stdio.h> #include<stdlib.h> #define SIZE 50 int main(void) { char *pstr,str[SIZE]; fgets(str,SIZE,stdin); pstr=str; while(*pstr != '\0') putchar(*pstr++); return 0; } 微妙に改変。
pstr=str; while(*pstr != '\0') putchar(*pstr++); は for() がいい!
やっぱポインタを使えって
>>572 風に書けってことなのかな?
576 :
デフォルトの名無しさん :2007/07/10(火) 23:14:45
559
>>562 のやり方をscanfで文字列を入力できるようにしてみたのですが
this is a pen.のようにスペースを挟むと、sihtしか表示されません
どうしたらよいのでしょうか
#include<stdio.h>
#include<string.h>
void str_inve(char*str){
int i,j;
char buf;
for(i=0,j=(strlen(str)-1);i<j;i++,j--){
buf = str[i];
str[i] = str[j];
str[j] = buf;
}
}
int main(void){
char str[128];
scanf("%s",str);
str_inve(str);
printf("%s",str);
return 0;
}
後、getch();を加えると
undefined reference to '_getch'
collect2: ld returnde 1 exit status
というエラーがでてコンパイルがとおらなかったのでgetch();を外してみました
もしかしたらこれが原因なんでしょうか(´・ω・`)
578 :
562 :2007/07/10(火) 23:20:04
getch()は警告出るがコンソールの表示残すためにつかってた 消しても問題なし、むしろ消しといて
>>576 scanf("%[^\n]\n", str);
とか
scanf("%127[^\n]\n", str);
580 :
562 :2007/07/10(火) 23:22:36
577さんのヒント追加バージョン #include<stdio.h> #include<string.h> void str_inve(char*str){ int i,j; char buf; for(i=0,j=(strlen(str)-1);i<j;i++,j--){ buf = str[i]; str[i] = str[j]; str[j] = buf; } } int main(void){ char str[128]; fgets(str,128,stdin); str_inve(str); printf("%s",str); return 0; }
582 :
デフォルトの名無しさん :2007/07/11(水) 00:17:21
584 :
デフォルトの名無しさん :2007/07/11(水) 00:29:24
[1] 授業単元:計算機実習 [2] 問題文:0度から360度までのsin,cos,tanの値を任意の刻み幅で出力するプログラムを作成せよ。 ただし、刻み幅は10度などの整数刻みとする。 (T)結果が見やすいように角度(単位は度)、ラジアン値、sin,cos,tanの順番で横並びに出力すること (U)90度、270度の場合、tanの値は無限大となる。 数値計算上無限大演算は回避すべきであるからこの場合はtan値を計算せずに、 角度、ラジアン値、sin,cos,tanの順番で横並びに出力すること (V)刻み幅をscanf関数を使って与えることでsin,cos,tanの値を出力できるプログラムを作成すること。 [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 7/14 [5] その他の制限: とくにございません。ぜひよろしくお願いします…。
>>582 #include <stdio.h>
int main(int argc, char **argv)
{
char queue[3];
int c, n, qhead = 0, qtail = 0;
while ((c = getchar()) != EOF) {
queue[qtail] = c;
qtail = (qtail + 1) % 3;
if (qhead != qtail)
continue;
if (queue[(qhead + 1) % 3] == 0) {
c = queue[qhead];
n = queue[(qhead + 2) % 3];
while (n--) putchar(c);
qhead = qtail = 0;
} else {
putchar(queue[qhead]);
qhead = (qhead + 1) % 3;
}
}
while (qhead != qtail) {
putchar(queue[qhead]);
qhead = (qhead + 1) % 3;
}
return 0;
}
588 :
デフォルトの名無しさん :2007/07/11(水) 01:27:42
>>582 のものです。
>>585 さんありがとうございました。おかげさまでできました。本当にありがとうございます
[1] 授業単元: プログラミング [2] 問題文: @標準入力から入力される文字列(英小文字のみ)をchar型の配列に格納し、各アルファベットの数を表示するプログラムを作れ。 ただし、0個のアルファベットについては表示させないものとする。 例:this is very nice book(入力後EOF) b=1 c=1 e=2 h=1 (後略) ヒント:要素が26個の配列を用意し、それぞれのアルファベットをカウントする。 文字コードを利用すれば、"a"-"a"=0であり、"b"-"a"=1である。 A数字によって構成される文字列をchar型配列へ読み込み、それをint型のデータに変換する関数toatoi()を作れ。 ただし、文字列中に数字以外の文字がある場合は戻り値を-1として返すように設定せよ。 さらに、toatoi()を利用して標準入力から与える文字列を数値とし、printfの%dを用いて表示するプログラムを作成せよ。 B最大10文字50行の文字列を読み込み、縦に変換して出力するプログラムを作成せよ。 例: 0001(改行)1100(改行)2222 と入力 102(改行)009(改行)012(改行)012 と出力 配列の項目なので、配列を使用した解法を伝授お願いします [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:どちらでも可 [4] 期限:7/11の午後2時まで [5] その他の制限:無し
590 :
デフォルトの名無しさん :2007/07/11(水) 02:18:03
[1]授業単元:基本プログラミング [2]問題文 キーボードから入力した実数データの平均、分散、標準偏差、各データの偏差値を求めよ。なおデータ入力はEOF入力で終了するようにすること 参考として平均=1/nΣ(全データの合計)、分散=1/(n-1)Σ(全データの合計-平均)2乗、標準偏差=√分散、各データの偏差値=50+(全データの合計-平均)*10/標準偏差である <実行例>[]のなかが入力する実数 input data->[45] input data->[60] input data->[50] input data->[64] input data->[39] input data->[82] input data->(EOF入力) mean=56.6667 variance=239.867 standard deviation=15.4876 deviation scores 1:42.4671 2:52.1523 3:45.6955 4:54.735 5:38.593 6:66.3571 [3]環境 [3.1]OS:windows xp [3.2]コンパイラ名とバージョン:gcc [3.3]言語:C++ (Cはよくわかりません) [4]7月11日18時 [5]その他制限:特にありません よろしくおねがいします。
>>584 #include <stdio.h>
#include <math.h>
int main(void){
double pi=acos(-1.0),input;
printf("角度を入力->");
scanf("%lf",&input);
getchar();
printf("%f° %fπr %f %f",input,input/180,sin(pi*input/180),cos(pi*input/180));
if(int(input)!=90 && int(input)!=270)printf(" %f",tan(pi*input/180));
getchar();
return 0;
}
蚊にたたき起こされたから暇つぶしに。
[1] 授業単元: プログラム実習 [2] 問題文(含コード&リンク): 次の微分方程式を数値計算を用いて解け オイラー法を使用すること。 ・3*d^2x/dt^2+dx/dt+2x=4 ・x(t=0)=0 ・dx/dt(t=0)=0 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Borland bcc32 [3.3] 言語: C [4] 期限: 今日の九時 [5] その他の制限: なし
おいらっ、そんなの習ったことないから分からないっぺ
595 :
デフォルトの名無しさん :2007/07/11(水) 08:44:06
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 2つのテキストファイル名を入力してファイルの内容が同じならば 「same」と出力し同じでないなら「not same」と出力する [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限:あさって [5] その他の制限:標準ライブラリは使ってはいけない
また標準ライブラリ禁止かwww
>>595 >[5] その他の制限:標準ライブラリは使ってはいけない
なんと!
fopen()などのファイル処理系も、printf()さえも使ってはならぬと仰るか。
598 :
デフォルトの名無しさん :2007/07/11(水) 09:16:44
printf()はどうやって作られているのか教えてください stdio.hなしで画面に出す方法教えてください
>>599 大丈夫、stdio.hをインクルードしなくてもprintf(), puts(), putchar()は使える。
601 :
デフォルトの名無しさん :2007/07/11(水) 09:35:28
どうやったらprintfが自作できるのか教えてください
stdio.hいらないよ #include<conio.h> int main(void){for(int i=0;i<16;cprintf("\r\n"),i++)for(int j=0;j<16;textcolor(i*16+j),cprintf("■"),j++);return 0;}
stdio.hをincludeしないとprintfなんかをリンクしない実装も規格上は許されてるんだっけ。
>>592 current_x, current_y, depth:
探索を一歩進めるごとに変化していき、再帰呼び出しから戻ってきた時
には復元されて欲しい値。再帰探索関数の引数としてスタックに
保持することで、その両者が自然に実現できる。
min_depth:
探索を進めたり戻ったりする毎に変化する値ではなく、単調に変化して
いく値なので、再帰関数のスタックではない場所に保持しておく必要が
ある。ポインタを用いて引数渡しすることも可能だが、ここでは
簡便のためグローバル変数となっている。
state
探索の対象。実は値の変化に関してはcurrent_x, current_y, depthに
似た特性を持っているが、Cでは配列の値渡しが出来ないので、スタッ
クを利用してバックトラックを自動的に実現することは出来ない。
ここでは簡便のためグローバル変数となっている。
goal_x, goal_y
ゴールの判別は座標ではなくマップの値によってなされており、使われ
ていない。
リンカとコンパイラは本来別物だから、 リンクを禁止するなんてのは無理では? それにヘッダが無くても未知の関数は勝手にintを返す関数とみなして 警告出すだけでコンパイルは実行するでしょ。
そういうことを言い出したら、んじゃ日ごろ取り込んでいるヘッダって何なの?ってなるぞ。 よそでやれ。
C89ならそうだな
単にdefineと関数プロトタイプ宣言の集合体だよ。 別に無かったら無かったでコンパイラは勝手に解釈する。 その解釈が正しいという保証はないからincludeするだけの事。
>>606 ・C99やC++では必須
・FILE*などの型やマクロ等の定義を取り込む上で必要
・戻り値の型がintでない関数では必要(自分で宣言しても良いが)
・いずれにせよ型チェックを有効にし、暗黙の型変換を利用できるようにするために、
C89であっても取り込んだほうが良い
>>605 >リンカとコンパイラは本来別物だから、
>リンクを禁止するなんてのは無理では?
古典的なコンパイラならもちろんそうだが、そうなっている保証はないんじゃないかってことだ。
コンパイラがリンカに指示を出す方法なんていくらでも考えられる。
>それにヘッダが無くても未知の関数は勝手にintを返す関数とみなして
これはその通り。
C89ではプロトタイプの省略時の仕様を定めているわけだから、 コンパイラやリンカの実装がどうなっていようが関係ないのではないかな。 プロトタイプの省略されたソースをエラーにするようなC89コンパイラは 規格準拠とは言えないのではないだろうか。
>>25 学生の俺からみても、なんで
i=i*10+(*p++)-48
みたいにわかりにくい書き方で出題しているんだろうね。
実力を見るためにわざと隠しているとしか思えない。
48は文字コードの計算で表すでしょ普通?
「標準ライブラリ禁止」と言ってるのに
>>599 みたいなことを言うまぬけが居るから話がこじれる。
標準ライブラリ禁止というからにはprintf()のような標準ライブラリ関数を
使ってはならないわけで、stdio.hをインクルードするかどうかは関係ない。
Cの言語仕様には入出力機能はないんだぞ。 標準ライブラリ関数使わないでどうやって入出力するんだ。
#include <unistd.h> して、read()とwrite()を使うだけだろう。
DOS/Winの場合は?
まぁ、標準的じゃないものを使えば良いんでない?w
621 :
デフォルトの名無しさん :2007/07/11(水) 10:59:45
conio.h
Windowsの場合はGetStdHandle(), ReadFile(), WriteFile()でおk DOSの場合はINT21使うなり汁
しっかし、標準ライブラリを使えば面倒にならないのに、なんで変な制限をするのか分からん。 どんな学校だ?独自で何かシステムを開発しているのか?
標準ライブラリが分かってない奴が
>>1 のテンプレ通りに書いてるとか。
>>613 ていうか式の読み方が主題だろ
テストなんだから。
>>623 こういう選択肢もあるって事をわからせるためじゃないの?
結果は同じでもプログラムソースは何通りもあるんだから、所詮宿題。
>>623 組込みでしょ
-nostdlibが必須な環境なら仕方あるめぇよ
>>624 なるほど。っつか、このスレとしては、標準ライブラリを使用するのが最低限ということで
受け付ける方針に変えた方が良いかも・・・俺の勝手な意見だが。
まあ ・例えばstrstr()モドキを作れという問題で、strstr()を使って欲しくない ・自分の習っていない関数は使って欲しくない のどっちかだろね
頻出のプロCだけは意図的にシステムコール使えって問題多いけどな あれ、単にUnixのシステムコール呼ばせるだけで、問題そのものは 超つまらない・下らない悪問が多いんだよなあ
631 :
デフォルトの名無しさん :2007/07/11(水) 12:25:51
フラッシュ暗算のプログラムを作りたいのですが、よく分かりません。 アドバイスいただけたら嬉しいです。
632 :
デフォルトの名無しさん :2007/07/11(水) 12:28:26
授業単元: 環境 OS:Windows コンパイラ名とバージョン:ボーランド 言語:C テーマ:ポインタの利用 問題1:ポインタを利用して、2つの値の合計を求めなさい int a = 10, b = 5,g; int *pa,*pb; 実行画面 g:15
633 :
デフォルトの名無しさん :2007/07/11(水) 12:37:38
授業単元:C言語 環境:if文・for文・while文・do〜while文・switch〜case文・ OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:ポインタの利用 問題1:ポインタ変数を利用して、文字型の配列変数mojiの値を実行画面のように表示させなさい char moji[] = "ABCD"; char *mp; 実行画面 A B C D 問題2:文字列を入力し、文字列中の数字のみを別配列に格納し表示しなさい 実行画面 文字列入力==>AB1CDE23FG4 数字文字列:1234 以上の2問どなたかお願いします
>>632 #include <stdio.h>
int main(int argc, char **argv){
int a = 10, b = 5,g;
int *pa,*pb;
pa = &a;
pb = &b;
g=((*pa)+(*pb));
printf("g:%d",g);
return 0;
}
>>632 include <stdio.h>
int main(void)
{
int a = 10, b = 5,g;
int *pa,*pb;
pa=&a;pb=&b;
g=*pa+*pb;
printf("g:%d",g);
return 0;
}
>>633 #include <stdio.h>
int main(void) {
char moji[] = "ABCD";
char *mp;
mp=moji;
while( *mp ) {
printf("%c\n",*mp);
mp++;
}
return 0;
}
>>586 さん、やってもらったのはありがたいのですが、fgetsとかexitなどならってないので…すみません。
>>633 #include <stdio.h>
int main(void) {
char buf[256],num[256];
int b=0,n=0;
printf("文字列入力==>");
fgets(buf,sizeof(buf)/sizeof(buf[0]),stdin);
while( buf[b]!='\n' && buf[b]!=EOF ) {
if( buf[b]>='0' && buf[b]<='9' ) num[n++]=buf[b];
b++;
}
num[n]='\0';
printf("数字文字列:%s",num);
return 0;
}
>>633 //問題1
#include<stdio.h>
int main(void){
char moji[]="ABCD";
char *mp;
for(mp=moji;*mp;mp++)
printf("%c\n",*mp);
return -53;
}
//問題2
#include<stdio.h>
int main(void){
char moji[99],suuji[99];
char *mp,*sp;
printf("文字列入力==>");
scanf("%s",moji);
for(mp=moji,sp=suuji;*mp;mp++)
if(*mp>='0'&&*mp<='9')
*sp=*mp,sp++;
*sp='\0';
printf("数字文字列:%s\n",suuji);
return 2975418;
}
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): 科目と点数を入力し、ハッシュ法を使って記憶する。 あとで、科目を入力して成績を出力させる。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:できるだけ早くお願いします [5] その他の制限:なるべく簡単な構造で構成してもらいたいです
643 :
デフォルトの名無しさん :2007/07/11(水) 13:56:32
>>642 多分生徒名や生徒番号なんかもいるのだろ?
ハッシュ関数の指定はないのか?
ハッシュはないけどチ○シュなら・・・
>>641 int qeq( float a, float b, float c, float *x1, float *x2 )
{
/* さー考えよう! */
if(a==0)
return -1;
else if(b*b-4*a*c<0)
return 0;
else if(b*b-4*a*c==0){
*x1=-b/(2*a);
return 1;
}else{
*x1=(-b+sqrt(b*b-4*a*c))/(2*a);
*x2=(-b-sqrt(b*b-4*a*c))/(2*a);
return 2;
}
}
647 :
デフォルトの名無しさん :2007/07/11(水) 14:07:50
int ten[10],kamoku; 科目番号を入力してください kamoku 点数を入力してください ten[ kamoku ] 出力する科目番号を入力してください kamoku 点数はten[ kamoku ]です
650 :
デフォルトの名無しさん :2007/07/11(水) 14:30:57
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):キーボードから順次入力された正の整数を、0が入力されるまで、 配列に順番に格納し、次に、ある1つの正の整数を与えると、 それが何番目に入力された整数であるかを表示する プログラムを作成してください よろしくお願いします [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 7月11日
651 :
デフォルトの名無しさん :2007/07/11(水) 14:49:02
課目と点数位でハッシュ関数使うかな?
>>650 #include<stdio.h>
int main(vold){
int hairetsu[99],i,n=9326;
for(i=0;i<sizeof(hairetsu)/sizeof(hairetsu[0])&&n!=0;i++){
do printf("%d:正数を、入れろ!!",i),scanf("%d",&n);while(n<0);
hairetsu[i]=n;
}
do printf("最後に、もう一度、正数を、入れろ!!"),scanf("%d",&n);while(n<=0);
for(i-=2;i>=0;i--)if(hairetsu[i]==n)printf("%d\n",i);
}
【質問テンプレ】 [1] 授業単元: C言語 [2] 問題文(含コード&リンク): //次のプログラムは式を入力すると計算結果を表示する。現在の内容を理解し、誤りを訂正してコメントをつけよ//どうしたらうまく動くか// #include<stdio.h> #include<stdib.h> #include<ctype.h> char *p; char c[100]; int expression(void); //式 int term(void); //項 int number(void)//数値データ main(){ int ans; while(1){printf("Enter expression ; "); fgets(c,90,stdin); p=&c; if(*p=='/n'); break; ans=expression(); printf("Answer;%d/n" , ans);} int expression()int ans; ans = term(); while(){if(*p == '+'){ ans = ans + term(); } else if(*p == '-'){ ans = ans - term(); } else break;} return(ans); }int term(){ int ans,x; ans = number(); while(1){ if(*p == '*'){ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年7月12日まで [5]特になし タイピングミスあったらすいません
654 :
デフォルトの名無しさん :2007/07/11(水) 15:20:49
>>652 さん、助かりました〜ありがとうございます!!m(_ _)m
656 :
デフォルトの名無しさん :2007/07/11(水) 15:55:41
>>642 課目数だけ課目と点数の配列を用意する。
課目番号に対して格納場所を一意になる関数を用意する。
こんな感じか?
658 :
デフォルトの名無しさん :2007/07/11(水) 16:14:44
[1] 授業単元:C言語演習 [2] 問題文(含コード&リンク): 123・・・9の間に+かーをいくつかいれて、計算結果が100になるものを すべて求めるプログラムを作成してください。 例えば1+23ー4+56+7+8+9はその解の1つです。 最初の1の前にーをつけることを許した場合と許さない場合について求めてください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:7月11日 [5] その他の制限:なるべく簡単な構造で構成してもらいたいです よろしくおねがいしますm(_ _)m
>>658 先頭に負号をゆるさない場合、すべての組み合わせは3^8=6561通り。
ゆるす場合、すべての組み合わせは3^8*2=13112通り。
たったこれだけだから垂れ流しプログラムでもなんとかなるんじゃないかな???
>>658 先頭に負号をゆるす場合だけやってみた
残りは自分で頑張れ
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i, s, sign[10];
long n, x;
for (i=1; i<=9; i++) sign[i] = -1;
do {
x = n = 0; s = 1;
for (i=1; i<=9; i++)
if (sign[i] == 0) n = 10*n+i;
else {
x += s*n; s = sign[i]; n = i;
}
x += s*n;
if (x == 100) {
for (i=1; i<=9; i++) {
if (sign[i] == 1) printf(" + ");
else if (sign[i] == -1) printf(" - ");
printf("%d", i);
}
printf(" = 100\n");
}
i = 9; s = sign[i]+1;
while (s > 1) {
sign[i] = -1; i--; s = sign[i]+1;
}
sign[i] = s;
} while (sign[1] < 1); return 0;
}
今ある整数Nまでの素数を表示するプログラムを作っているのですが、ifの条件のなかに (一度でもあまり=0)になったときに表示するということをやりたいのですが、 一度でも〜になったらを表すコマンドを教えてください。
もう少しくやしく
>>661 if (あまり == 0)
{
//一度でもあまりの処理
}
import java.io.*; class lf1sosu { public static void main(String[] args) throws IOException { int n, amari; String strn; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("整数を入力してください。"); strn = br.readLine(); n = Integer.parseInt(strn); System.out.println( "素数 = " + 2); for(int i=2; i<=n; i++ ){ for(int g=2; g<=i-1; g++ ){ amari = i % g; if (amari != 0 ){ g=i-1; System.out.println( "素数 = " + i); }else{g=i-1; } } } } まで自分で作ったのですが2で割ったときにあまりが0以外になってしまうため全部の奇数が素数として表示されてしまいます。 またgの範囲から2が素数とすることができません。 改善点を教えてください。
[1] 授業単元: 暗号理論 [2] 以下のシフト暗号によって暗号化された文章を解読せよ(問題文はただの文字列なので省略) ※abc...などの文字列をbcd...のようにx文字ずらした結果を ずらすxを0〜25の場合について同時に表示させ、 実際に文を見て意味の通じる文を抽出する方法でやれとのこと 例) 元の文 abc 処理結果 abc bcd cde def ... zab となるのが理想なのですが、自力で頑張ってやってみたものの 26通りのxについて処理した結果を並べるのがうまくできません 元の文字列はデータで与えられていて、文字列の長さは問題ごとに違っていて 最後の問題は数十文字に及びます [3] 環境 [3.1] OS: Windows [3.2] コンパイラ: Cygwin(gcc 3.4) [3.3] 言語: C [4] 期限: [2007年7月13日10:30まで] [5] その他の制限:とくになし よろしくおねがいします
667 :
665 :2007/07/11(水) 17:24:20
あ、あと自力でやった分も貼り付けるべきでしょうか?
はい。
横からすまんのう #include <stdio.h> #include <ctype.h> int main(void) { char buff[BUFSIZ]; unsigned char *p; int i; while (fgets(buff, sizeof buff, stdin)) { for (i = 0; i < 26; i++) { printf("x=%2d: ", i); for (p = (unsigned char *)buff; *p; ++p) if (islower(*p)) putchar((*p - 'a' + i) % 26 + 'a'); else if (isupper(*p)) putchar((*p - 'A' + i) % 26 + 'A'); else putchar(*p); } } return 0; }
どこがC言語じゃ
初心者なんですいません。 JAVAとC言語は違うものなんですか? 違うならほかの板行ってきます。
そりゃ、まぁどう考えてもC言語とJavaは別物だ罠・・・板っつーかJavaスレへな。
orz
じゃましてすいません。 Javaスレ逝ってきます。
679 :
665 :2007/07/11(水) 17:55:13
>>671 ありがとうございます!
自分で作ったのと全然違う・・・
680 :
デフォルトの名無しさん :2007/07/11(水) 17:58:28
There's more than one way to do it.
681 :
665 :2007/07/11(水) 18:03:20
なるほど… あと文句をつけるわけではないのですが、これは元の文章はキーボードで打つしかないのでしょうか? 文字列の書かれたテキストファイルの類を読み込んだり、 それかコピペすることってできないんでしょうか…
>>681 テキストファイルを読み込ませたければリダイレクト汁
意味・やりかたがわからなければぐぐれ
コピペも出来るが、端末がコピペに対応していなければならない
Windowsのコンソールプロンプトでも出来るが、簡易編集モードか
何かにしていなければならないのだったかな
683 :
682 :2007/07/11(水) 18:07:59
×コンソールプロンプト ○コマンドプロンプト 正式な名称は知らんが……昔からDOS窓とか言われているアレだ
わかりました。頑張ってみます
671さんのコード参考にfgetsにfopenで開いたFILE*渡せばいいんじゃないのか コード書いたが質問者ががんばるようなので主要なところだけ抜粋
[1] 授業単元: データ解析 [2] 英文中のアルファベットの数を数えるプログラムを作成せよ 例:This is a pen. だったら、 t:1 h:1 i:2 s:2 a:1 p:1 e:1 n:1 となるようにする。大文字、小文字は区別してもしなくても良い、とのこと [3] 環境 [3.1] OS: Linax [3.2] コンパイラ: よくわかりません…学校のPCに標準で入ってたやつ [3.3] 言語: C [4] 期限: [2007年7月23日まで] [5] その他の制限:とくになし よろしくおねがいします
とりあえずLin「u」x、な
>>686 #include <stdio.h>
#include <ctype.h>
int main(void) {
char alph[]={"abcdefghijklmnopqrstuvwxyz"};
int num[sizeof(alph)/sizeof(alph[0])]={0},ch,i;
while( (ch=getchar())!=EOF ) {
ch=tolower(ch);
for(i=0; i<sizeof(alph)/sizeof(alph[0]); i++) {
if( alph[i]==ch ) num[i]++;
}
}
for(i=0; i<sizeof(alph)/sizeof(alph[0]); i++) {
if(num[i]>0) printf("%c:%d ",alph[i],num[i]);
}
return 0;
}
>>686 その順番に出力しないといけないの?
順番がどうでもよいなら簡単だが
文字コードを知った初心者っぽいプログラム #include <stdio.h> int main(void) { int i; char buff[256]; char cnt[27]; for(i=0;i<27;i++){cnt[i]=0;} fgets(buff,256, stdin); for(i=0;i<256;i++){ if(buff[i] == '\n'){break;} buff[i] = buff[i]-0x41; if(buff[i]>=0 && buff[i]<27){ cnt[buff[i]] += 1; }else if(buff[i]>=32 && buff[i]<(32+27)){ cnt[buff[i]-32] += 1; } } for(i=0;i<26;i++){printf("%c:%d ",(i+0x41),cnt[i]);} return 0; }
>686 文字登場順 #include <stdio.h> #include <ctype.h> int main(void) { char alpha[26], str[256], *p; int i, max = 0, count[26] = {0}; fgets(str, sizeof str, stdin); p = str; while(*p) { if(isalpha(*p)) { for(i=0; i<max; i++) { if(alpha[i]==tolower(*p)) { count[i]++; break; } } if(i==max) { alpha[i] = tolower(*p); count[i]++; max++; } } p++; } for(i=0; i<max; i++) printf("%c:%d\n", alpha[i], count[i]); return 0; }
693 :
デフォルトの名無しさん :2007/07/11(水) 19:03:39
[1] 授業単元:プログラミング [2] 問題文:@再帰呼び出し −フィボナッチ数を求める関数を、再帰呼び出しを用いて作成せよ −F1〜F10を表示させる A・整数の配列をパラメタとして,配列の中で最大と最小の数を求める関数を定義せよ。 ・この関数をmainとは異なるファイル(minmax.cpp)で定義して作成せよ。 ・この関数のプロトタイプ宣言は独立したヘッダ(minmax.h)ファイルとして定義せよ。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005 [3.3] 言語:C++ [4] 期限:明日の朝まで [5]@ヒント int fib (int n) { int r if (n <= 2) r = ? else r = ???? /* r=Fn=Fn-1+Fn-2 */ return r; } Aヒント void MinMax(int array[], int n, int *minPtr, int *maxPtr) { ・・・ここを書き加える } int main() { int data[10] = {4,2,5,9,2,1,4,5,4,5}; int min, max; ・・・ここを書き加える printf("min = %d, max = %d\n", min, max); return 0; }
694 :
デフォルトの名無しさん :2007/07/11(水) 19:09:03
[1] 授業単元: アルゴリズム論
[2] ゼータ関数は次式で定義される(wikipediaゼータ関数にリンクさせます)
ttp://ja.wikipedia.org/wiki/%E3%82%BC%E3%83%BC%E3%82%BF%E9%96%A2%E6%95%B0 s=6のとき、π^6/945に収束する。これを確認するプログラムを作成せよ。ただし、プログラム演算では無限大を扱うことができないため、
級数の和の無限個をとるのではなく、有限の範囲内(例えばn=100など)で計算する必要がある。
条件1)一度の計算で種々のnに対する収束精度を比較・検討したいため、二重ループを使うことにする。そのため、
外側ループでは初期値をmとして、nまでm刻みで値を変更し、内側ループでは該当する値に応じたゼータ関数値を算定できるようにプログラムせよ。
(例えばn=1000とm=100に設定した場合、nの値を10パターン変化させることができる。)
条件2)必ず倍精度で計算し、5パターン以上は比較できるようにすること
[3] 環境
[3.1] OS: Linax
[3.2] コンパイラ: gcc
[3.3] 言語: C
[4] 期限: [2007年7月18日まで]
[5] その他の制限:とくにありません。
考えてもわかりませんでした、どうか皆様よろしくお願いします (ノ_・、)
>>693 1 フィボナッチ
#include <stdio.h>
int fibo(int x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}
int main(void) {
int i;
for(i=1; i<=10; i++)
printf("%d ",fibo(i));
return 0;
}
696 :
671 :2007/07/11(水) 19:19:01
頑張って見ましたが、どうもうまくできませんでした… できればご教示願います…
697 :
665 :2007/07/11(水) 19:19:32
ぎゃー名前欄間違えました
>697 文字から'a'を引いた数にずらしたい数を足して、その数を26で割った余りを'a'に足す
699 :
デフォルトの名無しさん :2007/07/11(水) 19:22:01
[1] 授業単元: プログラミング技術 [2] 問題文(含コード&リンク):ニュートン法 出力が 値入力⇒○ 解の値は ○ 収束するのに ○ 回かかりました [3] 環境 [3.1] OS:WindowsVISTA [3.2] コンパイラ名とバージョン:コンパイラが動かないですorz [3.3] 言語:C言語 [4] 期限:考える時間であっというまに・・・7/13(金)17:00です。 [5] その他の制限: #include<math.h>とdouble、fabsは必ず使うようです。 よろしくお願いします。
あ、そこは解決したんですが ファイル読み込みのあたりがどうも fopenとかfgetsの使い方がどうも間違ってるみたいです
>>693 もう投げやり
minmax.h の中身 ↓
#include <iostream>
using namespace std;
void max_min(int *x, int n) {
int max=*x,min=*x,i;
for(i=1; i<n; i++) {
if(x[i]>max) max=x[i];
else if(x[i]<min) min=x[i];
}
cout << "max : " << max << endl;
cout << "min : " << min << endl;
}
- - - - - - ここまで - - - - - - - - -
minmax.cpp の中身↓
#include "minmax.h"
int main() {
int a[]={5,10,100,0,4,2,3,8,1},i;
for(i=0; i<sizeof(a)/sizeof(a[0]); i++)
cout << a[i] << " ";
cout <<endl;
max_min(a,sizeof(a)/sizeof(a[0]));
return 0;
}
>>693 フィボナッチをC++風に
#include <iostream>
using namespace std;
int fibo(int x) {
if(x<=2) return 1;
else return fibo(x-1) + fibo(x-2);
}
int main(void) {
int i;
for(i=1; i<=10; i++)
cout << fibo(i) << " ";
return 0;
}
>>694 #include <stdio.h>
#include <math.h>
double npow(int base, int n)
{
int i;
double result = 1.0;
for (i = 0; i < n; i++)
result *= base;
return result;
}
double zeta(int s, int n)
{
double val = 0.0;
int i;
for (i = 1; i <= n; i++)
val += 1.0/npow(i, s);
return val;
}
int main(void)
{
int i;
double val = 0.0, prev = -1.0;
printf("pi^6 / 945 = %.20g\n", pow(M_PI, 6.0)/945);
for (i = 100; i <= 600; i += 50)
printf("第%3d項までの和 = %.20g\n", i, zeta(6, i));
return 0;
}
704 :
694 :2007/07/11(水) 20:28:06
>703さん こんなにもはやく! ありがとうございます!!
705 :
699 :2007/07/11(水) 21:15:36
計算式が複雑過ぎてわからない(´;ω;)
[1] 授業単元: ネットワークセキュリティ [2] 問題文(含コード&リンク): 以下のプログラムを実行したとき、(^-^)が実行されるように(つまり、bufの内容を書き換えるように) バッファオーバーフローのテクニックを使ったnikoniko関数を定義しなさい。 ・main関数は一切書き換えてはいけません。 ・nikonikoの中に出力文があってはいけません。 ・nikonikoからはmainに実行を戻さないといけません。 ・nikoniko以外の関数を定義してはいけません。 プログラム #include<stdio.h> main(){ char buf[]="abcde\n"; nikoniko(); puts(buf); } [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:bcc32 Version 5.1.2600 [3.3] 言語:C言語 [4] 期限:今夜0時なのです;; [5] その他の制限: わからんちんなのですが、友人は4行ほどのnikoniko関数を作成するだけで出来た、ということでした。 strcpyを使ってのオーバーフローを引き起こして、bufの戻り番地を変えるやり方だと思うのですが。。。 申し訳ありませんが、緊急のため時間の許す方のご教授願います。
void nikoniko(){ char niko[] = "(^-^)"; char* p = niko; int i = 5; while(true){ if( niko[i] == 'a' && niko[i+1] == 'b' && niko[i+2] == 'c' && niko[i+3] == 'd' && niko[i+4] == 'e' ) { p += i; break; } if( niko[-i] == 'a' && niko[-i+1] == 'b' && niko[-i+2] == 'c' && niko[-i+3] == 'd' && niko[-i+4] == 'e' ) { p -= i; break; } ++i; } sprintf(p,"%s",niko); printf("i=%d\n",i); }
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): コンビニの売り上げ伝票ファイルを集計し、20歳代、30歳代それぞれの売り上げ総額を求める処理 のプログラムを作る。売り上げ伝票ファイルは以下のような形式で記録されるものとする。1行に1品目の売り上げ記録があり、第 1項目が商品コード、第2項目が単価、第3項目が数量、第4項目が客の性別、第5項目が客の年齢層。年齢層の値は19歳以下 なら1、20〜29歳なら2、30〜39歳なら3、40〜49歳なら4、50歳以上なら5である。性別は0が男、1が女を表す。商品コードが0の または負のとき、それ以後のデータがないことを表すものとする。また、データが不正のときも記録はないものとする。 [3] 環境 [3.1] OS:Windows Visual stdio 2003 [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:7月12日朝6時まで [5] その他の制限:switch文を必ずいれて下さい。 よろしくおねがいしますm(_ _)m
709 :
デフォルトの名無しさん :2007/07/11(水) 22:13:11
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 次のプログラムは式を入力すると計算結果を表示する。現在の内容を理解し、誤りを訂正してコメントをつけよ//どうしたらうまく動くか #include<stdio.h> #include<stdib.h> #include<ctype.h> char *p; char c[100]; int expression(void); int term(void); int number(void); main(){ int ans;
while(1){ printf("Enter expression ; "); fgets(c,90,stdin); p=&c; if(*p=='\n'); break; ans=expression(); printf("Answer;%d\n" , ans);} int expression()int ans; ans = term(); while(1){if(*p == '+'){ ans = ans + term(); } else if(*p == '-'){ ans = ans - term(); } else break;} return(ans); }int term(){ int ans,x; ans = number(); while(1){ if(*p == '*'){ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年7月12日まで [5]特になし
712 :
デフォルトの名無しさん :2007/07/11(水) 22:43:29
[1] コンピュータ・サイエンス [2] C++でUDPのechoサーバを作れ [3] 環境 [3.1] Windows [3.2] VisualC++系 [3.3] C++ [4]無期限 [5]wsock32.lib UDPで おねがいします。
>>711 main()はぐちゃぐちゃ、
if (*p == '\n');
とか意味不明なことをやっている上に最後に } が足りない
expression()は最初の { が足りない
term()は途中で切れている
一体何がしたいのかね
714 :
デフォルトの名無しさん :2007/07/11(水) 22:46:18
[1] 授業単元: プログラミング演習 [2] 問題文:整変数i,j,kをキーボードより与え、下記の演算を実行するプログラムを作成せよ。 x=(i^2)/4 + (j^3)/27, y=x /(1+k^2), z=y^(1/3)klogk (logは自然対数) ・出力の一行目(コメントを出力する場合はそれ以降)に変数i,j,kを出力し、二行目にx,y,zを出力すること。 ・kあるいはyの値が0以下の場合はzを求める計算ができない。その場合、 z=|y|^(1/3)|k|log|k|(| |は絶対値)を計算するように条件わけすること。 また、k=0の場合は、z=0として条件わけすること。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 13日 [5] その他の制限: どうぞよろしくお願いします;
>>715 それは勿論分かっているよ。
誤り訂正しろって問題にしては、やりすぎかと思ったのよ。
コンパイルが通るがバグがある、というレベルではないのだもの。
関数term()は途中で切れている。関数number()は実装さえされていない。
それらを足したところで誤りだらけでコンパイルも通らない。
>>710 >>711 はもしかして、四則計算をするプログラムを作りたいのでは?
誤りを訂正してコメントをつけよって書いてあるし。
間違っているところを書き直して、足りないのを足せばいいのでは?
単に電卓を作れという問題なら
>>48 でよいのだけれどね
再帰下降で四則演算が出来ればよいようだから、ほぼ同じだ。
多分
>>48 が参考になると思うよ。
719 :
デフォルトの名無しさん :2007/07/11(水) 23:01:41
>>582 の者ですが、同じプログラムに関してもうひとつ課題がありました。すみませんが、わからなかったのでお願いします。
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
(問題)
文字数を書き出すときに目印として使っている文字番号 0 の文字が,万一もとのファイルの中で使われていると不具合が起きる。どんな不具合が生じるのか,考えてみよ。そうした不具合を避けるには,関数 fcompress をどのように改変すればよいかを考えてみよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4586.c [3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: borland
[3.3] 言語: C
[4] 期限: 7/12
[1] 授業単元: アルゴリズム [2] 問題文(含コード&リンク): 各ノードに子孫数(自身は含まない)を持つ二分探索木において、 子孫数を用いて、n番に小さい値を検索し値を関数を作成せよ。 [3] 環境 [3.1] OS: (Windows/Linux/等々) windows [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C [4] 期限:7/27 [5] その他の制限: 関数の仕様(引数は自由、n番目の値を戻り値として返す)、再帰を用いること。 ノードには整数値が入っているとする。 よろしくお願いします
>>718 48見ました。でも、わからなかったので書き込みしたので
すいませんが教えてください。
マルチの上にしつこいよ
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): キーボードからカンマで区切られた16進数を3つ読み込み,10進数で表示するプログラムを作成しなさい. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 12日10時まで [5] その他の制限: 特にナシ 実行例 [***@***/]% ./read 0xff,0xab,0x12 255,171,18 [***@***/]% ./read よろしくお願いします^^
>>724 #include <stdio.h>
int main(void)
{
int num[3];
scanf("%x,%x,%x", &num[0], &num[1], &num[2]);
printf("%d,%d,%d", num[0], num[1], num[2]);
return 0;
}
ここはBorland C++ Builderで作る課題でもおkですか? 講義なしでいきなり作ってこいと言われても使い方が全く分からん・・・・
>>728 OK。使い方はググればそれなりに見つかるんじゃね?
[1] 授業単元: 計算機 [2] 問題文(含コード&リンク): 差分方程式 Xn+1=aXn(1-Xn)の解をX50まで計算し、作図するプログラムを書きなさい。 ただし初期値X0は0<X0<1とし、 パラメータaの値は 0<=a<1、1<=a<=2、 2<a<=3、 3<a<=1+√6、1+√6<a の場合に分け色々選択出来るようにすること。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:c++ [4] 期限:7/26 [5] その他の制限:Borland C++ Builderで作成すること。 初めてなのでさっぱり分かりません。使うのもこれっきりだと思います。 よろしくおねがいします。 なんかボタンとか色々置きまくってみたが色変えたり線書いたりする程度しか出来ないw
731 :
デフォルトの名無しさん :2007/07/12(木) 01:53:36
同じ問題が繰り返し出てきますが、質問される方は別人なんでしょうか。 回答される方は同じ問題に何度も答えたいとは思わないかもしれません。
>>731 同じスレに同じ問題とかもたまにあるしね。
学校の課題とかならかぶるなんて当たり前だろうし。
安価で対応とかでいいんじゃないかな?
前の回答探すのすらだるいけど。
同じ問題に答えてもいいし、何回催促されようと無視してもいい
>>730 GUIはスレじゃやりづらそうだな。
線が引けるのなら、まずは固定値で作図してみては?
その後、固定していた値を入力できるように拡張すればいいだけだし。
735 :
デフォルトの名無しさん :2007/07/12(木) 02:04:35
737 :
735 :2007/07/12(木) 02:24:08
何度も同じ問題とか書き込みして欲しくないね。 でも、書き込みするってことはわかってないのか? わかってないならもう一度書き込みした方がいいのかな?
大学の課題で大量に学生がわかってないんだろ
教える先生に問題があるかもね
>>710 です。
お願いです・本当にわかりません。教えてください
-―- . ´ ` 、 ' , i l ! ヽ ヽ 〈\ .〃/‐リノ ノリ)ヘヽ.\` ,' ヽ \ /,ィ'"|` f'!ヽト、!` / ̄ ̄ ̄ ̄ ̄ l//, ゙{0))! ヒ1! ,l.!,. l、ヽ .| ' /l/` リl、"´ lフ イゝ < 出遅れたっ! '´ l/_i_リ,! r._´ リ | '「 , ‐ゝ>r'l〉く.、 \_____ く,`l ,.`Kト〉ヾヽ ゝL ヾ.l、〉 r' ,-| 「 {} !_ | ! l、 `)}´} `>/`,-´、 ァ' く./ {_`」./ l} // 「i. k ,.' / >! l} j / r'j i1 ^!,' k1 k'
>>737 汚いソースだなー
漏れが書いたんだけどねOTL
Node *AppendNoNodeを追加しても挙動がおかしくなるから、
もう少し仕様をkwsk
>>604 遅くなりましたが、ありがとうございました!
>>708 エスパー
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fp;
int sum[2][5] = {0}, price, quantity, sex, age, i;
char code[1024], buf[1024];
if(argc < 2) fprintf(stderr, "usage : %s string\n", argv[0]), exit(1);
if((fp = fopen(argv[1], "r")) == NULL) perror(argv[1]), exit(2);
while(fgets(buf, sizeof(buf), fp) != NULL)
if(sscanf(buf, "%s%d%d%d%d", code, &price, &quantity, &sex, &age) == 5)
if(!strcmp(code, "0") || atoi(code) < 0)
break;
else if((age >= 1 && age <= 5) && (sex == 0 || sex == 1))
sum[sex][age - 1] += price*quantity;
fclose(fp);
printf("20歳代 : %d\n30歳代 : %d\n", sum[0][1] + sum[1][1], sum[0][2] + sum[1][2]);
return 0;
}
747 :
746 :2007/07/12(木) 08:28:34
switch文だと……
[1] 授業単元: 暗号理論演習 [2] 問題文:任意の英文について、換字暗号表を用いて暗号化するプログラムと、 暗号化した文を同様の表を用いて解読するプログラムを作成せよ。 入力する文章と換字暗号表の形式は自由にしてよいものとする。(別に用意したテキストファイルから読み込む形のほうが好ましい) 例 abcd… という英文があったとき、換字暗号表がa→t b→y c→e d→k…だったなら、 tyek…と出力されるプログラム、またその逆操作するプログラム という意味です。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 2007年07月20日12:00まで [5] その他の制限: とくになし なにをすればいいのやらまるでわかりません。もしお暇でしたら力を貸してください。
749 :
735 :2007/07/12(木) 12:37:18
>>743 この前はありがとうございました
今は学生情報リストが名前だけのソートしかないので
学生情報を登録するときに名前でソートするか学籍番号でソートするかを選択できるようにしたいんです
で、学籍番号のソートができないので教えてほしいです。
>>748 ショボイですが
暗号
#include <stdio.h>
#include <ctype.h>
static char alpha[53] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
static char table[53] = "zNFeYMljvJXKicfrGyDEOwQpHkCLbxhqRAPsnouVTaWIZdUmBStg";
int getindex(char *str, int ch){
int i;
for(i = 0; i < 52 && str[i] != ch; i++) ;
return i;
}
int main(int argc, char *argv[]){
FILE *fpin, *fpout;
int ch, op;
if(argc < 3 || (fpin = fopen(argv[1], "r")) == NULL || (fpout = fopen(argv[2], "w")) == NULL) exit(1);
while((ch = fgetc(fpin)) != EOF)
if(isalpha(ch)) fputc(table[getindex(alpha, ch)], fpout);
else fputc(ch, fpout);
fclose(fpin), fclose(fpout);
return 0;
}
解読
if(isalpha(ch)) fputc(table[getindex(alpha, ch)], fpout); を
if(isalpha(ch)) fputc(alpha[getindex(table, ch)], fpout); に変更。
751 :
プロセス :2007/07/12(木) 13:04:55
いま、授業でプロセスを学んでいます。 プロセスを学んでいく中で、有名な「食事をする哲学者」の問題が出されたのですが、そこにpipeを使わなければいけないんです↓ まず問題はこうです。 ・pipeを用いて「食事をする哲学者」を具現 ・哲学者の状態変化(eating,hungry,thinking)はrandom numberを利用 ・ある哲学者がフォークを得るためには左右哲学者にrequest messageを送る ・フォークの状態変化は使用可否に依存、ただし、ある哲学者から他哲学者にフォークが転送されるときにはきれいになること(clean)を仮定 ・使われたフォークは汚くなる ・他の哲学者からフォークの要求が到着すると次のような法則 ・きれいなフォークを持ったときは渡さない ・もう使ったフォークを持ったときは渡す ・フォークが転送中にはフォークが向く哲学者に優先権がある ・フォーク及びrequest messageの転送は必ずpipeを利用 ・哲学者をあらわす5個のプロセスとは別に状態変化を観察することができるモニタープロセスを置き、状態が変わるとレポティングする。このときにもpipeを利用 ・注意、deadlockが発生しないようにする という問題なんですが・・・C言語でどう書けばいいのでしょう(泣) 助けてくださぃ!
752 :
sage :2007/07/12(木) 13:29:05
[1]単元:プログラミング技術 [2]問題文:アップローダーのNo.4597にアップしておきました。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ: gcc [3.3] 言語: C [4] 期限:来週の水曜までにお願いします。 よろしくお願いします
>>751 pipeって普通は親子の間でしか使えないのではなかったかな。
というわけで、多分名前つきパイプを使うんだろう。mkfifoでぐぐれ。
mkfifoで作った名前つきパイプは普通のファイルと同様に読み書きできるが
普通は全二重ではないはずなので、双方向から送受信するために、2本の
パイプが必要になる。
てなわけで、それぞれの哲学者と哲学者の間に、送信用と受信用に2本ずつ、
計10個の名前つきパイプをつくる。それぞれの哲学者は、左隣との
送受信用に2本、右隣との送受信用に2本、合計4本のパイプを開く。
当然これらを同時に扱うためにはselect()やpoll()などを使う必要がある。
これまで言っていることが何一つ理解出来ないなら、諦めるんだね。
こんなところでこれ以上詳しく教えるのは不可能だ。
[1] 授業単元: プログラミング1 [2] 問題文: 一様乱数の発生#include<stdio.h>int a;double x;a=rand();x = (double) a/32768.0;xは、区間[0,1)の一様乱数である。 関数rand()は、呼び出すごとに異なった値(0−32767)を返すN=500である。 1/N(?下がi=1で上がN)ηi*ηi-μ*μの式を500回回すfor分を入れなさいと言われました。 [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン: VC6.0 [3.3] 言語: C [4] 期限: 2007年07月13日14時まで [5] その他の制限: for分くらいの知識しかないので初歩的なプログラムでお願いします。
>>752 流れはこんな感じか
ただし出題の条件は満たしていないからそこは己で考えるように
#include<stdio.h>
#include<math.h>
double v1[3],v2[3];
double angle(){return acos((v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2])/sqrt(v1[0]*v1[0]+v1[1]*v1[1]+v1[2]*v1[2])/sqrt(v2[0]*v2[0]+v2[1]*v2[1]+v2[2]*v2[2]))/M_PI*180.0;}
main(){while(1)printf("v11 v12 v13="),scanf("%lf %lf %lf",&v1[0],&v1[1],&v1[2]),printf("v21 v22 v23="),scanf("%lf %lf %lf",&v2[0],&v2[1],&v2[2]),printf("angle=%lf\n",angle());}
756 :
デフォルトの名無しさん :2007/07/12(木) 14:59:41
授業単元:C言語 環境:if文・for文・while文・do〜while文・switch〜case文・ OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:ポインタの利用 問題1:配列変数に値を入力し、それらの平均を求め平均より低い要素の値を表示しなさい int array[10]、 goukei; int *pa; double heikie; pa = array; 実行画面 整数入力[0]==>60 整数入力[1]==>43 整数入力[2]==>85 整数入力[3]==>72 整数入力[4]==>34 整数入力[5]==>56 整数入力[6]==>17 整数入力[7]==>100 整数入力[8]==>96 整数入力[9]==>28 平均:59.1 [1]:43 [4]:34 [5]:56 [6]:17 [9]:28 件数:5
>>756 #include<stdio.h>
#define N 10
int main(void)
{
int array[N],i,n=0;
int *pa;
double heikie=0;
pa=array;
for(i=0;i<N;i++){
printf("整数入力[%d]==>",i);scanf("%d",&pa[i]);
heikie+=pa[i];
}
printf("平均:%.1f\n",heikie/=N);
for(i=0;i<N;i++)
if(pa[i]<heikie){
printf("[%d]:%d\n",i,pa[i]);
n++;
}
printf("件数:%d\n",n);
return 0;
}
>>756 #include <stdio.h>
int main(void) {
int a[10], goukei ,i ,cnt , *pa;
int a_sz=sizeof(a)/sizeof(a[0]);
double heiki;
for(i=0,goukei=0,pa = a; i<a_sz;i++,pa++) {
printf("整数入力[%d]==>",i);
scanf("%d",pa);
goukei+=*pa;
}
heiki=(double)goukei/a_sz;
printf("平均:%.1lf\n",heiki);
for(i=0,pa = a,cnt=0; i<a_sz;i++,pa++) {
if((double)(*pa)<heiki) {
printf("[%d]:%d\n",i,*pa);
cnt++;
}
}
printf("件数:%d\n",cnt);
return 0;
}
>>758 ひどく意味無く読みづらい書き方が多いな。
>>759 =
>>757 おめーの方が酷く題意を無視してんぞ、市ねよ、昨日っからいちゃもんばっかりつけて
大ボケかましている間抜け
762 :
759 :2007/07/12(木) 15:35:16
>>757 の方が明らかに読みづらいし酷い。
>>759 お前がソースを理解できないだけだろ。コンパイルしてみろ、アホ。
> double heikie=0;
heiki"e"(プ
> scanf("%d",&pa[i]);
だったら&array[i]使っちゃえば良いだろ
> printf("平均:%.1f\n",heikie/=N);
え、何これ?heikie/=って、普通に/Nにしときゃ良いじゃん。無駄、読みづらい
> printf("[%d]:%d\n",i,pa[i]);
だから array[i] 使えって。ポインタの意味ないからw
759 名前:デフォルトの名無しさん 投稿日:2007/07/12(木) 15:31:15
>>758 ひどく意味無く読みづらい書き方が多いな。
heikieは出題に従ったまでじゃないのか?w
>>763 757だけど、heikieってのは
>>756 がそう書いてたからそのまま書いただけだよ。
printf("平均:%.1f\n",heikie/=N);
これは単に2chで書き込むとき行が多いと読んでる人にとってウザくなるから
行を少なくするためだけにやっただけだから、そんな気にしないで下さい。
あと突っ込んでる所は、
問題に>テーマ:ポインタの利用ってあるからポインタを使った方の出力を見たいのかと推測して書いただけ。
ていうかなんでこんな切れられてるんだ…。
別に自分は他の考え方を批判したりしないから、
もっと良い書き方あると思ったら
>>763 が書いてくれれば良いよ。
その方が質問者のためになるし。
>>763 >え、何これ?heikie/=って、普通に/Nにしときゃ良いじゃん。無駄、読みづらい
読みやすいとはいえないが、この場合はイコール入れとかないとだめでしょ?
>>756 > テーマ:ポインタの利用
>>757 pa=array; < pa[i] じゃこれの意味ないからw
ったく、夏休み前に、今年の4月からC言語を始めたポインタも知らん初心者が答えるから
>>759 みたいな奴が湧いて出てくるんだよな。お前が解釈できないソースはすべて
酷く意味無く読みづらいんか。あぁそうですか、お前に理解力がないだけだろ。経験不足の初心者め。
>>768 あれあれ?初心者風情が何勘違いして間違ったイコールしてんの?w
なんか変なの沸いてるな。 一行批判に対して何を延々と粘着してるんだか…。
いつもの人だから気にしたら負け。 とりあえず >> double heikie=0; >heiki"e"(プ 問題文が読めてない >> printf("平均:%.1f\n",heikie/=N); >え、何これ?heikie/=って、普通に/Nにしときゃ良いじゃん。無駄、読みづらい ここで/だとこの後heikieと各要素との比較ができなくなるからダメ
「よく見かけるscanfは思わぬ誤作動の原因となる可能性がある。 このscanfの問題を考えられる限り調べて記述せよ。」 という宿題ですが、これってscanf("%d",…); これに対して変な値を入力した時のことで良いんですか? たとえば'a'とかをキーボードから入力するような。
>>774 お前必死すぎwwwwもろにお前が釣られていることに気づけよ
ポインタも知らなかった初心者が添え字を使うことしか頭に無かったんでしょうね。
>>775 そういう対処は個別にすりゃ良い。ただ、対処するために他にstdio.h以外に
定義されているライブラリを用いると便利なんだが、それでもおkなら
fgetsで取り込んで、isdigitで数字のみが入力されているとか、最後にatoiで
int型の変数に代入するといった流れになるが。
ひっでぇ自演
>>777 対処法じゃなくて問題点を挙げるんじゃないの?
>777 はじめの一行だけ文体丁寧にしても、その後が変わってなきゃ意味ないぞw
1] 授業単元:c言語 [2] 問題文: キーボードから m, h, n を入力し、m の時は Good morning h の時は Hello n の時は Good night、と表示する。 またそれ以外の文字が入力された時は retry を表示するプログラムを switch文を用いて作成せよ。 [3] 環境 [3.1] OS:XP [3.2]コンパイラ:vs05 [3.3] 言語:C [4] 期限:07年7月12日24時 よろしくお願いします
>>782 #include<stdio.h>
int main(void){
char s[51];
while(1){
printf("コマンド?",s);
scanf("%s",&s);
if(s[1])continue;
switch(s[0]){
case 'm':printf("Good morning\n");break;
case 'h':printf("Hello\n");break;
case 'n':printf("Good night\n");break;
default:printf("retry\n");break;
}
}
//return 0;
}
>>775 scanf()は、書式指定に従って読み取れるところまでを読み取り、残りは
ストリームバッファに残す。
実際にどの程度を読み取れたかは、戻り値や%n指定子を使えば判別できる。
%s指定子などは、幅を指定しない限りバッファオーバーフローを
引き起こす危険性があることに注意(gets()と同じ)。
%sや%dなどは先頭の空白を読み飛ばすが、読み飛ばされる空白には
改行文字も含まれることにも注意。逆に、%cなどは空白を
読み飛ばさないことにも注意。
以上のような点を理解して、適切な使い方をしている限りは何も問題は無い。
scanf()の問題のほとんどは、正しい使い方をしないことに起因する。
>>784 そりゃ正常ルートを通る入力なら正常だよ
>>785 期待された入力でなかったことは、scanf()の戻り値で確認できる。
状態を回復するには例えばその行を読み飛ばせばよい。
>>787 それは、「scanf()の問題」ではなく、使い方が悪いだけだと言っているのだが。
gets()の欠点は使い方ではカバーのしようがない。scanf()はそうではない。
scanf()の問題は、「初心者にとって挙動や仕様が理解しにくい」こと
だろう。
#include<stdio.h> int main(void) { int c; while ((c = getchar()) != EOF) putchar(c); return 0; } getchar()の戻り値をチェックしなければ無限ループになるが、 誰もgetchar()が悪いとは言わない。 scanf()の戻り値をチェックしないことは同じぐらい愚かな行為だが、 そういうコードが横行し、皆がscanf()を悪く言うのは不思議なものだ。
>>757 pa=array; scanf("%d",&pa[i]); if(pa[i]<heikie){ < (プッ
自演厨消えたと思ったらまだ居たのか。
792 :
デフォルトの名無しさん :2007/07/12(木) 17:43:27
[1] 授業単元:実プロ
[2] 問題文(含コード&リンク):
catコマンドと必要ならegrepコマンドとwcコマンドをパイプでつないで起動することで、
テキストファイルの行数・単語数・バイト数を数えるプログラムを書け。
複数のファイルが指定されたときは、合計のみを表示するようにすること。 ただし、以下のオプションをとることができるようにせよ。
-e 空行を、数える対象から除外する。
-E 空白文字以外の文字を含まない行を、数える対象から除外する。
(「空白文字」とは、Cの標準ライブラリ isspace() で真となる文字のことである。空白だけではないので注意)
-s #で始まる行を、数える対象から除外する。
-S #を含む行を、数える対象から除外する。
↓catコマンドとwcコマンドをパイプでつないで使って、ファイルの行数・単語数・バイト数を数える
プログラム。 複数のファイルが指定されたときは、合計のみを表示する。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4601.txt [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:明日まで
[5] その他の制限:ないです
どうかよろしくお願いします。
>>792 今度はCプロでなく実プロという講座名になったんだね
[1] 授業単元: C言語 [2] 問題文:任意の文字列をAAコードを抜き出しint型の変数に代入 例 DAISUKEならば2文字目のAをint n1へ 3文字目のIをint n2へ [3] 環境 [3.1] OS: ウインドウズ [3.2] コンパイラ名とバージョン: VC6.0 [3.3] 言語: C [4] 期限: 2007年07月13日9:00まで [5] その他の制限: とくになし よろしくお願いします。
797 :
デフォルトの名無しさん :2007/07/12(木) 18:09:07
[1] 授業単元: 情報演習 [2] 問題文:フィボナッチ数列 a0=0,a1=1,a(i+1)=ai+a(i-1) (i=1,2,3…) を計算するプログラムを作成せよ。なお、計算例はi+1=20まで示すこと。 仕様1)得られた値が奇数であるならば、数値の右に*をつけ、奇数かつ3の倍数ならば 数値の右に**をつけて出力すること。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 17日 [5] その他の制限: おねがいいたしますぅ(>_<)
#include <stdio.h> int main(void) { int a[20], i; a[0] = 0; a[1] = 1; for(i=2; i<20; i++) a[i] = a[i-1] + a[i-2]; for(i=0; i<20; i++) { printf("%d", a[i]); if(a[i]%2) { putchar('*'); if(a[i]%3==0) putchar('*'); } putchar('\n'); } return 0; }
>>795 しかし恥ずかしげも無くよく言うな。
>int array[10]、 goukei;
>int *pa;
>double heikie;
>pa = array;
文盲は放っておけ
801 :
デフォルトの名無しさん :2007/07/12(木) 18:44:29
803 :
802 :2007/07/12(木) 18:56:15
うげ。SetConsoleCtrlHandler()用の1行ルーチン書いたけど何もしてねぇ。 手を抜きすぎた。 まぁいいか。
804 :
デフォルトの名無しさん :2007/07/12(木) 18:58:01
うぷろだが関西2ちゃんねら になっているのはなぜ??
805 :
◆KrpcpKelXU :2007/07/12(木) 18:58:15
[1] 授業単元: C [2] 問題文(含コード&リンク): 改行文字やタブのような文字を目で見えるエスケープ文字\nや\tに変換しながら、 sをtにコピーするような関数escape(s,t)を書け。switchを使うこと。 >(例) >The C programming language. と入力すれば、 >The\t\tC\tprogramming language.\n と印字される。 > [3] 環境 [3.1] OS: (Windows [3.2] コンパイラ名とバージョン: (gcc [3.3] 言語: C [4] 期限: 15日23:59まで
>801 if (is_legal_move(board, player, *p, *q)) return;の後に for(i=1; i<B; i++) for(j=1; j<B; j++) if(is_legal_move(board, player, i, j)) printf("%c%c ", 'a'+i-1, '0'+j);を入れる。 iとjの範囲はboardがどうなってるか分らないから適当なんで、違ってたら自分で直しといて。
807 :
デフォルトの名無しさん :2007/07/12(木) 19:08:15
[1] 授業単元: C [2] 問題文(含コード&リンク): 文字列が回文かどうかを判断するプログラムを作成せよ。 実行例 文字列を入力してください。 kazukikuzak kazukikuzakは回文です 文字列を入力してください。 kazukidesu kazukidesuは回文ではありません。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日の朝まで [5] その他の制限: 明解C言語って本使ってて ポインタってとこまでならったとか 友人がベソかきながら聞いてきました 力になってやりたいんですが俺の頭じゃ何もできません といてやってくださいお願いしまーす
>>802 様、お願いです、あまり手を抜きすぎないでください。(T_T)
>805 単なる空白も\tにすんの?
810 :
802 :2007/07/12(木) 19:14:49
>>808 まあふいんきは分かっただろうから後は自分でがんがれ。
面倒なら
volatile int signaled;
BOOL WINAPI handler(DWORD)
{
signaled = 1;
}
これをとっぱらっちまえ。
で、下のほうの
while (!signaled && (nread = recvfrom...
は、
while ((nread = recvfrom...
に変える。
>805 void escape(char *s, char *t) { while(*s) { switch(*s) { case '\t': *t++ = '\\'; *t++ = 't'; break; case '\n': *t++ = '\\'; *t++ = 'n'; break; default : *t++ = *s; break; } s++; } *t = '\0'; }
>>807 #include <stdio.h>
#include <string.h>
int kaibun(const char *s, size_t len)
{
if (len <= 1) return 1;
if (s[0] != s[len-1]) return 0;
return kaibun(s+1, len-2);
}
int main(void)
{
char buff[BUFSIZ], *p;
while (fgets(buff, sizeof buff, stdin)) {
if (p = strchr(buff, '\n')) *p = '\0';
printf("回文で%s\n",
kaibun(buff, strlen(buff)) ? "す" : "はありません");
}
return 0;
}
>>807 このスレの前の方にあった処理を参考に。
#include<stdio.h>
#include<string.h>
#define N 256
int main(void){
char str1[N],str2[N];
int i=0,n=0;
printf(">>");
scanf("%s",str1);
n=(int)strlen(str1)-1;
while(n>=0)
str2[i++]=str1[n--];
str2[i]='\0';
if(strcmp(str1,str2)==0)
printf("回文です。\n");
else printf("回文ではありません。\n");
return 0;
}
でも回文についてググったら、
「前から読んでも後ろから読んでも順番が変わらず、
なおかつ、言語としてある程度意味が通る文字列〜」
って、言語として意味が通るかどうかはどうすれば…。
814 :
デフォルトの名無しさん :2007/07/12(木) 19:28:35
>>813 >>807 っす。どうもです。
いやー複雑っすね。素人なもんで複雑怪奇です
文字列を入力してください。っていうのはprintf("回文です。\n"); の上にいれればいいんですかね?
問題は友人が「とにかく回文なんだよお」と泣きながら言ってたもんで…
815 :
802 :2007/07/12(木) 19:29:44
あーすまん、あと sendto(sd, buff, sizeof buff は sendto(sd, buff, nread に汁。 ちと拘束衣着て反省房に入ってくる。
>>814 文字列の入力を促してるのは、上から7行目の
printf(">>");って所だから、そこをprintf("文字列を入力してください>>");
みたいに書き換えてくれればOK。
ただ回文判定っていうより、入力文字が逆にしても元の文字と一緒かを
判定しているという。まぁこれで十分だとは思うんだけど。
逆順の文字列を作ってからstrcmpって無駄が多いな。
819 :
デフォルトの名無しさん :2007/07/12(木) 19:42:27
[1] 授業単元:C言語 [2] 問題文: 自分で問題を選べる3択クイズをつくる。 例 番号を入力してください。 3 第三問 ・・・・・・・・・・・ 1、・・・・ 2、・・・・ 3、・・・・ 結果 正解。 [3] 環境 [3.1] OS: Solaris8 [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 7月17日まで [5] その他の制限:if文、switch文,for文,while文,do-while文をそれぞれ一回は使用する。 初心者なのでできるだけわかりやすくおねがいします。 基盤だけおねがいします。printf文は自分でやります。
821 :
デフォルトの名無しさん :2007/07/12(木) 19:48:43
駄目だな char c[N]だったら m=N/2 for(i=0;i<=m;i++)if(c[i]=c[N-i])break; if(i==m)kaibun else tigau
>821 君、面白いね
何が駄目なんだ?
>m=N/2 文字列のサイズがNになるとは限らない >for(i=0;i<=m;i++)if(c[i]=c[N-i])break; !が足りない以外にもダメなところがある
826 :
デフォルトの名無しさん :2007/07/12(木) 19:57:51
駄目だな char c[N]だったら m=N/2 for(i=0;i<=m;i++) if(c[i]!=c[N-i]){tigau;return;} kaibun; が正解
まだダメだな
for(i=0;i<=m;i++)if(c[i]=c[N-i])break; は for(i=0;(i<=m)&&(c[i]==c[n-i]);i++); ってやると、breakがいらなくなるよ
829 :
デフォルトの名無しさん :2007/07/12(木) 20:02:29
駄目だな char c[]だったら for(N=0;c[N]=='\0';N++);m=N/2 for(i=0;i<=m;i++)if(c[i]!=c[N-i]){tigau;return;} kaibun;
ここまでくるとギャグにしかなってねえな
>828 そんな小手先のテクより、明らかな間違いに突っ込んでやれよw
833 :
デフォルトの名無しさん :2007/07/12(木) 20:08:34
c[N]!='\0' だろ?
ループが最後まで回ったばあい、i>mっていう判定にしないとだめだよ
835 :
デフォルトの名無しさん :2007/07/12(木) 20:12:21
829ではループが最後まで回らなかった場合、リターンするのでいらん
>>714 #include<stdio.h>
#include<math.h>
int main(void)
{
int i,j,k;
double x,y,z;
printf("i:");scanf("%d",&i);
printf("j:");scanf("%d",&j);
printf("k:");scanf("%d",&k);
x = pow(i, 2)/4 + pow(j, 3)/27;
y = x/(1.0 + pow(k, 2.0));
if(k < 0 || y < 0)
z = pow(fabs(y), 1.0/3)*fabs(k)*log(fabs(k));
else if(k==0)
z = 0;
else
z = pow(y,1.0/3)*k*log(k);
printf("i=%d , j=%d , k=%d\n",i,j,k);
printf("x=%f , y=%f , z=%f",x,y,z);
return 0;
}
いや、関数を作らない場合
821=823=826=829=833=835 書き込む前に実行すればムダなレスと恥をさらさないですむよ 最後までc[N-i]に気づかなかったね
844 :
デフォルトの名無しさん :2007/07/12(木) 21:07:27
>>817 どうもです!明日ガッコで試すって友達がいってたんで、またなんかあったらよろしくおねがいします
847 :
デフォルトの名無しさん :2007/07/12(木) 21:58:13
すいません、 #include <stdio.h> #include <math.h> int main(void){ double pi=acos(-1.0),input; printf("角度を入力->"); scanf("%lf",&input); getchar(); printf("%f° %fπr %f %f",input,input/180,sin(pi*input/180),cos(pi*input/180)); if(int(input)!=90 && int(input)!=270)printf(" %f",tan(pi*input/180)); getchar(); return 0; } このプログラムを実行したら k7_1.c: In function ‘main’: k7_1c:12: error: parse error before ‘int’ のようなエラーがでてしまうのですが、どこが悪いのかわかりません; ご教授お願いできませんでしょうか [3.1] OS: mac [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C
>>847 > このプログラムを実行したら
このソースをコンパイルしたら
の間違いだろう。
結論から言うと、拡張子をcppなどにしてC++コンパイラでコンパイルするか
int(ほにゃらら)
を(int)ほにゃらら
に書き換えるんだな。
>>710 の人と同じ大学みたいで、俺も前の見たんですがわかりません。
先生はわざとおかしく問題文を作っていると言っていました。
迷惑だとはわかっていますが教えてください。
足し算、引き算、割り算、掛け算が出来ればいいみたいです。でも、
書き加えたところにはコメントも必要みたいです。
すいませんがよろしくお願いします。
先生は2chを見ているのかもしれんのう
[1] 授業単元:C言語 [2] int a[4]={1, 1, 0, 0}; int b[4]={0, 1, 0, 0}; これを2進数の1100と0100とし 2進数の掛け算、割り算をするプログラムを製作せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 2005 Express Edition [3.3] 言語: C言語 [4] 期限: 2007年07月14日まで [5] その他の制限:特になし 誰か助け舟を・・・
>>710 >>711 には続きがあるような気がするのですが
関数int number(void)の本体が見当たらない。
もしかして自分で作れと言う事ですか?
>>850 見ていても構いません。バカにされるのはわかっていますが、本当に切実
なんです。もう少しでこの授業も終わります。でも、最後まで出来ないけ
れどやらなきゃいけないんです。お願いです。助けてください。
多分君に再帰下降構文解析と言っても何のことだか分からないだろうから、 ここでは説明しようながいんだよ。 すまないが諦めてくれ。
855 :
854 :2007/07/12(木) 22:34:41
> 説明しようながいんだよ 意味わかんねぇ どうやら俺が首を吊ってくる番だったようだ
>>854 お願いです。そこを何とかお願いします。プログラムだけでもいいです。
俺が理解出来ないようなないようならきちんと勉強します。
だからお願いします。もう、ここしかお願いするところがないんです。
赤点とって退学して氏ね。
[1] 授業単元: プログラミング技術 [2] 問題文(含コード&リンク): ニュートン法 収束回数と解の値を出力する。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2007年07月13日08:00まで [5] よろしくお願いします。
全点対間最短路問題の解法で行列の積を用いる方法があると思うのですが その積の計算方法がわかりません。 L1=W L2=W*W ・・・ となっているのですが、どうも普通に計算したのでないようで・・。 これはやはり一回の積は min(Iij,Iik+Wkj)を一回ずつ行っていくしかないのでしょうか? 環境はC++、XPSP2期限は13日までです。 ん〜・・。min()を全部の値で繰り返して行うと・・。これはとんでもなく大変なことになるとおもうのですが・・。
>>860 >>857 は怪我した人の傷に塩を擦り付けて、苦しむ姿をニヤニヤ楽しむタイプだよ
いるよね、そんな香具師
ところでしつこい人に教える?
どうぞ。
お願いします。(T_T)(i.i)
869 :
868 :2007/07/12(木) 23:50:29
追記 環境がWindows+VC6.0なんで Linuxで不都合があったら自己解決よろ
>>868 ありがとうございます。
早速試してみます
>>861 の質問は無視してください。
自己解決しました。
874 :
371 :2007/07/13(金) 01:31:45
>>374 mainがわからなくて再提出になってしまった。。。
明日再提出期限
誰か助けてください。。。。
>>874 適当なもんでテストするのつくりゃいいんでねぇの?
int main(void){
char a[100] = "TEST";
char b[100] = "";
printf("a[%s]b[%s]",a,b);
strcpy(a,b);
printf("a[%s]b[%s]",a,b);
strcat(a,b);
printf("a[%s]b[%s]",a,b);
return 0;
}
コンパイルすらしてないけど。
876 :
371 :2007/07/13(金) 01:57:39
>>875 【LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
Debug/sub1.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー】
ってエラーが出てできないです。。。
878 :
371 :2007/07/13(金) 02:03:57
>>875 自己解決しました。。。
ありがとうございました
>>876 コンパイルしてみたけど、通ったよ。
プロジェクトの始め方とかでまちがってね?
VCマスターじゃないんで細かい指摘はできね。
win32 Console Applicationで作ったのかい?
880 :
371 :2007/07/13(金) 02:23:03
>>879 最近windowsプログラムの課題ばかりだったから
win32 Applicationでやってました。
win32 Console Applicationでやったら通りました。
夜遅くありがとうございました。
[1] 授業単元: C言語 探索 [2] 問題文(含コード&リンク):整数型の配列a[10]を定義し、初期値を代入(1,3,4,5,6,8,10,11,13,14)。 キーボードから数値を入力し、入力した数値が配列a[10]に存在するか2分探索で検索を行う。 ◎存在した場合 配列何番目の要素で見つかったのかprintf関数でディスプレイに表示。 ◎存在しない場合 探索エラーとディスプレイに表示。 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:lsic [3.3] 言語:C言語 [4] 期限:来週の水曜日まで [5] その他の制限:main関数のみ 1] 授業単元: C言語 整列 [2] 問題文(含コード&リンク):キーボードからランダムな数字を10回入力し、配列a[10]に格納する。 配列a[10]を昇順に整列する。整列されたa[10]をprintf関数でディスプレイに表示。 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:lsic [3.3] 言語:C言語 [4] 期限:来週の水曜日まで [5] その他の制限:main関数のみ。整列の方法は、基本選択法、基本交換法、バブルソート、右シフト、基本挿入法のうちどれでもOK。 以上2つです。宜しくお願いします。
今どうしようもなくなってる人いるか? ちょっと時間があるから簡単なものならやれるぞ
>>851 値を変える場合はansとかa_ten,b_tenあたりをintからdoubleにして
%dを%lfにしてね
割り算で不具合が出る
値変えなくてもdoubleの方がいいかもだけど
#include <stdio.h>
#include <math.h>
int main(void){
int i;
int a[4] = {1, 1, 0, 0};
int b[4] = {0, 1, 0, 0};
int ans2, ans1;
int a_ten=0, b_ten=0;
for(i=0; i<4; i++){
a_ten += a[i] * pow(2, 3-i);
b_ten += b[i] * pow(2, 3-i);
}
ans1 = a_ten*b_ten;
printf("a * b = %d\n", ans1);
ans2 = a_ten/b_ten;
printf("a / b = %d\n", ans2);
return 0;
}
>>883 ありがとう
出来れば割り算をdo文とfor文とwhile文辺りでやるやり方も知りたい
>>883 は出題者の意図する解答でないのは確かだな
886 :
デフォルトの名無しさん :2007/07/13(金) 10:20:45
私も、「配列に格納した状態でビット演算、桁上がり、桁下がりを実装」だと考えた
昨日のポインタ無視添え字マンセー野郎と一緒だなw
for文でaとbを一つずつ足し引きして for文で-1とかを直しつつ桁下がりしつつ そのfor文をWhileとdoでループさせて何回引けたかをカウントしつつ whileの中身は配列の中身が全て0以下になったらって感じかな
4bit×4bit限定っていう前提ならまだましだけど、 ある程度汎用的にって考え出したらめんどそうだな。
掛け算だけ作ってみたけどめちゃくちゃ面倒くせえ typedef struct vector_t { int *value, size; } vector_t; void reverse(vector_t *v) { int i, j, tmp; for (i = 0, j = v->size - 1; i < j; i++, j--) { tmp = v->value[i]; v->value[i] = v->value[j]; v->value[j] = tmp; } } void mul(vector_t *x, vector_t *y, vector_t *result, int radix) { int i, j, k, maxk = 0; memset(result->value, 0, (x->size + y->size) * sizeof(int)); for (i = x->size - 1; i >= 0; --i) { for (j = y->size - 1; j >= 0; --j) { k = x->size + y->size - i - j - 2; result->value[k] += x->value[i] * y->value[j]; result->value[k + 1] += result->value[k] / radix; result->value[k] %= radix; } } for (maxk = x->size + y->size; maxk > 0 && result->value[maxk-1] == 0; --maxk) {} result->size = maxk; reverse(result); }
昼休みにちょっと考えてみた。 乗算はこんな感じになるかと。 Cのコンパイル環境がないので、動くかどうかは知りません。 int c[8]={0, 0, 0, 0, 0, 0, 0, 0}; int x,y; for( int i=0 ; i<4 ; i++ ){ x = 0; for( int j=0 ; j<4 ; j++ ){ y = ( a[j] & b[i] ) ^ c[i+j] ^ x; x = ( ( a[j] & b[i] ) & c[i+j] ) | (( ( a[j] & b[i] ) | c[i+j] ) & x ); c[i+j] = y; } }
893 :
デフォルトの名無しさん :2007/07/13(金) 13:06:39
遅くなってすいません <<659.660さん 本当にありがとうございます!o(_ _)o
[1] 授業単元: プログラム演習A [2] 問題文: テキストファイルに書かれたランダムに配列された文字列を読み込み、 アルファベット順にソートして別のテキストファイルに出力するプログラムを作成せよ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語: C [4] 期限: [2007年7月23日12:00まで] [5] その他の制限: とくになし よろしくおねがいします
896 :
デフォルトの名無しさん :2007/07/13(金) 13:44:28
[1] 授業単元:数値計算法入門 [2] 問題文:LU分解による連立方程式の解法のプログラムを作成せよ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 2005 Express Edition [3.3] 言語: C言語 [4] 期限: 2007年07月15日まで [5] その他の制限:特になし どうかよろしくおねがいいたします
m=-1;
do{
aの配列から引いたりするfor文(省略
m++;
}while(a[0] && a[1] && a[2] && a[3] && a[4] <= 0);
>>888 を見てこんな感じかなと思ったけどwhileが違うっぽい、もうだめぽ
>>895 #include <stdio.h>
#define INFILE "infile.txt"
#define OUTFILE "outfile.txt"
int main(void) {
FILE *fd;
int ch, i, j;
unsigned int cnt[128];
if ((fd=fopen(INFILE, "r"))==NULL) return -1;
memset(cnt,0,sizeof(cnt));
while ((ch=fgetc(fd))!=EOF)
if (32<=ch&&ch<=126) cnt[ch]++;
fclose(fd);
if ((fd=fopen(OUTFILE,"w"))==NULL) return -1;
for (i=32;i<128;i++)
for (j=0;j<cnt[i];j++)
fputc(i,fd);
fclose(fd);
return 0;
}
ソートって文字単位なの?てっきり行単位かと思ったのだが
902 :
デフォルトの名無しさん :2007/07/13(金) 17:15:44
一次元配列を使って次の問題を解け。ある会社では、販売員に歩合給ペースで賃金を支払っている。販売員は固定給200ドルとその週の売上高の9%を受け取る。たとえば、週に3000ドル売り上げた販売員は、200ドル+3000ドルの9%で週給470ドルを受け取る。 週給(小数点以下を切り捨てた整数値)が以下の各範囲に該当する販売員の人数を求めるプログラムを書け。ただし、人数カウンタの配列を使うこと。 1. 200-299ドル 2.300-399ドル 3.400-499ドル 4.500-599ドル 5.600-699ドル 6.700-799ドル 7.800-899ドル 8.900-999ドル 9.1000ドル以上 よろしくお願いします。
[1] 授業単元:データ構造とアルゴリズムT [2] 問題文:2次方程式の解を表示する関数を作成しなさい。 *2次方程式 ax2+bx+c=0 の解を表示する関数 関数定義 void solveQuadEq(double a, double b, double c) 解は,戻す(returnする)のではなく,表示する(printfする)ようにしてください. 解の場合わけ a=0, b=0のとき,エラー a=0, b≠0のとき,x=-c/b a≠0のとき, 判別式D=0のとき,重解 判別式D>0のとき,解の方程式(実数解) 判別式D<0のとき,解の方程式(虚数解) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Microsoft Visual stdio 2003 [3.3] 言語: C++ [4] 期限: 2007年07月14日AM9:00まで [5] その他の制限:できるだけ複雑ではなく簡単な構造にしてください。 どうかよろしくおねがいいたします
>>902 問題の意味がわからない
何を入力して、何を出力するのか詳しく
>>906 です
途中で送信してしまいました
よろしくお願いします
909 :
デフォルトの名無しさん :2007/07/13(金) 18:38:11
>>905 販売員の人数,各販売委員の売り上げは自由に設定してよい。各販売員の売り上げの入力データはプログラム内に埋め込む方式でもキーボードから入力する方式でも良い。
一応問題文全部です。
わかりましたらお願いします。
素人が
>>903 をやってみたけど、原因不明の異常終了です
なぜ?
#include<stdio.h>
#include<math.h>
void solveQuadEq(double a, double b, double c){
double d=b*b-4*a*c;
if(a==0)
if(b==0)printf("Error\n");
else printf("%f\n",-c/b);
else
if(d==0)printf("%f\n",-b/a);
else if(d>0)printf("%f %f\n",(-b+sqrt(d))/a,(-b-sqrt(d))/a);
else printf("%f±%fi\n",-b/a,sqrt(-d)/a);
}
int main(void){
double a,b,c;
while(1){
printf("a=");scanf("%f",&a);
printf("b=");scanf("%f",&b);
printf("c=");scanf("%f",&c);
solveQuadEq(a,b,c);
}
return 0;
}
とりあえずdouble型は%lf
>>906 #include <iostream>
#include <cmath>
double f(double x)
{
return 1/(1 + pow(x, 2));
}
int main()
{
double h, a = 1, b = 2, e = 0.0000001, s1, s2, yo, ye;
int n, i;
for(n = 1, s2 = 0; ; n++){
s1 = s2, h = (b - a)/(2*n);
for(i = 1, yo = 0; i <= 2*n - 1; i += 2) yo += f(a + h*i);
for(i = 2, ye = 0; i <= 2*n - 2; i += 2) ye += f(a + h*i);
s2 = h/3*(f(a) + 4*yo + 2*ye + f(b));
if(fabs(s2 - s1) < e) break;
}
std::cout << s2 << std::endl;
return 0;
}
a, bの値を間違えた……
916 :
903 :2007/07/13(金) 19:19:30
>>910 のプログラムの%fを%lfに全て変えましたが、a=1.2, b=0.12, c=-2.88のときに
解がx=1.5, -1.6になると思うんですがどうしてでしょうか?a=0, b=2, c=3の時はできるんですが...すみません
a=0, b=2, c=3って2次方程式じゃないしな
>>916 ゴメン、まちがえたw
解の公式を考えれば解決できるから
>>902 こんな感じでいいの?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define NUM 40 /* 販売員の人数 */
int main(void) {
int salary[NUM], count[11], i, sw;
enum { G = 2, F, E, D, C, B, A, S, SS};
/* G:200-299ドル 面倒なんで以下略 */
srand((unsigned)time(NULL));
memset(count, 0, sizeof(count));
for(i = 0; i < NUM; ++i) {
salary[i] = 200 + ((rand() % 10000) * 0.09);
sw = salary[i] / 100;
if(sw > SS) { sw = SS;}
switch(sw) {
case G: count[G]++; break;
case F: count[F]++; break;
case E: count[E]++; break;
case D: count[D]++; break;
case C: count[C]++; break;
case B: count[B]++; break;
case A: count[A]++; break;
case S: count[S]++; break;
case SS: count[SS]++; break;
}
}
続き printf("200-299ドル:%d人\n", count[G]); printf("300-399ドル:%d人\n", count[F]); printf("400-499ドル:%d人\n", count[E]); printf("500-599ドル:%d人\n", count[D]); printf("600-699ドル:%d人\n", count[C]); printf("700-799ドル:%d人\n", count[B]); printf("800-899ドル:%d人\n", count[A]); printf("900-999ドル:%d人\n", count[S]); printf("1000ドル以上:%d人\n", count[SS]); return (0); }
>902 #include <stdio.h> int main(void) { int a[9] = {0}, i, n; for(i=1; i<=10; i++) { printf("%2d人目の売上高を入力してください:", i); scanf("%d", &n); n = (int)(n * 0.09); if(n> 800) a[8]++; else a[n/100]++; } for(i=0; i<8; i++) printf("%d.%d - %dドル:%2d人\n", i+1, 200 + i * 100, 299 + i * 100, a[i]); printf("9.1000ドル以上 :%2d人\n", a[8]); return 0; }
922 :
903 :2007/07/13(金) 20:08:41
923 :
1 :2007/07/13(金) 20:22:05
[1] 授業単元:IT入門 [2] 問題文(含コード&リンク): 文字列を入力し,それを逆から表示するプログラムを作成せよ. [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 最新版 [3.3] 言語: C [4] 期限:2007年7月21日 [5] その他:以前ここで教えてもらったプログラム↓
924 :
2 :2007/07/13(金) 20:22:50
#include <stdio.h> int main(void){ char str[100]; char *p, *temp; puts("文字列を入力してください"); fgets(str, 99, stdin); p = temp = str; puts("入力した文字列は以下の文字列です"); while(*p){ printf("%c", *p); p++; } puts("入力した文字列の逆順は以下の文字列になります"); while(p-temp){ printf("%c", *(p-1)); p--; } return 0; }
925 :
3 :2007/07/13(金) 20:25:04
↑を実行すると [1g06a037@eris064 ~]$ gcc 1g06a037_3.c -o hi -Wall 1g06a037_3.c: 関数 `main' 内: 1g06a037_3.c:22: error: 文法エラー at end of input こんなエラーが出てきます。 何がおかしいのでしょうか?
926 :
デフォルトの名無しさん :2007/07/13(金) 20:29:38
>>925 おかしい所は無いはず
もっかいコンパイルしてみ
928 :
デフォルトの名無しさん :2007/07/13(金) 20:44:15
>>923 #include <stdio.h>
int main(void){
char str[256],riv[256];
int i=0,n;
fgets(str,sizeof(str),stdin);
while(str[i]!='\n'){
n=i;
i++;
}
i=0;
while(n>=0){
riv[i]=str[n];
i++;
n--;
}
riv[i]='\0';
printf("%s\n",riv);
return 0;
}
Cじゃなんすけど、どの言語か分からないんでここで質問したいプログラムがあるんですけど それってダメですか?
スレタイ嫁。
931 :
デフォルトの名無しさん :2007/07/13(金) 21:29:34
[1] 授業単元:確率 [2] 問題文(含コード&リンク): double normrand(void) { return (double) rand() / (RAND_MAX + 1); } normrandの生成する一様乱数uに基づくr={1-2σ^2ln(1-u)}^(-1/2)はRayleigh分布に従うRayleigh乱数となる。 また、一様分布 U(θ;π,π^2/3)= (2π)^(-1) for θ ∈[0,2π) 0 for θ∈(-∞,0) ∧ [2π,∞) に従う一様乱数θに基づく、x=rcosθとy=rsinθは共に平均0、分散σ^2のガウス分布に従うガウス乱数となる。 このガウス乱数を生成する double raygauss(double var) { } という関数を作れ [3] 環境 [3.1] OS: Windows [3.2] gcc 3.4 [3.3] 言語: C [4] 期限: 明日 [5] その他の制限: なし お願いします
932 :
898 :2007/07/13(金) 21:30:32
#include <stdio.h> int main(){ int i, m; int a[4] = {1, 1, 0, 0}; int b[4] = {0, 1, 0, 0}; m = -1; do{ for(i = 3; i >=0; i--){ a[i] = a[i] - b[i]; } for(i = 3; i >=0; i--){ if(a[i] <= -1){ a[i] = a[i] + 2; a[i+1] = a[i+1] - 1; } } for(i = 0; i <= 3; i++){ printf("%d", a[i]); } m++; }while(a[0] && a[1] && a[2] && a[3] && a[4] <= 0); printf("\n%d", m); } } m++; }while(a[0] && a[1] && a[2] && a[3] && a[4] <= 0); printf("\n%d", m); } お客様の中にこのwhileの中身を解決してくれる方はいませんか?
> } > m++; > }while(a[0] && a[1] && a[2] && a[3] && a[4] <= 0); > printf("\n%d", m); >} スマン、この部分はちょっとしたミスだ
934 :
デフォルトの名無しさん :2007/07/13(金) 21:37:05
935 :
sage :2007/07/14(土) 01:00:44
[1] 授業単元:数値計算法 [2] 問題文:ニュートン法による高次方程式の解法のプログラム作成 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Microsoft Visual stdio 2003 [3.3] 言語: C言語 [4] 期限: 2007年07月16日 [5] その他の制限:特になし よろしくお願い致します。
936 :
デフォルトの名無しさん :2007/07/14(土) 03:03:26
>>935 この内容では誰も回答しようがないのでは
んじゃ俺が回答を試みてみよう
>>935 なんか同じ講義受けてる匂いがぷんぷんする
939 :
デフォルトの名無しさん :2007/07/14(土) 07:00:52
ヤコビ行列の求め方がわからん
941 :
デフォルトの名無しさん :2007/07/14(土) 07:04:23
そんな宿題だされるなら普通ニュートン法のアルゴリズムは授業でならっただろ? それでもかけないのかよ(´,_ゝ`)プッ どこまで書けてどんなエラーがでたとかも書かないのかよ(´,_ゝ`)プッ
943 :
デフォルトの名無しさん :2007/07/14(土) 10:39:23
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):次のプログラムは、式を入力すると計算結果を表示するプログラムであるが、 誤っている点があります。現在の内容を理解し、誤りを訂正してコメントをつけてください。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> char *p; char c[100]; int expression(void); int term(void); int number(void); main(){ int ans; while(1){ printf("Enter expression : "); fgets(c,90,stdin); p=&c; if(*p == '\n') break; ans = expression(); printf("Answer:%d\n", ans); } } int expression(){ int ans; ans = term(); while(1){ if(*p == '+'){ ans = ans + term(); }else if(*p == '-'){ ans = ans - term(); }else break; } return(ans); } int term(){ int ans,x; ans = number(); while(1){ if(*p == '*'){ ans = ans * number(); }else if(*p == '/'){ x = number(); if(x == 0){ printf("Division by 0\n"); exit(1); } ans = ans / x; }else break; } return(ans); } int number(){ int i=0; while (isdigit(*p)){ i=i*10+(*p++)-48;} return(i); } [3] 環境 [3.1] OS: Windows [3.2] gcc 3.4 [3.3] 言語: C言語 [4] 期限: 2007/7/17 改行が多すぎて、乗せられなかったためこんな形になりますた。すみません。宜しくお願いします。
944 :
931 :2007/07/14(土) 10:45:49
946 :
デフォルトの名無しさん :2007/07/14(土) 11:47:15
949 :
デフォルトの名無しさん :2007/07/14(土) 12:11:28
951 :
デフォルトの名無しさん :2007/07/14(土) 14:07:15
953 :
デフォルトの名無しさん :2007/07/14(土) 14:15:53
>>953 1) 52
2) a[i] < 13
3) a[i] + 1
4) a[i] < 26
5) a[i] - 12
6) a[i] < 39
7) a[i] - 25
8) a[i] - 38
956 :
デフォルトの名無しさん :2007/07/14(土) 14:43:34
>>953 問題文に誤りがある。それにこれだと毎回同じ結果になるぞ。
//#include<stdkib.h>
#include<stdlib.h>
//#define uniformrand() ((double)rand()/((double)RAND_MAX + 1.0)
#define uniformrand() ((double)rand()/((double)RAND_MAX + 1.0))
コロンの右が解答(トランプ種類は適当に決めた。正解は色々あるだろな)
問1:4*13
問2:a[i]<=12
問3:a[i]+1
問4:13<=a[i]&&a[i]<=12+13
問5:a[i]+1-13
問6:13*2<= a[i]&&a[i]<=12+13*2
問7:a[i]+1-13*2
問8:a[i]+1-13*3
957 :
デフォルトの名無しさん :2007/07/14(土) 15:20:43
953です。 956>>問題文のご指摘ありがとうございます。 また、他の皆さんも自分のためにご協力ありがとうございます。
958 :
881 :2007/07/14(土) 15:35:04
>>890 ありがとうございます。
でも少し言葉足らずだったみたいで申し訳ないです。
main()の()の中も何も使っちゃいけないんです。
お時間があればまたよろしくお願いします。
959 :
デフォルトの名無しさん :2007/07/14(土) 16:56:10
>>958 890ではないが、これではどうして欲しいのかよく分からない。
960 :
819 :2007/07/14(土) 17:18:39
>>945 さん
本当にありがとうございます。
助かりました。
>>958 まさかとは思うけど、voidってのがダメってこと?
プログラムの意味わかってる?
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): テキストファイルに書かれた数列の総和をとり、 計算結果を元のテキストファイル名の末尾に「b」を付け足したファイル名で出力するプログラム 例) 元のファイル名:****.txt 内容: 1 1 2 2 2 出力するファイル名:****b.txt 内容: 8 [3] 環境 [3.1] OS: Windows [3.2] gcc 3.4 [3.3] 言語: C [4] 期限: 月曜日 [5] その他の制限: とくになし
963 :
962 :2007/07/14(土) 18:26:51
期限は火曜日の間違いでした
964 :
デフォルトの名無しさん :2007/07/14(土) 18:55:33
>>962 読込むファイル名は拡張子無しでプログラムに渡すの?
それとも自力で拡張子を分離して出力ファイル名を生成?
965 :
962 :2007/07/14(土) 19:18:36
う、わかりません… その辺りに関しては特に指定がなかったので、簡単なほうでいいと思います
>>964 テキストファイルだから.txt決めうちでいいんじゃね
[1] 授業単元:オペレーティングシステム
[2] 問題文(含コード&リンク):
セマフォを使った同期 −共有バッファを用いたプロセス間
メッセージ通信
親/子プロセスでメッセージを書き込み、子/親プロセスで読
み出す
以下の未完成プログラムを完成させよ
http://uproda11.2ch-library.com/src/1114963.c [3] 環境
[3.1] OS: (Windows/Linux/等々):Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限:07/14
[5] その他の制限:自分で考えてみましたがよくわかりませんでした・・・
よろしくお願いします
968 :
デフォルトの名無しさん :2007/07/14(土) 20:47:01
お願いがあるんだ・・・
>>932 のおかしな所を正してくれないか?
>>969 かなり直さないといけないな。
「商をmに格納する」でいいの?
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): キーボートからs1文字列を入力して、s1文字列を文字列s2にコピーしてから 表示するプログラムを作成よ。(条件はstrcpy関数を使わないで自作関数でコピーすること) [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 7月18日まで お願いします
>>973 #include <stdio.h>
void my_strcpy(char *s2, char *s1){ // どちらでもお好きなほうをどうぞ
while((*s2++=*s1++)!='\0')
;
}
void my_strcpy(char s2[], char s1[]){ // どちらでもお好きなほうをどうぞ
int i;
for(i=0;;i++){
s2[i]=s1[i];
if(s1[i]=='\0') break;
}
}
int main(void){
char s1[100], s2[100];
fgets(s1, sizeof(s1), stdin);
my_strcpy(s2, s1);
printf("%s", s2);
return 0;
}
>>974 ありがとうございます、早いです、好きです付き合ってください。
977 :
デフォルトの名無しさん :2007/07/14(土) 23:42:11
なんで自分でしないの?○○までやったけれど、 〜のエラーがでてわからないとかいわないの? 本みればすぐのっている問題が多すぎる。
979 :
967 :2007/07/15(日) 00:28:37
980 :
デフォルトの名無しさん :2007/07/15(日) 00:30:59
>>976 #include <stdio.h>
int main(){
int i,m=0;
int a[4]={1,1,0,0};
int b[4]={0,1,0,0};
do{
for(i=0;i<4;i++){a[i]-=b[i];}
for(i=0;i<4;i++){
if(a[i]==-1){int w=1;a[i]=1;
while(i-w>=0){
if(a[i-w]==0){a[i-w]=1;w++;continue;
}else{a[i-w]=0;break;}}}}
for(i=0;i<4;i++){putchar(a[i]+'0');}
putchar('\n');
m++;
}while(a[0]||a[1]||a[2]||a[3]);
printf("%d\n", m);
return 0;
}
>>979 問題文これだけ?
環境は?
こんなん何もなしでやるのなんか無理だろ
>>980 851の分まで有難うといっておく
そのソースと睨めっこしながら宿題を頑張ることにするよ
>>984 問題をそのまま載せただけじゃなんだかよくわからないよ
予備知識が無いんだから
gets_s()は何をする関数?
gets_s()はマイクロソフトがVisual Studioにくっつけた
”getsを安全に使うようにする”ための関数だろw
char *gets_s(char *buffer, size_t sizeInCharacters);
hoge_sとか、_sがついてるやつは、だいたいVSの独自もの
>>984 もあまり使わないほうがいいよ
>>984 まず行末コメントをタブで揃えるのやめろ。環境によって幅が変わる。
タブは行頭の、意味的なインデント(や段落)を示すときだけ使え
>>986 ありがと、実行はできた
あとさ、判定は積だけでいい気がするけど
991 :
984 :2007/07/15(日) 11:34:34
「_s」については
>>986 さんの言うとおりです。
これから気をつけていこうと思います。
>>988 続きで、その前にあった「リプレイできるようにしろ」って言うのはどうにかできたんですが
その次に今回の問題で、碁盤スパイラルです。
>>989 了解しました。ご指摘ありがとうございます。
[1] 授業単元: [2] 問題文: 二つの文字列のポインタ pa, pb を引数に取り pa の指す文字列に対する回文(逆さ文字列)を pbの指す先に格納する関数 mkrevstr()を書け. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin gcc [3.3] 言語: C [4] 期限: [07月16日まで] お願いします。
void mkrevstr(char *pa, char *pb) { char *p = pa; while(*p) p++; while(p!=pa) *pb++ = *(--p); *pb = '\0'; }
void mkrevstr(char *pa, char *pb) { char *ch = pa; while(*pb++ = *pa++); pb--; pa-=2; for(;ch != pa--;) *pb++ = *pa; *pb = '\0'; return; }
なんで一度コピーしてんの?
回文と逆さ文字列って別物だよな? >993が逆さ文字列で>994が回文だけど、どっちが正しいんだろ。
998 :
デフォルトの名無しさん :2007/07/15(日) 16:35:45
.
999 :
デフォルトの名無しさん :2007/07/15(日) 16:37:48
↓
1000 :
デフォルトの名無しさん :2007/07/15(日) 16:38:23
せーん
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。