1 :
デフォルトの名無しさん :
2008/11/16(日) 23:57:04
2 :
デフォルトの名無しさん :2008/11/17(月) 00:00:03
別に、独自の環境次第だから、ISO準拠のスタイルにこだわらずとも void mainでも構わんよ。あとはコンパイラがどう解釈するかで違ってくるし。 内面的には、int mainとして解釈して、これは最適化とはいえないが 自動的に処理されているものもあるし。
main厨うざい
>>2 課題1
#include <iostream>
#define foe if(false); else for
using namespace std;
int main()
{
cout << "何人のテストの点数を入力しますか?" << endl;
int n;
cin >> n;
int *score = new int[n];
cout << "人数分の点数を入力してください。" << endl;
for(int i = 0; i < n; i++)
cin >> score[i];
double sum = 0;
for(int i = 0; i < n; i++)
sum += score[i];
cout << "平均点は" << sum/n << "です。" << endl;
}
>>2 課題2
Kadai2.cpp
#include <iostream>
using namespace std;
#include "shell.h"
int main()
{
double r;
cout << "半径を入力してください。: ";
cin >> r;
cout << "半径は" << r << "です。" <<endl;
cout << "体積は" << volume(r) - volume(r - 1)<< "です。" <<endl;
cout << "円周率を" << PI << "で計算しました。" <<endl;
}
>>2 課題2 つづき
shell.cpp
double volume(double r)
{
return r*r*r*4.0/3.0*PI;
}
shell.h
shell.h #define PI 3.1416 double volume(double r);
9 :
デフォルトの名無しさん :2008/11/17(月) 13:14:25
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): 二つの正の整数値width(幅),height(高さ)を読み込む。 長方形を描くときに,ふちだけ*文字を出力するようにする。長方形の中央部は,スペース 文字を使ってあける。もしwidth が5,height が4 であれば,次のように出力される。 ***** * * * * ***** [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:VC 6.0 [3.3] 言語:C よろしくお願いします。
>>11 #include <stdio.h>
int main()
{
int width, height, i, j;
printf("幅?:");
scanf("%d", &width);
printf("高さ?:");
scanf("%d", &height);
for(i = 0; i < height; i++){
for(j = 0; j < width; j++)
if(i == 0 || i == height - 1 || j == 0 || j == width - 1)
printf("*");
else
printf(" ");
printf("\n");
}
return 0;
}
[1] 授業単元:C言語-構造体- [2] 問題文: 姓,名,年齢,郵便番号,電話番号の各データをメンバとする構造体配列を下記 のように宣言し,その構造体配列にキーボードからデータを逐次入力して,最大100 名 のデータを格納できるようにしなさい。但し,入力の終了は,姓入力の際にnull と入力 することによって判定しなさい。また,入力が終了した時点で,格納された複数名のデ ータをすべて出力するようにしなさい。 #define MAXREC 100 struct namelist { char last_name[21], first_name[21]; int age; char zip[9], tel[13]; } meibo[MAXREC]; ▼出力例 Last name(終了はnull 入力)> Tanaka First name > Tarou Age > 49 Zip code > 123-4567 Telephone > 0120-1234567 Last name(終了はnull 入力)> null Name : Tanaka Tarou Age : 22 Zip code : 123-4567 Telephone: 8899-1234567 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008年11月18日 24:00 C言語の、基本的な関数のみでお願いします。
15 :
りょyu :2008/11/17(月) 15:25:48
<input type="button" class="button" value="編集" onClick="editEmployeeInfo"(<bean:write name="searchList" property="employee_id"/>) 研修生です。eclipse,Tomcatを使用しています。 自分は編集ページ担当で、 自分のぺージでは、編集元の情報を表示させてから内容を書き換えて、 データベースに更新する部分をやっています。 上に書いたソースは社員情報ページのボタンで、 社員Id(employeeID)を送ってるらしいんですけど、 これを自分の担当ページでこの社員Idをもとに情報をデータベースから取り出し 担当画面に表示させたいのですが分かりません。 質問が大雑把ですが、大まかにどういう流れで作業を行えばいいか教えてください。
>>14 #include <stdio.h>
#include <string.h>
#define MAXREC 100
int main(int argc, char *argv[])
{
struct namelist {
char last_name[21], first_name[21];
int age;
char zip[9], tel[13];
} meibo[MAXREC];
int i, count;
for (i = 0; i < MAXREC; i++) {
printf("Last name > "); scanf("%s", meibo[i].last_name);
if (strcmp(meibo[i].last_name, "null") == 0) {
break;
}
printf("First name > (終了は null 入力)"); scanf("%s", meibo[i].first_name);
printf("Age > "); scanf("%d", &meibo[i].age);
printf("Zip code > "); scanf("%s", meibo[i].zip);
printf("Telephone > "); scanf("%s", meibo[i].tel);
}
count = i;
for (i = 0; i < count; i++) {
printf("Name: %s %s\n", meibo[i].last_name, meibo[i].first_name);
printf("Age: %d\n", meibo[i].age);
printf("Zip code: %s\n", meibo[i].zip);
printf("Telephone: %s\n", meibo[i].tel);
}
return 0;
}
17 :
16 :2008/11/17(月) 16:11:26
あ、「終了は null 入力」を入れるところを間違えた - printf("Last name > "); scanf("%s", meibo[i].last_name); + printf("Last name > (終了は null 入力)"); scanf("%s", meibo[i].last_name); - printf("First name > (終了は null 入力)"); scanf("%s", meibo[i].first_name); + printf("First name > "); scanf("%s", meibo[i].first_name);
>>15 > 質問が大雑把ですが、大まかにどういう流れで作業を行えばいいか教えてください。
大まかにいうと、まずスレ違いだから正しいスレを探す
21 :
デフォルトの名無しさん :2008/11/17(月) 19:14:54
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 二階常微分方程式 y''=xy'+y を初期条件(x0,y0)=(0,1), y'=1のもとでルンゲクッタ法によりx=1.0まで10等分して求めよ。 (上の式を次のように1階連立常微分方程式に変換して求めればよい。y1'=y2, y2'=xy2+y1) [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月19日まで [5] その他の制限: double function (double , double*, int) double rungekutta(double , double) double function (double x , double *yp , int j ) double rungekutta(double x , double *yp ,double h) を利用するとよい。 と言っていました。 よろしくお願いします^^
前スレの693です。提出期限が延びたのでお願いします。
[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):
0度から360度までのSin(x)の値を文字コード*を使ってグラフを表示するプログラムをC言語で作成せよ。
実行結果の例をアップローダーに貼り付けました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8012.txt [3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2005
[3.3] 言語: C
[4] 期限: 2008年11月21日
[5] その他の制限: ファイルの入出力まで習いました。
よろしくお願いします。
23 :
19 :2008/11/17(月) 19:53:19
>>20 早い回答で助かります。ありがとうございました!!
26 :
デフォルトの名無しさん :2008/11/17(月) 20:46:22
外部コマンド使わずにprintfだけで自分自身のソースを吐き出すプログラム ってどうする?
27 :
◆vfu2FjSsg6 :2008/11/17(月) 20:49:06
【質問テンプレ】 [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): 6 個の要素をもつ整数配列data を初期化して(例えばint data[6]={14,9,7,12,8,10};) 宣言する。これはサイコロを何回か振ったとき,「1が出た回数」,「2が出た回数」,… 「6が出た回数」だとする。それぞれの目が出た回数を,for 文を使っ て,*で表しなさい。上記の配列の初期値であれば,次のように出力されればよい。 1 ************** 2 ********* 3 ******* 4 ************ 5 ******** 6 ********** [3] 環境 [3.1] OS:Win [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語C [4] 期限:11/14 よろしくお願いします。
30 :
# :2008/11/17(月) 21:39:44
>>29 早い回答ありがとうございます!!
助かりました。
#include <stdio.h> int main(void) { int i, j; int data[6] = {14, 9, 7, 12, 8, 10}; for (j = 0; j < 6; j++) { printf("%d ", j + 1); for (i = 0; i < data[j]; i++) { printf("*"); } printf("\n"); } return 0; }
>>32 迅速な回答ありがとうございます!
助かりました!
int main() { }
37 :
デフォルトの名無しさん :2008/11/18(火) 00:43:54
[1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): @)円周率πの近似式 4(-1)^n/(2n+1){(1/2)^(2n+1)+(1/3)^(2n+1)} (nは0〜100) を用いて小数第8桁まで正しい値(3.14159265)を 出力するプログラムを作れ。 A)さらにその出力された数値γに対し次の不当式を満たす最小の自然数Nを 求めるプログラムを作れ。 #π^2/6-1/k^2#<γ (##は絶対値記号、kは1〜Nまで) [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月21日17時 [5] その他の制限:for文、break文あたりまでやったのですがいまいち使い方が理解できません・・・ 配列と数学関数は使用禁止です。お手数ですがよろしくお願いします。
>>37 #include <stdio.h>
int main (void)
{
int i;
double pi, sum, gam, a, b, c;
a = 1.0; b = 0.5; c = 1.0/3.0;
sum = b + c;
for(i=1; i<=100; i++){
pi = 4.0 * (sum += (a*=-1) / (2*i + 1) * ((b*=0.5*0.5) + (c*=1.0/9.0)));
}
printf("π≒%.8f\n", pi);
printf("γ:");
scanf("%lf", &gam);
i = 1; sum = 0.0;
while(1){
a = pi*pi/6 - (sum += (1.0/(double)i)*(1.0/(double)i));
if(a < 0)
a *= -1.0;
if(a < gam)
break;
i++;
}
printf("N = %d\n", i);
return 0;
}
[1] 授業単元:while [2] 問題文(含コード&リンク): 「2進数⇔10進数」変換プログラムを作りなさい。 また「16進数⇔10進数」変換ができるようにプログラムを拡張しなさい。 さらに「x進数⇔10進数」変換ができるようにプログラムを拡張しなさい。 Ex:10進モード(decimal):54(10)→110110(2) [3] 環境 OS:WindowsXP コンパイラ:Visual C 言語:C [4] 期限: 今月30日まで [5] その他の制限: whileを習い終わって、今は関数と引数について
2進数⇔10進数の変換プログラムは作れました。 16進数⇔10進数以降がわかりません。 よろしくお願いします。
⇔ って書かれているけど、双方? どちらか一方を入力して、例えば2進数を10進数に、16進数を10進数と、n進数を 10進数にするだけでなく、10進数を任意のn進数にもするってこと? 出来れば、もう少し具体的な実行例を書いてもらいたい。
⇔は双方向という意味です。 ・10進数→n進数,2進数,16進数 ・n進数,2進数,16進数→10進数 の両方を実行できるプログラムということです。 「拡張しなさい」と書かれているので、 「10進数⇔2進数」かつ「10進数⇔16進数」を実行できるプログラムのことだと私は考えてます。 なので、はじめに例えば「x進数のnをy進数に変換する」といったテキストを表示させ、 「x= 」「n= 」「y= 」と順に入力させて、変換させたのを表示するといった感じに考えています。 よろしくお願いします。
xはどこまで行ければいいんだ 37進数以上可だとだと数字セットをどうするかの問題があるぞ
45 :
44 :2008/11/18(火) 08:27:10
連投すみません上の課題2は結構です 課題1のみでお願いします
>>43 なるほど、確かにそうですね。
問題文が不十分なのは恐縮ですが、zまでの36進数でお願いします。
【質問テンプレ】 [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 直角三角形の直角をはさむ辺の長さをx とy とすると,斜辺z の長さはx2 + y2 という計算式で求めることができる。(ピタゴラスの定理,三平方の定理,などと呼ばれる) Ι\z yΙ_\ x 実数x とy をキーボードから読み込み,z を求めるプログラムを作成しなさい。 その際,ファイルmath.h にある,次のライブラリ関数を利用してプログラムを作成すること。 ●平方根(ルート)を求める関数 double sqrt( double x) [3] 環境 [3.1] OS:Win [3.2] コンパイラ:VC 6.0等 [3.3] 言語 :C お願いします。
#include <stdio.h> #include <math.h> int main(void) { double x,y,z;l scanf("%lf %lf",x,y); z=sqrt(x*x+y*y); printf("%lf",z); return 0; }
引数にプロセスIDを与えて実行するとそのプロセスを殺すC言語のプログラムってどう書けばいいですか?
>>49 kill( pid, SIGKILL);
C言語のプログラムでの引数とは、argv[1]になると思いますがその場合は?C言語内でいきなりkillコマンドは実行出来ないですよね。exec系を使う必要あり?
>>51 kill はシステムコールだから直接呼べるよ
Linux だと以下をインクルードせよとある
man -s 2 kill で調べてごらん
#include <sys/types.h>
#include <signal.h>
ありがとうございました
56 :
デフォルトの名無しさん :2008/11/18(火) 13:43:40
57 :
デフォルトの名無しさん :2008/11/18(火) 13:44:45
↑ 書き忘れてしまいました 宜しくお願いします
線形リストの課題多すぎw
俺のところでも研究室の課題で出たばっかりだw
62 :
22 :2008/11/18(火) 18:34:27
>>24 習いました。
どうぞよろしくお願いします。
>>61 プログラミングIの範囲って、同じ授業受けてないとわかるわけないだろw
64 :
61 :2008/11/18(火) 18:55:01
>>63 すいません。配列/ポインタまで習いました。
指導方法によって習う順もまちまちなわけだが。
>>42 ですが、申し訳ありません。
習ったのは次のことですので、これらのみを用いて作っていただきたいです。
・printf ・scanf ・四則演算 ・配列
・if ・while ・for ・関数と引数(習い始めたばかり)
よろしくお願いします。
70 :
58 :2008/11/18(火) 21:23:49
[1] 授業単元:プログラミング [2] 問題文:半角文字でできた文字列をキーボードから読み込んで、 逆転させた文字列をつなげて回文を作り、表示させなさい。 例:Personを入力してPersonnosrePを返す。 [3] 環境 [3.1] WindowsXP [3.2] VisualC++ [3.3] 言語:C++ [4] 期限: 明日まで [5] 条件は文字の配列を利用することです。(サイズは100) 文字列用のライブラリ関数はstrcpy、strlen、strcat、strcmp、strstrは習いました。 あとは条件分岐とループぐらいしかやってないと思います。 1文字目に3文字目をコピーは m[0] = m[2]のように行うらしいですが… 期限ぎりぎりまで粘りましたが、どうしても分かりません。よろしくお願いします。
73 :
デフォルトの名無しさん :2008/11/18(火) 21:59:23
[1] 授業単元:計算機プログラミングU [2] 問題文(含コード&リンク): “Izumi”,”Kanto”,”Kudo”,”Sato”,”Sugawara”,”Matsuda”,”Wada”の 7個の文字列の長さ(文字数)をカウントして,文字列とともに表示せよ.ただし, ポインタを使用して処理すること. Char *name[] = { “Izumi”, ”Kanto”, ”Kudo”, ”Sato”, ”Sugawara”, ”Matsuda”, ”Wada”, NULL}; [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月20日10:30まで [5] その他の制限:
74 :
デフォルトの名無しさん :2008/11/18(火) 22:03:52
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): #include<stdio.h> int main(void) { int a; int i; int n; printf("ニュウリョク 初期値"); scanf("%d",&a); printf("ニュウリョク 個数"); scanf("%d",&n); /*a=2;*/ for (i=1; i<=n; i++) {a=2*a; printf("%d ",a); } } /* 以上が 漸化式an+1=2anの数列の初期値aの物をn個表示させる式です。 これを {an+1=2an-bn {bn+1=2bn-an の式にした物を表示させるプログラムをお願いします。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: [5] その他の制限:
>>68-71 ありがとうございました。
しかしまだ「#include <stdio.h>」で始まるものしか習っていなく、
#defineや#include <stdlib.h>などは使えません。
これらを使わずに作っていただけませんか?
>>69 は8062.cだったが、また間違ってたようだ・・・すまそ。
>>75 文字列を入力する際に、scanfを使うことに?
バッファオーバーランのこともあるが、一定の範囲内、条件下で
良ければ、簡単に作り直せるが。
78 :
デフォルトの名無しさん :2008/11/18(火) 22:56:26
>>76 さん
bnも初項を決めるものでお願いします。
82 :
デフォルトの名無しさん :2008/11/18(火) 23:36:22
[1] 授業単元:Cプログラミング T [2] 問題文(含コード&リンク): 指定した回数(整数)の加算を行い、平均(float)を 返す関数を作成する。 [3] 環境 [3.1]OS:WindowsXP [3.2]コンパイラ名とバージョン:gcc [3.3]言語:C [4] 期限:2008年11月20日18:00 [5] その他の制限: よろしくお願いします
84 :
37 :2008/11/19(水) 00:38:28
>>73 #include <stdio.h>
int main()
{
char *name[] = {"Izumi","Kanto","Kudo","Sato","Sugawara","Matsuda","Wada",NULL};
char **p,*q;
for(p = name; *p; p++){
for(q = *p; *q; q++);
printf("%s(%d)\n", *p, (int)(q-*p));
}
return 0;
}
>>72 #include <stdio.h>
int main()
{
char s[100] = "Person";
int i,j;
for(i=0; s[i]; i++);
for(j = i - 1; j >= 0; j--, i++) s[i] = s[j];
puts(s);
return 0;
}
ああ、「返す」ってことは関数にするのか。 ま、いっか。
89 :
デフォルトの名無しさん :2008/11/19(水) 01:17:53
質問したいことがあります。 私は年月日を与えて、何曜日かを求めるプログラムを2通り作りました。 1つはツェラーの公式をつかったもの。 もう1つは1753年1月1日が月曜日だということから、その日からの何日経過したかということから求めるもの。 この2つが正しいことを示すには、適当に年月日を与えて等しくなるということを言うしかないのでしょうか。 それだと完璧には示せないような気がします。 どなたかお願いします。
日にち曜日一覧を読み込んでチェックするプログラム作れば? 曜日一覧は Excel使えばすぐ作れる。
91 :
デフォルトの名無しさん :2008/11/19(水) 01:29:12
C言語を習い始めたばかりなので、あまり難しいことは・・・ もっと簡単にできることはないでしょうか。
エクセーールではぁー、自分の手元にバージョン2003がありますが 1970年1月1日から、経過した日数をぉ〜、シリアル値として 整数で管理している仕組みがあーりまーす。書式設定で、日数を 年月日表示にしてくれまーす。 よって、それ以前の日付に関しては、管理してくーれませーん 余談ですがー、現在使われているグレゴチャン暦はー、 1582年10月15日を金曜日として、使われ始めますたー 導入した日は、各国で違いまーす
おぉー、私としたことが、間違えますたー。1970年を基準にしてたのは C言語のあるライブラリのことでしたー。エクセルは1900年1月1日でーす。
94 :
デフォルトの名無しさん :2008/11/19(水) 01:45:18
>>5 ,6,7,8
ありがとうございます。
大変助かりました。
>>61 /* 問1 */
#include <stdio.h>
#include <string.h>
int main()
{
char buf[1024], *p;
printf("文字列を入力してください。 ");
fgets(buf, sizeof(buf), stdin);
printf("反転文字列は\"");
p = &buf[strlen(buf) - 2];
while(buf <= p) putchar(*p--);
puts("\"です。");
return 0;
}
/* 問2 */
#include <stdio.h>
#include <ctype.h>
int main(){
char buf[1000], *p;
int cnt['Z'-'A'+1] = {0}, i;
printf("文字列を入力してください。 ");
fgets(buf, sizeof(buf), stdin);
for(p = buf; *p; p++) if(isalpha(*p)) cnt[toupper(*p) - 'A']++;
puts("アルファベットの数");
for(i=0; i<sizeof(cnt)/sizeof(cnt[0]); i++) if(cnt[i] > 0) printf("%c or %c --> %d\n", i + 'A', i + 'a', cnt[i]);
return 0;
}
>>61 /* 問3 */
#include <stdio.h>
#include <string.h>
int main(){
char buf[10000], c, *p;
int pos[10000];
int i = 0;
printf("文字列を入力してください: ");
fgets(buf, sizeof(buf), stdin);
buf[strlen(buf) - 1] = '\0';
printf("検索文字を入力してください: ");
c = getchar();
for(p = buf; *p; p++) if(*p == c) pos[i++] = (int)(p - buf) + 1;
if(i==0){
puts("\nそんな文字は入っていない!");
}else{
int j;
printf("文字列\"%s\"に\"%c\"は\n", buf, c);
for(j = 0; j < i; j++)printf("%d番目\n", pos[j]);
puts("にあります。");
}
return 0;
}
あ、問2 と 3 が逆だった。
[1] 授業単元:プログラミング演習C言語 [2] 問題文(含コード&リンク): フィボナッチ数列 F[n+2] = F[n+1] + F[n] (n≧0 F[0]=0 F[1]=1) の n = 1 から 20 までの和を計算し、結果を出力するプログラムを作ってください。 [3] 環境: [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc 最新のバージョン [3.3] 言語: C [4] 期限:明日 [5] その他の制限:配列で解く。和の計算はfor文を使う #include <stdio.h> main(){ int i, fibo [20], sum = 0; フィボナッチ数列を配列に入れる; 和を計算する; printfで和を出力する; } ↑が当てはめるテンプレです。よろしくお願いします
>>98 #include <stdio.h>
int main(void) {
int i, fibo [20], sum = 0;
fibo[0]=1; fibo[1]=1;
for(i=2; i<20; i++) fibo[i]=fibo[i-2]+fibo[i-1];
for(i=0; i<20; i++) sum+=fibo[i];
printf("sum : %d\n",sum);
return 0;
}
>>99 は fibo[0]=0; に書き換えておいて。
>>98 main(){
int i, fibo[20], sum = 0;
fibo[0] = 1;fibo[1] = 1;
for(i=2; i<20; i++) fibo[i] = fibo[i-1] + fibo[i-2];
for(i=0; i<20; i++) sum += fibo[i];
printf("%d\n", sum);
}
>>101 なるほど・・・
それだとF[0]のからF[20]まで足してるんじゃ?
初心者ながら疑問に思いました
できたら回答をお願いします
配列サイズが20だから使える添え字は19まで。
0 〜 19 を使って、 n=1〜20を格納している。
つまり
>>101 では、 n=1 の値を fib[0] に、 n=2 の値をfib[1]に入れている。
for(i=0; i<20; i++) { sum+=fibo[i]; printf("fibo[%d] : %d / sum : %d\n",i,fibo[i],sum); } 内面的な部分を見たいなら、こんな感じで実行結果を見てみては?
>>104 てことは
>>101 のF[1]=1
ってのは自分で数列のF[2]の値だからそれは自分で計算したってことでいいんですよね?
たしかに教授はサイズは20以上でもいいとか言ってたけど・・・そのせいかな
106 :
61 :2008/11/19(水) 02:47:56
>>97 動作確認できました。ありがとうございました。
>>105 添え字と、先頭から何番目かを求めるのに混乱していない?
f[0]は1番目、f[1]は2番目、f[19]は20番目。0オリジンって言うんだが
そういうのに慣れるべし。
宣言したとき、f[20]ではf[19]まで。要素の数は20個だけど
20番目はf[19]で。くどいがそういうこと。
俺の日本語おかしすぎる・・・ main(){ int i, fibo[20], sum = 0; fibo[0] = 1;fibo[1] = 1; ←ここ for(i=2; i<20; i++) fibo[i] = fibo[i-1] + fibo[i-2]; for(i=0; i<20; i++) sum += fibo[i]; printf("%d\n", sum); } 気になったのはこの fibo[1] = 1 は自分で計算したのかなと思ったんです うっす。教科書読んで勉強します
>>105 >てことは
>>101 のF[1]=1
>ってのは自分で数列のF[2]の値だからそれは自分で計算したってことでいいんですよね?
そゆこと。
>>109 了解です
長々と迷惑をかけ申し訳ないです
どうもありがとうございました
>>108 > 自分で計算
というか、初期値を代入してあるのだが、まぁそういうことだ。
>>98 > (n≧0 F[0]=0 F[1]=1)
> n = 1 から 20 までの和を計算し
この条件があるわけだし
まぁ、そういことか・・・答えている自分も見落としてたが
結局n=0は0だし、かといってそのnが添え字のことを意味していたら
F[20]ではF[19]までだし・・・まぁ、解決したから良いか。
113 :
デフォルトの名無しさん :2008/11/19(水) 03:04:30
main(){ int i,a=0,b=1,s=0; for(i=0;i++<20;b=a-b,s+=a)a+=b; printf("%d\n",s); } フィボナッチ数列の計算に配列は必要ないんだぜ。
114 :
113 :2008/11/19(水) 03:06:18
あ、条件に配列ってありますね。見落としてました。すみません。
配列サイズが20以上でいいなら、もっと自然に書ける。 int i, fibo[21], sum = 0; fibo[0] = 0; fibo[1] = 1; for(i=2; i<=20; i++) fibo[i] = fibo[i-1] + fibo[i-2]; for(i=1; i<=20; i++) sum += fibo[i]; printf("%d\n", sum);
>>115 なるほど・・・・教授め20なんて書きやがって。
21で提出してやります。ありがとうございました
ってか、どの道添え字でf[0]の中身が0だし、結果としては、 ってか、最初の0は抜きに、1,1,2から始まる形で20項目までなら、 上にあるコードの結果の合計に加え、もう1項分先の値が加えられるが・・・
>F[n+2] = F[n+1] + F[n] (n≧0 F[0]=0 F[1]=1) この条件から、n=0 は 0 でしょ。 で、F[] と fibo[] を一致させろとは書いてない。 適当に出題しただけかもしれないけど。
たしかに一致とは言ってなかったですね 最後あたりに 「やっぱF[30]あたりでもいいよ」 とか適当なこと言ってたなぁ・・・。
いい教授だと思う。 20厳守と思わせないフリを入れてるところとか、21と言わず、30くらいでもいいよというところとか。 何も言わずに20としか書いてなかったらそれを変えることが許されないように思うからな。
結論。
>>115 で出しておk。教授が使うように提示した枠組みのコードの宣言が
fibo[20]なら、それに従え、以上w
すべては教授の意のままか・・・。 もう三時www寝なきゃww ありでした
散々既出のヘボナッチで随分スレ汚ししちまった、すまそ>ALL
[1] 授業単元:文字と文字列の操作 [2] 文字列を読み込み、その長さを表示するプログラムをかけ ただしstrlen関数は使わない [4] 期限: 明日の夜までに [5] 文字列は習ったばかり、繰り返し、条件などはならっています。 fgets関数を使うらしいのですが、いまいち意味がわかりません。
>>124 MAX-1文字まで対応。fgetsの性質上、改行コードを検出したらカウント終了。
#include <stdio.h>
#define MAX 1024
int main(void)
{
char str[MAX];
int cnt;
printf("Input > ");
fgets(str,MAX,stdin);
for(cnt=0; cnt<MAX; cnt++) if(str[cnt]=='\n') break;
printf("%d文字\n",cnt);
return 0;
}
ありがとうごいざます。 ただ#define はわかりません。 あと書き忘れていましたが 100文字以内と仮定していいらしいので fgets(s,100,stdin);となると思います。
>>126 んじゃ、MAXを消して、替わりにMAXを100に置き換えて終了。
#include<stdio.h> main(){ char s[100]; int cnt /*文字数かつ制御変数*/ printf("input>"); fgets(s,100,stdin); for(cnt=0;cnt<100;cnt++){ if(s[cnt]=='\n') break(このbreak 終わりという意味だと思うのですが まだならっていません。) printf("%d文字",cnt); } breakの変わりにwhileを使うのでしょうか?
もう許してw #include <stdio.h> main(void) { char str[101]; int cnt; printf("Input > "); fgets(str,101,stdin); for(cnt=0; cnt<101 && str[cnt]!='\n'; cnt++) ; printf("%d文字\n",cnt); }
ああなるほど… 本当にすいませんでした。 自分の頭の悪さにうんざりします。 ありがとうございました。
>>81 ありがとうございました。
しかし「const」「char」というのもまだ習っていません。
もう1度上記の2つを使わずに作っていただけませんか?
お願いします。
>>131 constは外しても良いけど、char無しで
どうやって英数字が含まれる数値を表せと・・・
わざわざ、ifはちょっと効率が悪いんで、
スイッチを使って A なら 10、Bなら11とか・・・?
ASCIIコードを使うのもありだが・・・
>>130 後になって気づいたけど、fgetsの性質上、例えばs[10]とした場合
9文字でも最後の1文字に\0(空文字)が入り、改行コードが
s[10]の中に入らないので、カウントは最大の10文字を数えてしまう。
10文字以上入力しても、配列に入るのは9文字+空文字。
10文字以上入力しても、仕様からして正しくカウントしないが。
長くなったが、とりあえず、まだ見てたらfor文の条件を
for(cnt=0; cnt<10 && str[cnt]!='\n' && str[cnt]!='\0'; cnt++) ;
で。
135 :
デフォルトの名無しさん :2008/11/19(水) 07:40:01
1] 授業単元: C [2] 問題文(含コード&リンク): 2個の多項式を入力してその和を求め次数の大きい順に出力する [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual stadio2008 [3.3] 言語: C [4] 期限:2008年11月26日13:00まで
1] 授業単元: C [2] 問題文(含コード&リンク): 2個の多項式を入力してその和を求め次数の大きい順に出力する [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual stadio2008 [3.3] 言語: C [4] 期限:2008年11月26日13:00まで
1] 授業単元: C [2] 問題文(含コード&リンク):二個の多項式を入力してその和を求め、次数の大きい順に出力する [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: visual stadio2008 [3.3] 言語: C [4] 期限: 2008年 11月27日13:00まで
140 :
72 :2008/11/19(水) 10:48:45
>>87 忙しい中どうもありがとうございます。
scanfでキーボードから文字列を読み込んで、putsを使わず
途中経過を表示させずに結果だけ表示させられませんかね?
たとえば「Person」と打ち込んで「PersonnosreP」とだけ表示させるプログラムが作りたいのですが。
#include<string.h>は使えます。補助する関数?は使っても使わなくてもいいです。
ご迷惑でなければもう一度お願いできないでしょうか。
最近のやつは注文が多いな
注文の多い宿題スレ と言うタイトルで著書を出版したいのですが、 よろしかったでしょうか?
助言を頂きたいです。問題内容と自分なりのプログラムは以下の通りです。 [問題] "Izumi","Kanto","Kudo","Sato","Sugawara","Matsuda","Wada"という7つの文字列の長さをカウントし、文字列とともに表示せよ。 [プログラム] #include<stdio.h> int main(){ char *name[] = {"Izumi", "Kanto", "Kudo", "Sato", "Sugawara", "Matsuda", "Wada", NULL}; int namelen[7] = {0, 0, 0, 0, 0, 0, 0}; int i = 0, j = 0; while(*(name + i)){ while(*(*(name + i) + j) != '\0'){ *(namelen + i) += 1; j++; } i++; } for(i = 0; i < 7; i++){ printf("文字列「%s」は%d文字です。\n", *(name + i), *(namelen + i)); } return 0; } 「楽勝♪」と思ったのですが、文字列の長さがどうも誤って表示されます。 この方向でよいと思うのですが…。
jがリセットされてない
あ…本当でした、お恥ずかしいorz
147 :
help me :2008/11/19(水) 18:06:03
[1] 授業単元:C言語 [2]問題1 キーボードから数値を何回も読み込み、常に過去五回分の数値の平均値と 合計値を表示し続け、負の実数を入力すると停止するプログラムを作成せよ。データの型は実数とする。 (なんかはじめの六回目の入力までは変な値が出力されてもいいらしいです。) 問題2 main()関数で使用しているローカル変数の値を、ユーザー定義関数内で書き換えるプログラムを、 ポインタを使用して作成せよ。printf等で出力すること。 [3] 環境 [3.1] OS Linux [3.3] 言語:C [4] 期限: ([11月22日まで] 二つも質問してすみません。よろしくお願いします。
148 :
デフォルトの名無しさん :2008/11/19(水) 18:06:24
[1] 授業単元:C++ [2] 問題文(含コード&リンク): (1)main関数の中で、要素数5個の配列変数を宣言する。この5個の要素に対して、 次のような計算をして、その結果をもとの要素に戻すような関数calc()をポインタを用いて書きなさい。 1個めの要素に対しては、値を3増やす 2個めの要素に対しては、値を4倍する 3個めの要素に対しては、値を5減らす 4個めの要素に対しては、値を7で割る 5個めの要素に対しては、今までの4つの要素の元の値の総和を入れる (2)コマンドラインから、N個の数(数値)を入力して、個数とそれらの平均値を 出力するプログラムを作成しなさい。 [3] 環境 [3.1] OS:Linux [3.2] XEmacs [3.3] 言語:C++のみ [4] 期限:早急にお願いします [5] その他の制限:プログラミングを受業で習い始めて半年のレベルです。 よろしくお願いします。
標準ライブラリはつかっておk?stlとか
150 :
デフォルトの名無しさん :2008/11/19(水) 18:12:24
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 任意のフォルダを定期的に(例えば、20秒おきなど)チェックし、 フォルダ内にファイルが増えていたら、そのファイル名とファイル が作成された日時をログファイル(Log.txt)に書き込むプログラム を作成せよ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン:Visual Studio 2005 [3.3] 言語: C [4] 期限: 2008年11月23日まで よろしくお願い致します。
151 :
デフォルトの名無しさん :2008/11/19(水) 18:12:48
ありがとうございました。何とか提出することができました。
152 :
デフォルトの名無しさん :2008/11/19(水) 18:14:11
>>148 (1)
#include<iostream>
const int DATA_NUM=5;
void calc(double data[DATA_NUM]){
data[4]=data[0]+data[1]+data[2]+data[3];
data[0]+=3;
data[1]*=4;
data[2]-=5;
data[3]/=7;
}
int main(void){
double data[DATA_NUM]={1.0, 2.0, 3.0, 4.0, 5.0};
for(int i=0;i<DATA_NUM;i++) std::cout << data[i] << std::endl;
calc(data);
for(int i=0;i<DATA_NUM;i++) std::cout << data[i] << std::endl;
return 0;
}
>>148 (2)
#include<iostream>
int main(void){
int N=0;
double value, average=0.0;
std::cout << "Input N : ";
std::cin >> N;
for(int i=0;i<N;i++){
std::cout << "Input data[" << i << "] : ";
if(!(std::cin >> value)){
std::cerr << "\nERROR : Unknown input.\n";
return 1;
}
average=(average*i+value)/(i+1);
}
std::cout << "N=" << N << " average=" << average << std::endl;
return 0;
}
>>147 問題1
#include <stdio.h>
int main(void)
{
double v[5] = {0.0};
int i = 0, j;
double sum;
while (1) {
printf("input: "); scanf("%lf", &v[i%5]);
if (v[i%5] < 0) {
break;
}
sum = 0.0;
for (j = 0; j < 5; j++) {
sum += v[j];
}
printf("sum: %f\n", sum);
printf("average: %f\n", sum / 5);
i++;
}
return 0;
}
>>147 問題2 はこんなのでいいのか?
#include <stdio.h>
void inc(int *a)
{
(*a)++;
}
int main(void)
{
int i = 1;
printf("i = %d\n", i);
inc(&i);
printf("i = %d\n", i);
return 0;
}
157 :
148 :2008/11/19(水) 18:40:33
>>157 最初の方のエラーの内容を張ってみてよ
C++-- っておちだろうけど
160 :
help me :2008/11/19(水) 19:50:08
162 :
デフォルトの名無しさん :2008/11/19(水) 20:04:58
>>148 の者ですがC++というのは間違いでただのCでした。
もう一度お願いします
164 :
デフォルトの名無しさん :2008/11/19(水) 21:36:20
本当にその通りだと思います。 すみませんでした。 でも本当に困ってるのでお願いします。
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): ユークリッドの互除法を用いて最大公約数を求めるプログラムを作成する。 ただし,最大公約数を見つける部位は関数を用いる(例 kouyaku(int x, int y)など) また,2数はどちらが大きな場合でも対応できるようにする。 例えば 入力を 24,30 とする場合も 30,24とする場合も どちらも 最大公約数 6 と表示できること。 main関数では 2つの数を入力すること および kouyaku()関数に2つの数を渡して 最大公約数を計算させ,最終結果を表示させる内容を行う。 [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月26日12:00まで [5] その他の制限:関数は習い始めたばかりです。よろしくお願いします。
166 :
デフォルトの名無しさん :2008/11/19(水) 21:51:05
167 :
デフォルトの名無しさん :2008/11/19(水) 22:11:20
>>165 int kouyaku(int x, int y)
{
int t;
do {
if(x<y){
t=x; x=y;y=t;
}
x -= y;
}while(x);
return y;
}
#include <stdio.h> int kouyaku(int x, int y) { int t; do { if(x<y){ t=x; x=y;y=t; } x -= y; }while(x); return y; } int main() { int x,y,yakusuu; puts("x入力");scanf("%d",&x); puts("y入力");scanf("%d",&y); yakusuu = kouyaku(x, y); printf("x = %d, y = %dの最大公約数は%d\n",x,y,yakusuu); return 0; }
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): void main() { int i,j,data[5][4]; for (j=0;j<=3;j++){ data[4][j]=0; } for (i=0;i<=3;i++){ data[i][3]=0; for (j=0;j<=2;j++){ printf("data[%d][%d]=",i,j); scanf("%d",&data[i][j]); data[i][3]+=data[i][j]; data[4][i]+=data[i][j]; data[4][3]+=data[i][j]; } } for(i=0;i<=4;i++){ for(j=0;j<=3;j++){ printf("%4d",data[i][j]); } printf("\n"); } }
これを↓のように表示するように改良する 右下の合計と平均の文字は要りません 国語 数学 英語 |合計 |平均 75 35 40 | | 69 75 82 | | 57 48 36 | | 30 60 50 | | ------------------------------------- 合計 | 平均 | [3] 環境:ポケコンに打つんでよく分かりません [4] 期限:12月1日 [5] その他の制限:特になし お願いします
171 :
デフォルトの名無しさん :2008/11/19(水) 23:36:03
すいません
>>21 のものですがよろしくお願いします。
172 :
デフォルトの名無しさん :2008/11/20(木) 07:31:10
こんなプログラム作ってもらえませんか?^^; 今日中なんですが 『三つの数値を入力(繰り返し入力)し、小さい順に表示する』
174 :
デフォルトの名無しさん :2008/11/20(木) 08:38:21
[1]C言語 [2]三つの数値を入力(繰り返し入力)し、小さい順に表示する [3] [3.1]XP [3.2]C言語 [4]今日まで(^∈^;) テンプレ見て直してみました
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
例をもとに指定した生徒の3科目の平均点を表示するプログラムを作成せよ
実行例
生徒IDを入力してください: 2 ↓
平均点は65.3点
例は
>>176 です。
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月24日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子
配列の初期化、2次元配列は習いました。
お願いします。
例:成績データを表示する #include <stdio.h> int main(void) { int data[ ][5] = { { 82, 98,41, 86,70}, { 42, 99,92, 69,62}, { 84, 54,63,100,70}}; int subject, student, sum; double ave; for (subject=0; subject<=2; subject++) { switch (subject) { case 0: printf("国語\n"); break; case 1: printf("数学\n"); break; case 2: printf("英語\n"); } sum = 0; for (student=0; student<=4; student++) { printf("生徒%dの点数は%d点\n",student,data[subject][student]); sum += data[subject][student]; } ave = sum / 5.0; printf("科目平均は%.1f点\n", ave); } return 0; }
[1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク): コマンドライン引数で与えられた数字の列を足し算するプログラムsumを作れ。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年11月21日まで [5] その他の制限:文字列をint型に直すのにはatoi()関数を使う。 よろしくおねがいします。
178 :
デフォルトの名無しさん :2008/11/20(木) 10:16:31
>>177 #include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
int i, sum;
sum = 0;
for(i = 1; i < argc; i++) sum += atoi(argv[i]);
printf("sum = %d\n", sum);
return 0;
}
179 :
デフォルトの名無しさん :2008/11/20(木) 10:54:28
>>148 の者ですが、今日中に提出なのでお願いします。
C++と書いたのですが、ただのCでお願いします。
本当に困ってます。
180 :
デフォルトの名無しさん :2008/11/20(木) 11:03:22
>>148 /*(1)*/
#include <stdio.h>
void calc(int *p){
int a[5];
a[0] = p[0] + 3; a[1] = p[1] * 4;
a[2] = p[2] - 5; a[3] = p[3] / 7;
a[4] = p[0] + p[1] + p[2] + p[3];
}
int main(void){
int i;
int a[5] = {11,12,13,14,15};
calc(a);
for(i = 0; i < 5; i++) printf("a[%d] = %d\n", i, a[i]);
}
/*(2)*/
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]){
int i, sum;
sum = 0;
for(i = 1; i < argc; i++) sum += atoi(argv[i]);
printf("個数: %d, 平均値: %lg\n", argc - 1,
(double)sum / (argc - 1));
}
181 :
デフォルトの名無しさん :2008/11/20(木) 11:04:27
間違えた。訂正: void calc(int *p){ int a[5]; a[0] = p[0] + 3; a[1] = p[1] * 4; a[2] = p[2] - 5; a[3] = p[3] / 7; a[4] = p[0] + p[1] + p[2] + p[3]; p[0] = a[0]; p[1] = a[1]; p[2] = a[2]; p[3] = a[3]; p[4] = a[4]; }
182 :
デフォルトの名無しさん :2008/11/20(木) 11:14:07
>>174 #include <stdlib.h>
#include <stdio.h>
int compare(const void *a, const void *b){
if (*(double*)a < *(double*)b) return -1;
if (*(double*)a > *(double*)b) return 1;
return 0;
}
int main(void){
int i;
double a[3];
i = 0;
printf("%d個目の数値: ", i + 1);
scanf("%lf", &a[i]);
i++;
printf("%d個目の数値: ", i + 1);
scanf("%lf", &a[i]);
i++;
printf("%d個目の数値: ", i + 1);
scanf("%lf", &a[i]);
i++;
qsort(a, 3, sizeof(double), compare);
for(i = 0; i < 3; i++) printf("%lg\n", a[i]);
return 0;
}
183 :
デフォルトの名無しさん :2008/11/20(木) 11:55:07
185 :
デフォルトの名無しさん :2008/11/20(木) 15:19:55
186 :
177 :2008/11/20(木) 16:12:44
>>178 早速ありがとうございます。助かりました。
>>184 第1問
#include <stdio.h>
int main(void)
int *p;
printf("%p\n", p);
p = p+1;
printf("%p\n", p);
return 0;
}
第2問
#include <stdio.h>
void func(int sec, int *hh, int *mm, int *ss)
{
*hh = sec / 3600;
*mm = (sec % 3600)/60;
*ss = sec % 60;
}
int main(void)
{
int hh, mm, ss;
int sec = 3800;
func(sec, &h, &m, &s);
printf("%d秒 = %2d時間%2d分%2d秒\n", sec, h, m, s);
return 0;
}
188 :
デフォルトの名無しさん :2008/11/20(木) 18:27:55
[1] C言語 [2] 構造体の配列 構造体のデータを得点で昇順に並び変えてください [3] 環境 [3.1] Windows vista [3.2] マイクロソフトヴィジュアルスタジオ [3.3] 言語: C/ [4] 期限: ([2008年11月21日17;00まで] [5] プリプロセッサ 、ファイル処理、操作 供用体 データ変換型 記憶クラス は習っていません。 よろしくお願いいたします。
189 :
188 :2008/11/20(木) 18:28:51
最初の方の宣言文です # include<stdio.h> struct tmp{ char name[20]; int bangou; int ten; }; void main(void) { { struct tmp data[10]={{"山田",50113,87}; {"浜名",30211,60}; {"飯田",56231,58}; {"岡田",50215,30}; {"今田",60987,89}; {"原田",57892,75}; {"有田",53901,55}; {"清原",53098,72}; {"神山",56221,71}; {"上原",12345,100}; }}
>>187 ちょっとミス。
func(sec, &h, &m, &s);
printf("%d秒 = %2d時間%2d分%2d秒\n", sec, h, m, s);
は、正しくは
func(sec, &hh, &mm, &ss);
printf("%d秒 = %2d時間%2d分%2d秒\n", sec, hh, mm, ss);
ね。
>>184 第3問
#include <stdio.h>
#define N 10
int main(void)
{
int a[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *pa = a;
int i;
int sum = 0;
for (i = 0; i < N; i++) {
sum += *pa;
pa++;
}
printf("sum = %d\n", sum);
return 0;
}
>>184 第4問
#include <stdio.h>
#include <math.h>
#define YPSILON 1e-5
int eq(double a, double b, double c, double *x, double *y)
{
double d = b*b - 4*a*c;
if (fabs(d) < YPSILON) {
*x = *y = (-b+sqrt(d))/(2*a);
return 1;
}
if (d < 0) {
return 0;
}
else {
*x = (-b+sqrt(d))/(2*a);
*y = (-b-sqrt(d))/(2*a);
return 2;
}
}
int main(void)
{
double x, y;
int r;
r = eq(1.0, -4.0, 3.0, &x, &y);
printf("%g, %g\n", x, y);
return 0;
}
>>188 #include <stdio.h>
#include <stdlib.h>
struct tmp{
char name[20];
int bangou;
int ten;
};
int comp(const void *a, const void *b)
{
struct tmp *x = (struct tmp *)a;
struct tmp *y = (struct tmp *)b;
if (x->ten > y->ten) return 1;
else if (x->ten < y->ten) return -1;
else return 0;
}
int main(void)
{
int i;
struct tmp data[10]={{"山田",50113,87}, {"浜名",30211,60}, {"飯田",56231,58}, {"岡田",50215,30},
{"今田",60987,89}, {"原田",57892,75}, {"有田",53901,55}, {"清原",53098,72},
{"神山",56221,71}, {"上原",12345,100}};
qsort(data, 10, sizeof(data[0]), comp);
for (i = 0; i < 10; ++i) printf("%s %8d %3d\n", data[i].name, data[i].bangou, data[i].ten);
return 0;
}
193 :
188 :2008/11/20(木) 19:32:01
ありがとうございます! この恩は忘れません!
>>166 そんなに長くなるのですか・・・
できれば
>>139 を少し改良して短くできるものに変えれませんか?
各々の多項式で前と同じようリスト構造を作って2つのリスト構造を先頭から見ながら、別の構造リストを作っていくみたいな・・・
なんて言えばいいんだろう^^;あとから条件みたいなの出してすいません
心配しなくても、バレる。 毎回名前の付け方や解き方が変わったり、 基本的なことが全然わかってなければ答えは一つ。
>>195 #include <stdio.h>
int sabun ( int x, int y )
{
return (x>y)?(x-y):(y-x) ;
}
void main(void)
{
int x, y ;
printf ( "xの値を入力してください->" ) ;
scanf ( "%d", &x ) ;
printf ( "yの値を入力してください->" ) ;
scanf ( "%d", &y ) ;
printf ( "%dと%dの差の絶対値は%d\n", x, y, sabun(x,y) ) ;
}
>>195 (1)
#include <stdio.h>
double subun(double x, double y)
{
return x > y ? x-y : y-x;
}
int main(void)
{
double x, y;
printf("x = "); scanf("%lf", &x);
printf("y = "); scanf("%lf", &y);
printf("subun(%f, %f) = %f\n", x, y, subun(x, y));
return 0;
}
(2)
#include <stdio.h>
int gokei(int n)
{
return n > 1 ? n+gokei(n-1) : 1;
}
int main(void)
{
int n = 100;
printf("gokei(%d) = %d\n", n, gokei(n));
return 0;
}
199 :
195 :2008/11/20(木) 22:08:45
200 :
デフォルトの名無しさん :2008/11/20(木) 23:50:16
[1] 授業単元: 基本情報処理 [2] 問題文: forを使って100以下の素数を求めて表示するプログラムを作れ [3] 環境 [3.1] WinXP [3.2] 不明 [3.3] C言語 おねがいします
>>200 #include <stdio.h>
int main(void)
{
int i, j;
for (i = 2; i <= 100; i++) {
for (j = 2; j < i; j++) {
if (i%j == 0) break;
}
if (i == j) {
printf("%dは素数\n", i);
}
}
return 0;
}
203 :
デフォルトの名無しさん :2008/11/21(金) 01:00:12
[1] プログラミング実習: [2] 年月を与えて,その月のカレンダーを表示するプログラム mycalを作成せよ。: [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: cc -o [3.3] 言語: C言語 [4] 期限:明後日 [5] その他の制限:isleapyearとdayofweekを使用 この関数は作ってあります お願いします
>>203 できるわけねーだろwwwwwwwwwwwwwww
205 :
デフォルトの名無しさん :2008/11/21(金) 01:24:28
[1] 授業単元:計算機プログラミングU [2] 問題文(含コード&リンク): 関数mainにおいて,下記のような文字列を定義する. char *name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL}; 上記の文字列をアルファベット順に並べ替える関数を作成し,その結果を表示するプログラムを作成せよ. ヒント:文字列の比較のために関数strcmpを使用する. #include <string.h> int strcmp(const char *str1,const char *str2); 【戻り値】str1 > str2 ならば正値(1) str1 = str2 ならば0 str1 < str2 ならば負値(-1) [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc(できればVisual C++でも動くように) [3.3] 言語:C [4] 期限:2008年11月27日10:30まで [5] その他の制限:まだ初歩の段階です。やっとポインタの基礎を習い終わったところです。
>>205 #include<stdio.h>
#include<string.h>
void sort_name(char **name) {
char **i, **j, *tmp;
for (i = name; *i; i ++) {
for (j = i + 1; *j; j ++) {
if (strcmp(*i, *j) > 0) {
tmp = *i; *i = *j; *j = tmp;
}
}
}
}
int main() {
char *name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL};
char **p;
sort_name(name);
for (p = name; *p; p ++) {
printf("%s\n", *p);
}
return 0;
}
207 :
デフォルトの名無しさん :2008/11/21(金) 01:54:05
お願いします。 [1] 授業単元: プログラミングU [2] 問題文(含コード&リンク): 以下のデータを配列を初期化した後に入れ、各行各列の最大値をそれぞれ求めよ。 データ 1.1 2.4 0.9 2.3 1.9 1.0 2.2 0.7 0.3 1.8 1.7 0.2 0.8 0.4 2.5 1.5 0.9 2.4 0.9 1.6 1.7 1.6 0.4 1.4 [3] 環境 [3.1] OS: windows XP [3.2] コンパイラ名とバージョン:borland bcc38? [3.3] 言語: C言語 [4] 期限: 2008年11月21日12:00 [5] その他の制限:特にありません。ただ、ド素人同然の知識しかありません。
[1] 授業単元: C [2] 問題文: 二つの整数m,nを入力し a*m+b*n=gcd(m,n) のa,bを求めるプログラム [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:11月21日08:00まで] [5] その他の制限:特になし よろしくお願いします。
gcd(m,n)が最大公約数を求める関数だとして a, b が一意に定まらないんだけど一体どうしろと? 関係式吐けばいいのか?
>>209 12と18を入力した際に
12a+18b=gcd(12,18)
a=-1 b=1 といった感じになるのですが…
>>210 一個適当に吐けばいいのかな?
無限個あるから列挙は無理なんでどうしたらいいかな
>>211 それも解です。
でも出来るだけ最小値で出してもらえたら嬉しいです。
後付けみたいな頼みごとですみません;
>>213 a,bを最小化する評価関数は何? |a|+|b|とかa^2+b^2とか
そして問題ではa,bについて整数であるとは書いていないが実数なのか整数に制約されているのか
1より-4のほうが小さい
>>215 評価関数…
そういうのががいてないのですが。
r= n mod m とする
r= n - m「n/m」
¬r * r + ¬m * m = gcd(r,n) とする
¬r(n - m「n/m」) + ¬m * m = gcd(m,n)
(¬m -「n/m」¬r) m + ¬r = gcd(m,n)
このとき
(¬m -「n/m」¬r) = a
¬r = b
「」内の少数は切り捨て
謎のメモが残ってました。役に立つでしょうか?
整数に制約されてます。(0≦m<n)
>>216 あ。ほんとですね;
#include <stdio.h> void swap (int *a, int *b) { int t = *a; *a = *b; *b = t; } int gcd(int x, int y) { if (x < y) swap(&x, &y); x %= y; if (x == 0) return y; else return gcd(y, x); } int main() { int x, y, g, a; scanf("%d %d", &x, &y); g = gcd(x, y); printf("a = "); scanf("%d", &a); printf(" b = %f\n", (g - (double)x * a) / y); return 0; } とりあえず適当に作ったよ スペース区切りで gcd(m, n)の引き数を入力 そのあとa の値を入力する形で
あ、修正です; m,nは(0≦m<n)で整数のみですが、 a,bは実数でした;
220 :
デフォルトの名無しさん :2008/11/21(金) 13:57:51
t=0.0; a=2.0,b=0.0,c=0.0,d=0.5; を double t=0.0; double a=2.0,b=0.0,c=0.0,d=0.5; したら動くかもね 確認して無いけど
ごめん t=0.0; a=2.0,b=0.0,c=0.0,d=0.5; を t=0.0; double a=2.0,b=0.0,c=0.0,d=0.5; だった
223 :
220 :2008/11/21(金) 14:06:56
224 :
220 :2008/11/21(金) 14:11:32
結果は変わらずでした(泣)
言語: C/C++/どちらでも可 とかいてあるけどそのソースの拡張子は .cと.cppのどっちなんだ? .cなら output=fopen("planet.data","w"); より上の行に double a, b, c, d ;
226 :
220 :2008/11/21(金) 14:28:49
このソースはたぶん.cです。 やってみます!
227 :
220 :2008/11/21(金) 14:33:53
コンパイルしたら、warning C4700: 初期化されていないローカル変数 't0'が使用されます って13個ぐらい出てきました。あと、 kenkyuu.obj : error LNK2019: 未解決の外部シンボル _runge が関数 _main で参照され ました。 kenkyuu.obj : error LNK2019: 未解決の外部シンボル _g2 が関数 _main で参照されま した。 kenkyuu.obj : error LNK2019: 未解決の外部シンボル _f2 が関数 _main で参照されま した。 kenkyuu.obj : error LNK2019: 未解決の外部シンボル _g1 が関数 _main で参照されま した。 kenkyuu.obj : error LNK2019: 未解決の外部シンボル _f1 が関数 _main で参照されま した。 kenkyuu.exe : fatal error LNK1120: 外部参照 5 が未解決です。ってのも出てきました。
>>227 f1関数とか呼び出してるんだけど無いから無理と言われてる
実際無いので当然無理
>>227 とりあえず問題文を「全部」晒すんだ
話はそれからだ
230 :
220 :2008/11/21(金) 14:42:53
それが原因ですか。了解です。ありがとうございます。
どなたか
>>175 をやっていただけないでしょうか?
232 :
220 :2008/11/21(金) 14:49:09
>>229 問題文ってか出力結果が、
惑星の運動
初期時間:t= 0.000の時,x= 2.000 y=0.000000,v_x= 0.000 v_y= 0.500
計算結果:t= 50.000の時、x= 1.659,y= 0.771,v_x= -0.421v_y= 0.407
ってなるようなプログラムを作れってことです(先ほどうpしたプログラムを少し変えて)。
233 :
220 :2008/11/21(金) 14:55:53
>>219 やっぱり条件あった。
小出しにすると解いてもらえないよ。
>>231 int main(void)
{
int data[][5] = {
{82,98,41,86,70},
{42,99,92,69,62},
{84,54,63,100,70},
};
int subject,student,sum;
double ave;
int id;
printf("生徒IDを入力してください:");
scanf("%d",&id);
if(id < 0 || id > 4){
printf("IDが不正");
return -1;
}
for(subject=0,sum=0;subject<=2;subject++){
sum += data[subject][id];
}
ave = sum / 3.0;
printf("平均点は%.1f点\n",ave);
return 0;
}
>>235 大変助かりました。
本当に有難う御座いました。
237 :
220 :2008/11/21(金) 15:53:36
どこにどういう関数宣言をすればいいか初心者なので全く分かりません。 誰か教えてください。エラーが出てた初期化の部分はできました。
[1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): ・入力された文字の種類を判別して表示するプログラムを作成せよ -数字 -アルファベット大文字 -アルファベット小文字 -それ以外 ・それぞれの文字コードが連続していることを利用 実行例 文字を入力: 5 ↓ 数字です 文字を入力: J ↓ アルファベット大文字です 文字を入力: + ↓ その他の文字です [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月24日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子 配列の初期化、2次元配列、文字コード、文字データ(char型) getchar、putcharは習いました。 お願いします。
>>237 関数の中身を書かなければ動きませんが、
情報が少なすぎて書ける人間はいないでしょう
諦めてください
240 :
220 :2008/11/21(金) 16:00:48
わかりました。残念です。でももし出来た人がいたならば教えてください。
>>238 int main(void)
{
int c;
printf("文字入力:");
c = getchar();
if(c > 0x2f && c < 0x3a){
printf("数値\n");
}
else if(c > 0x40 && c < 0x5b){
printf("アルファベット大文字\n");
}
else if(c > 0x60 && c < 0x7b){
printf("アルファベット小文字\n");
}
else{
printf("その他\n");
}
return 0;
}
>>241 大変助かりました。
本当に有難う御座いました。
[1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): ・入力された文字がアルファベット大文字ならば小文字に、小文字ならば大文字に変換するプログラムを作成せよ -大文字:0x41(A)〜0x5A(Z) -小文字:0x61(a)〜0x7A(z) ・それぞれの文字コードの差が一定な事を利用 実行例 文字を入力: J ↓ j 文字を入力: t ↓ T [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月24日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子 配列の初期化、2次元配列、文字コード、文字データ(char型) getchar、putcharは習いました。 お願いします。
>>243 int main(void)
{
int c;
printf("文字入力:");
c = getchar();
if(c > 0x40 && c < 0x5b){
c += 0x20;
}
else if(c > 0x60 && c < 0x7b){
c -= 0x20;
}
else{
printf("アルファベットではない\n");
}
printf("%c\n",c);
return 0;
}
>>244 大変助かりました。
本当に有難う御座いました。
>>240 同じ授業を受けてない限り、原理的に不可能というのはわかる?
>>248 #include<stdio.h>
int main(void)
{
int a,b=10000, c = 10000,d=0,e;
printf("返すべき元利合計(万円);");
scanf("%d",&a);
a *=10000;
for(;;){
b *= 1.1;
if(a < b) break;
c = b;
d++;
}
printf("最大年数;%d\n",d);
printf("返却金額;%d\n",c);
return 0;
}
しかい本当にint でいいのか?これ
250 :
デフォルトの名無しさん :2008/11/21(金) 18:14:41
>>206 ちなみに質問ですが,**ってなんですか??
ポインタのポインタ
252 :
デフォルトの名無しさん :2008/11/21(金) 18:49:00
単元:というか質問 環境:Windows コンパイラ:gccかVC++ 言語:c++ 期限:まあ適当に "IUnko.h" class IUnko{ public: virtual ~IUnko() =0; virtual operator int() =0; virtual IUnko& operator++() =0; virtual IUnko operator++(int) =0; }; IUnko::~IUnko() {}; "Unko.h" #inlude "IUnko.h" class CUnko : public IUnko{ private: int mVal; public: operator int() { return mVal; }; CUnko& operator++(){ mVal++; return *this; }; CUnko operator++(int){ CUnko tmp = *this; mVal++; return tmp; }; }; これがダメな理由を教えてください。 演算子のオーバーロードは抽象クラスには書けないですか?
>>252 1.戻り型がIUnkoとなっている operator++(int) は作成不能
2.継承クラスCUnkoで戻り型がCUnkoに化けている
>>253 うーん、こう変更すればOKですか?
virtual IUnko& operator++(int) =0;
CUnko& operator++(int){ static CUnko tmp = *this; mVal++; return tmp; };
>>249 オレは
>>248 じゃないが全部doubleでやったほうがいいと思うぞ
int b;
で
b *= 1.1;
とかは無謀すぎる
b *= 1 と同義だな
|
|
∩___∩ |
| ノ _, ,_ ヽ (( | プラプラ
/ ● ● | (=)
| ( _●_) ミ _ (⌒) J ))
彡、 |∪| ノ
>>257 ⊂⌒ヽ / ヽノ ヽ /⌒つ
\ ヽ / ヽ /
\_,,ノ |、_ノ
260 :
257 :2008/11/22(土) 00:56:07
吊ってくる
261 :
248 :2008/11/22(土) 01:54:16
>>249 おお こんなに早くに片付けてくれてましたか
ありがとうございます!
小数点切捨てなのでintでいいと思うのです
>>261 >>248 のに合わせて全部intにしてみたんだけど
複利計算の途中で一円以下の金額が発生して、それにも利子が付くというのは分かるかな?
問題文見た感じでは最終結果だけ小数点切捨てのように見えるからこっちが正しいんじゃないかな
#include<stdio.h>
int main(void)
{
int a, d=0;
double b=10000, c = 10000;
printf("返すべき元利合計(万円);");
scanf("%d",&a);
a *=10000;
for(;;){
b *= 1.1;
if(a < b) break;
c = b;
d++;
}
printf("最大年数;%d\n",d);
printf("返却金額;%d\n", (int)c);
return 0;
}
一桁ずらして11倍にするとかどうだろう?
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 入力した文字列(A,B,C,Dからなる文字列)から、それぞれの文字数を出力するプログラム を作成せよ。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン:Visual Studio 2005 [3.3] 言語: C [5] その他の制限:getcharを使わずscanfを用いる。switch文を用いる。 例) 文字列を入力してください:AABCD A:2個 B:1個 C:1個 D:1個 よろしくお願い致します。
>>264 #include <stdio.h>
int main(void)
{
char str[100];
int a = 0, b = 0, c = 0, d = 0;
int i;
printf("文字を入力してください:");
scanf("%s", str);
for (i = 0; (str[i] != '\n') && (str[i] != '\0'); i++) {
switch (str[i]) {
case 'A':
a++;
break;
case 'B':
b++;
break;
case 'C':
c++;
break;
case 'D':
d++;
break;
default :
break;
}
}
printf("A:%d個\nB:%d個\nC:%d個\nD:%d個\n", a, b, c, d);
return 0;
}
[1]授業単元;プログラミング [2]問題文 キーボードから任意の数字(a,b)を2つの キーボードに入力し,a〜bの総和と aのb乗を計算するプログラムを作成しなさい。 例 a=2 b=5なら 2+3+4+5=14 2^5=32 [3] [3.1]OS:XP [3.2]コンパイラとパーテンション:vc6.0 [4]期限:2008/11/27 [5]その他 double使うのはわかったんですが後がわかりませんお願いします
>>266 #include<stdio.h>
int main(void)
{
int a, b, i, sum = 0, pow = 1;
printf("a = ");
scanf("%d", &a);
printf("b = ");
scanf("%d", &b);
pow = a;
for (i = a; i < b; ++i) {
printf("%d + ", i);
sum += i;
pow *= a;
}
printf("%d ", i);
sum += i;
pow *= a;
printf("= %d\n", sum);
printf("%d^%d= %d\n",a, b, pow);
return 0;
}
>>266 #include <stdio.h>
int main(void)
{
int a, b;
int i;
int sum = 0;
double exp = 1.0;
printf("a = ");
scanf("%d", &a);
printf("b = ");
scanf("%d", &b);
for (i = a; i <= b; i++) {
sum += i;
}
for (i = 0; i < b; i++) {
exp *= a;
}
printf("%dから%dまでの総和は%d\n%dの%d乗は%.0f\n", a, b, sum, a, b, exp);
return 0;
}
271 :
デフォルトの名無しさん :2008/11/22(土) 17:19:57
270 名前:デフォルトの名無しさん 投稿日:2008/11/22(土) 15:27:40
>>268 間違ってるぞ死ねゴミ野郎
274 :
デフォルトの名無しさん :2008/11/22(土) 21:23:43
2重あるいは、3重、4重・・・のループを抜けるにはどうすればよいでしょうか。 1つのループだったら、breakで抜けられると思うのですが・・・
goto
break連鎖 しかし4重ループとかのソースは見たくない
ラベルとgoto
278 :
274 :2008/11/22(土) 21:54:23
>>275 ,276,277
ありがとうございました。
279 :
デフォルトの名無しさん :2008/11/22(土) 22:23:51
[1] 授業単元:プログラミング2 [2] 問題文(含コード&リンク): ・コマンドライン引数を用いプログラムの実行時に,コピー元とコピー先のファイル名が指定できること. ・strcmpを使いコピー元のファイル名とコピー先のファイル名が同じかどうかを判定し,同じ場合には,strcatを使いコピー先のファイル名をファイル名1と変更する処理を書け. (例) 「file」を「file1」とかにする.単にファイル名に1を加えるだけ.) これらの条件を満たしたFile Aの内容をFile Bへコピーするプログラムを作成せよ. [3] 環境 [3.1] OS:Linux [3.2] コンパイラとバージョン: gcc [3.3] 言語: C [4] 期限: [11月25日 よろしくおねがいします。
ファイル名違ってたらstrcmp() != 0にならね?
281 :
デフォルトの名無しさん :2008/11/22(土) 22:30:04
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 名前,年齢,身長,体重,性別(M:男性,F:女性)のデータファイルより、以下のことを行なうプログラムを作成せよ. コマンドライン引数を導入し,データファイルと出力ファイル,実行モードを指定せよ. 使い方> ./a.out 入力ファイル名 出力ファイル名 モード 使い方> ./a.out personal_data.txt result.txt 1 実行モードとして,下記三つのモードを用意せよ 1. 男性のデータのみをファイルに書き込む 2. 女性のデータのみをファイルに書き込む 3. 全員のデータをファイルに書き込む ※ 書き込む場合は,名前,身長,体重,年齢の順とする. データファイルから,全員 分のデータを読み込む.ただし,データの終わりを判定して,読み込みを終了すること. 全員分のデータを標準出力に出力する. personal_data.txt ↓ 名前 年齢 身長 体重 性別 A 18 175.8 62.3 M B 23 154.2 49.5 F C 28 180.1 75.2 F D 32 169.5 59.8 M E 35 158.4 54.3 F F 40 175.8 80.9 M [3] 環境 [3.1] OS:Linux [3.2] コンパイラとバージョン: gcc [3.3] 言語: C [5] fprint/fgets/sscanfなどは習いましたがstrtok/atof/fputsなどは習っていません。
>>279 #include <stdio.h>
#include <string.h>
char buf[10000];
int main(int argc, char *argv[]){
char *src, *dst, *p = buf;
int bufsize = sizeof(buf);
size_t readbytes;
FILE *srcfp, *dstfp;
if(argc < 3) return -1;
src = argv[1];
dst = argv[2];
if(0 == strcmp(src, dst)){
int len;
strcpy(buf, dst);
strcat(buf, "1");
dst = buf;
len = strlen(buf) + 1;
bufsize -= len;
p += len;
}
if(!(srcfp = fopen(src, "rb"))) return -1;
if(!(dstfp = fopen(dst, "wb"))){fclose(srcfp); return -1;}
while( 0 < (readbytes = fread(p, 1, bufsize, srcfp)))
fwrite(p, 1, readbytes, dstfp);
fclose(srcfp);
fclose(dstfp);
return 0;
}
>>281 #include <stdio.h>
#include <stdlib.h>
#define file_open(fp, fname, mode, errno) do { \
if ((fp = fopen(fname, mode)) == NULL) { fprintf(stderr, "%sがオープンできません。\n", fname); \
exit(errno); } } while (0)
int main(int argc, char *argv[])
{
FILE *fpw, *fpr;
char ss[500], format[300];
char s[5][1000] = {""};
if (argc != 4) return 1;
switch (argv[3][0]) {
case '1': sprintf(format, "%%s %%s %%s %%s %%[%c]", 'M'); break;
case '2': sprintf(format, "%%s %%s %%s %%s %%[%c]", 'F'); break;
case '3': sprintf(format, "%%s %%s %%s %%s %%[%s]", "MF"); break;
default: exit(4);
}
file_open(fpr, argv[1], "r", 2);
file_open(fpw, argv[2], "w", 3);
while (fgets(ss, 500, fpr)) {
if (sscanf(ss, format,
s[0], s[1], s[2], s[3], s[4]) == 5) {
fprintf(fpw, "%s %s %s %s\n", s[0], s[2], s[3], s[1]);
}
}
fclose(fpr); fclose(fpw);
return 0;
}
284 :
デフォルトの名無しさん :2008/11/22(土) 23:43:23
>>282 を書いてくれた方、ありがとうございます。
今さらで申し訳ありませんが
sizeof()・fread()・fwrite・fopenのrb・wbのbを習っていません…
これらを使わずにできますか?
またstrlenも使わないでもできますか?
すいません… おねがいします。
>>284 入力ファイルと出力ファイルが変化する危険が生じることになるがいいか?
>>284 > fwrite・fopenのrb・wbのbを習っていません…
コピーするファイルが、必ずしもテキストファイルとは限らんし、
テキストファイルでもrb,wbで問題なく処理できるんだが・・・
さすがに、習っていなくても、fopenを習ったのなら、あとは自分で調べて
使っても問題ないのでは?
>>284 #include <stdio.h>
#include <string.h>
#define BUFSIZE 10000
char buf[BUFSIZE];
int main(int argc, char *argv[]){
char *src, *dst, *p = buf;
int bufsize = BUFSIZE;
size_t readbytes;
FILE *srcfp, *dstfp;
if(argc < 3) return -1;
src = argv[1]; dst = argv[2];
if(0 == strcmp(src, dst)){
int len;
strcpy(buf, dst); strcat(buf, "1");
dst = buf;
for(p=dst; *p; p++);
bufsize -= (int)(p-buf);
p++;
}
if(!(srcfp = fopen(src, "r"))) return -1;
if(!(dstfp = fopen(dst, "w"))){fclose(srcfp); return -1;}
while( 0 < (readbytes = fread(p, 1, bufsize, srcfp)))
fwrite(p, 1, readbytes, dstfp);
fclose(srcfp); fclose(dstfp);
return 0;
}
環境が linux なら、 b は単純に消せばいい。ただしその場合、Windowsでの動作は保障されない。
「習ってないから使うな」とかアホなこと書く前にテキストを読んどけ。せっかくある便利な道具を封じたら、
難易度上がるんだよ? 分かってる? その上で初心者向きじゃないとか文句言わないでね。
それすら判断できないんだろうけどw
288 :
287 :2008/11/23(日) 00:30:25
おっとみすった。 bufsize -= (int)(p-buf); は bufsize -= (int)(p-buf) + 1; としといて。
>>287 ごちゃごちゃ言って、
>>285 でレスしたのに、fread , fwrite を使ってるじゃん・・・
こりゃ失礼、読み落としてた。
手元のwindowsで動作したものでいいなら。 #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { FILE *fps, *fpd; char *src, *dst; char *cur; char buf[100] = {""}; if (argc < 3) return -1; src = argv[1]; dst = argv[2]; if (strcmp(src, dst) == 0) { cur = dst; while ( *cur != '.') cur++; strcat(buf, "1"); strcat(buf, cur); strcpy(cur, buf); } if ((fps = fopen(src, "r")) == NULL) return -1; if ((fpd = fopen(dst, "w")) == NULL) { fclose(fps); return -1; } while (fgets(buf, 100, fps) != NULL) { fputs(buf, fpd); } fclose(fps); fclose(fpd); return 0; }
ファイル名に直接strcapをしたら拡張子名が換わるがいいのかな?
>>293 それは自分も思った。ファイル名の後ろから . (ドット)を検出して、
それより前の文字に 1 を加えてから拡張子を結合させるようにする
コードを追加すべきかと。
296 :
デフォルトの名無しさん :2008/11/23(日) 01:14:02
C言語でカレンダープログラムを作成しています。 年月を与えて、その年月のカレンダーを表示させるプログラムです。 悩んでいるのは、そのプログラムを拡張して、年だけ与えたとき、 その年の12か月分のカレンダーを表示させるというものです。 月の入力があるかないかを判定すればできると思ったんですが、 どうプログラムすればいいかがわかりません。 助言願います。
>>296 入力がコマンドライン引数なら、引数の数で判断すればいい。
プログラム中なら、月の入力時に
「12か月分を表示するときは0を入力してください」なんかにすれば?
>>284 心配しなくてもバレるんだからちゃんと動く方もらっときな
>>295 そう思ってさっきのを修正
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
FILE *fps, *fpd;
char *src, *dst, *cur, buf[100] = {""};
int flag = 0;
if (argc < 3) return -1;
src = argv[1];
dst = argv[2];
if (strcmp(src, dst) == 0) {
cur = dst;
while ( *cur != '\0') {
if (*cur =='.') flag = 1;
cur++;
}
if (flag == 1) {
while (*cur != '.') cur--;
strcat(buf, "1");
strcat(buf, cur);
strcpy(cur, buf);
}
else strcat(dst, "1");
}
if ((fps = fopen(src, "r")) == NULL) return -1;
if ((fpd = fopen(dst, "w")) == NULL) {
fclose(fps);return -1;
}
while (fgets(buf, 100, fps) != NULL) fputs(buf, fpd);
fclose(fps);fclose(fpd);
return 0;
}
[1] 授業単元:配列と繰り返し [2] 問題文 それぞれの人の身長と,その身長と平均身長との差(小さければマイナスの数値となる) を,一人一行ずつ出力しなさい。例えば,次のような形式で出力する (n が3 の場合。 小数点以下の桁数は気にしない) 。 170.0 0.0 165.0 -5.0 175.0 5.0 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ [3.3] 言語:C++ [4] 期限:2008年11月25日12:00まで よろしくお願いします。
[1] 授業単元:配列、繰り返し、分岐 [2] 問題文 for文を用いて10 個の要素をもつ整数配列data を初期化して宣言する。配列要素の中の最大値と最小値を 出力しなさい。なお,配列要素の値として,すべて負のものがあるデータも試してみるこ と。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ [3.3] 言語:C++ [4] 期限:2008年11月25日12:00まで よろしくお願いします。
>>301 #include <stdio.h>
int main(){
int n, i;
double person[20];
double sum = 0, ave = 0;
printf("人数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("%d人目の身長:",i + 1);
scanf("%lf", &person[i]);
sum += person[i];
}
ave = sum / n;
for (i = 0; i < n; i++) {
printf("%3.1f %3.1f\n", person[i], person[i] - ave);
}
return 0;
}
>>302 #include <stdio.h>
int main(){
int data[10];
int i, max, min;
printf("1個目: ");
scanf("%d", &data[0]);
max = data[0];
min = data[0];
for (i = 1; i < 10; i++) {
printf("%d個目", i + 1);
scanf("%d", &data[i]);
if (data[i] > max)
max = data[i];
if (data[i] < min)
min = data[i];
}
printf("最大値%d 最小値%d\n", max, min);
return 0;
}
[1] 授業単元: C言語 [2] 問題文:指定したファイルに書かれている整数を逆順に表示するプログラムをつくりなさい。 例 123 4567 89 と書かれているなら 89 4567 123 と表示 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月24日 [5] その他の制限: malloc,fsanf,fopenは習いました。 よろしくお願いします。
>>308 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *v;
size_t c;
FILE *fp;
fp = fopen("308.txt", "r");
if (fp == NULL) {
perror("fopen");
return 1;
}
c = 1;
v = malloc(sizeof(int) * c);
while (fscanf(fp, "%d", &v[c-1]) == 1) {
c++;
v = reallocf(v, sizeof(int) * c);
}
fclose(fp);
c--;
while (c != 0) {
printf("%d ", v[c-1]);
c--;
}
putchar('\n');
free(v);
return 0;
}
[1] 授業単元: プログラミング言語 U [2] @からCにこたえよ。 文字列msgを次の2つの方法で画面に表示させようとしたら、正しく表示できないところがあった。 なお、文字列msgは以下のように初期化されており、終端方法は問題ないものとする。 char msg[]="........";/*.......はある文字列*/ [A]printf("%s",msg); [B]printf(msg); @正しく表示できなかったのは[A][B]のどちらか、あるいは両方か? Aそれはどのような場合か、例を挙げなさい。 B正しくできない理由を説明しなさい。 Cこのような問題を防ぐにはどうしたらよいか。 [3] 環境 [3.1] OS:windows xp [3.3] 言語: C言語 [4] 期限:11月末 どうかよろしくお願いいたします。
>>310 1.
B
2.
%を含む場合
3.
printfのフォーマットとみなされるから
4.
Aの様にする
多分こうだろうと思う。
>>310 1. [B]
2. msg[] = "%d"
3. フォーマットに対応する引数を渡してないから
4. printf の第1引数には何が入っているか分からない文字列を渡さない。例えば [A] のようにする
313 :
310 :2008/11/23(日) 21:48:12
>>311 ,312
311様312様
ご回答ありがとうございます。
まさかこんなにはやいとは思いませんでした。
ありがとうございます。
314 :
308 :2008/11/23(日) 21:59:48
>>309 さん
ありがとうございます。
たすかりました。
[1] 授業単元: プログラミング言語 U [2] @からCにこたえよ。 @あるデータ型の変数内部で1と0がどのように並んでいるかを調べるにはどうしたらよいか。 A符号付き変数の内部で正と負の整数はどのような方法で表されるか説明しなさい。 B符号付き整数で表せる数値の範囲は負の数が正の数よりも1つ多い理由を説明せよ。 C整数の変数の右シフトにおいて結果が異なることがある理由を説明しなさい。 [3] 環境 [3.1] OS:windows xp [3.3] 言語: C言語 [4] 期限:11月末 どうかよろしくお願いいたします。
>>315 1.ビット演算右シフトしたものを 1 と & するという操作を繰りかえす
2. 負数はビット反転して1を足す
3. 全てのビットが1のものは最小の負数、全てのビットが0のものは0を表し、
それ以外のものは左端のビットが1であれば負、0であれば正の数なので負の方が一個多い
4.
右シフトした後の左端ビットはシフト前のビットを使うか0するはC言語の規格で決まっていないから
or
負数の場合は、右にシフトして開いたビットは1になる
正の数だったら0になる
4がどっちの意味の質問なのかわからん。後俺の説明が全般的に糞
[2] 以下の仕様を満たす構造体を宣言しなさい。 ・構造体名はTEST、構造体変数名はsttest ・1番目のメンバは0〜100000を扱う整数で変数名はnNo ・2番目のメンバは20文字を扱う文字列で、変数名はszName ・3番目のメンバは80文字を扱う文字列で、変数名はszAddr [3] 環境 [3.1] OS:windows xp [3.3] 言語: C言語 [4] 期限:11月末 どうかよろしくお願いいたします。
318 :
315 :2008/11/23(日) 22:41:44
>>316 様
ありがとうございます。助かりました。
319 :
デフォルトの名無しさん :2008/11/23(日) 22:53:10
>>317 宣言するだけかよw
struct TEST {
unsigned int nNo;
char szName[21];
char szAddr[81];
} sttest;
322 :
デフォルトの名無しさん :2008/11/24(月) 00:24:03
【質問テンプレ】 [1] 授業単元:基礎プログラミング [2] 問題文(含コード&リンク):適当に問題作って正解、不正解をそれぞれ数え 不正解時は回数ごとに違う言葉が表示されるようにしろ(1回目:違う、2回目氏ねみたいな感じで) [3] 環境 [3.1] OS:VISTAUltimate [3.2] コンパイラ名とバージョン: gcc(unixサーバー内のものなのでver不明)orVISUALC++2008 [3.3] 言語: (C/C++/どちらでも可 のいずれか)C [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)今週木曜AM10:00まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)if elseは必ず用いるのみ
3回目は?「今すぐ樹海に逝け」とか?
○×?
325 :
デフォルトの名無しさん :2008/11/24(月) 00:29:04
>>323 それでもおkww好きなように改変して下さい
>>324 問題自体は何でもいいようなのでお任せします
【質問テンプレ】 [1] 授業単元: 情報処理 [2] 問題文 有効桁が10桁の実数kを読み込み、 k^1、k^2、k^3、、、、、k^10 の値を表で出力せよ。 [3] 環境 [3.1] OS: vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2008/11/24 [5] その他の制限: 数学関数 pow() は使わない 宜しくお願いします
327 :
デフォルトの名無しさん :2008/11/24(月) 01:04:25
>>321 早い回答ありがとうございます。
動きませんでしたか、問題のミスかな?
でもとっても助かりました。ありがとうございましたm(_ _)m
>>327 Nが2と#defineされているのは動作確認のためですので
4に戻しておいてください
クソースは麻呂に特許がある単語でおじゃっ!1回使用する度に 10円の著作権料を請求するでおじゃる。
331 :
デフォルトの名無しさん :2008/11/24(月) 05:09:37
333 :
332 :2008/11/24(月) 07:19:11
? if the cell is alive and has >= 1 or , <=4 alive neighbors, the cell dies あるセルが生(真)で、1つ以上4つ以下の生(真)の隣接するセルがあれば、 そのセルは死(偽)になる。 if the cell is dead and has exactly 3 alive neighbors, it becomes alive あるセルが死(偽)の場合、生(真)のセルが3つ隣接している場合、 そのセルは生(真)になる。 隣接するのは、上下左右の4つが対象?斜めは無視?
よろしくお願いします
>>334 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
int *v;
int size, i, sum;
scanf("%d", &size);
v = malloc(sizeof(int) * size);
i = 0;
while (scanf("%d", &v[i]) != EOF) {
i++;
}
fp = fopen("out.txt", "w");
sum = 0;
for (i = size; i > 0; i--) {
fprintf(fp, "%d ", v[i-1]);
sum += v[i-1];
}
fprintf(fp, "%d", sum);
fclose(fp);
free(v);
return 0;
}
>>335 コンウェイのライフゲーム/セルオートマトンですか。
341 :
デフォルトの名無しさん :2008/11/24(月) 13:51:47
[1] 授業単元: 情報 [2] 問題文: キーボードから入力した10個の数を昇順表示 (例) 4[enter] → 4 7[enter] → 4 7 1[enter] → 1 4 7 -2[enter] → -2 1 4 7 ……… [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual Studio .NET コマンドプロンプト [3.3] 言語: C [4] 期限: 11/27 [5] その他の制限 [5.1] データ構造は【配列】にする。 [5.2] 既習範囲【printf,scanf,if,while,配列[]】以外は使用しない。 [5.3] void main() ではじめる。 宜しくお願い致します。
>>341 for が使えないと、なんかみょうちくりんなコードに見える。。。
#include <stdio.h>
void main()
{
int i, j;
int v[10];
int t;
i = 0;
while (i < 10) {
scanf("%d", &v[i]);
j = i;
while (j > 0) {
if (v[j] < v[j-1]) {
t = v[j];
v[j] = v[j-1];
v[j-1] = t;
}
j--;
}
/* j == 0 */
while (j <= i) {
printf("%d ", v[j]);
j++;
}
printf("\n");
i++;
}
return 0;
}
344 :
デフォルトの名無しさん :2008/11/24(月) 14:30:11
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 6個の要素を持つ整数配列 int data[6] = {3,7,12,4,16,}を初期化して宣言する。 この配列に順に「1,2,3,・・・6」と番号を振り、以下に示すようにそれぞれ配列の数値の分だけ“*”を出力されるようにしなさい。 1 *** 2 ******* 3 ************ 4 **** 5 * 6 ****** [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョンVC 6.0 [3.3] 言語: C++ [4] 期限: 今日中 [5] その他の制限: 特にありません。 どうかお願いします。
>>346 #include <iostream>
int main()
{
int data[6] = {3,7,12,4,1,6};
for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
std::cout << i << ' ';
for (int j = 0; j < data[i]; ++j)
std::cout << '*';
std::cout << std::endl;
}
return 0;
}
[1] 授業単元 プログラミング [2] 問題文 (1) int min_intarray(int data[ ], int n) (2) void print_intarray(int data[ ], int n) 上記(1)(2)の関数を参考にしながら、次のプログラム(main 関数)を利用して,作成した関数が正しく動作しているか 確認しなさい。 int main(void) { int a[5] = {3, 5, 1, 2, 4}; int b[10] = {6, 4, 2, 5, 8, -2, 7, 0, 1, 9}; int c[4] = {-2, -3, -4, -1}; printf(%d :, min_intarray(a, 5)); print_intarray(a, 5); printf(%d :, min_intarray(b, 10)); print_intarray(b, 10); printf(%d :, min_intarray(c, 4)); print_intarray(c, 4); return 0; } [3] 環境 [3.1] OS:Windows [3.2] [3.3] 言語:C [4] 期限:2008年11月25日6:00まで 問題文の意味からしていまいち掴めていないような状況です。 申し訳ないですがどなたかお願いします。
>>348 #include <stdio.h>
#include <limits.h>
int min_intarray(int data[ ], int n)
{
int min = INT_MAX, i;
for (i = 0; i < n; ++i) {
if (data[i] < min) min = data[i];
}
return min;
}
void print_intarray(int data[ ], int n)
{
int i;
putchar('[');
for (i = 0; i < n - 1; ++i)
printf("%d ", data[i]);
printf("%d]\n",data[i]);
}
int main(void)
{
int a[5] = {3, 5, 1, 2, 4};
int b[10] = {6, 4, 2, 5, 8, -2, 7, 0, 1, 9};
int c[4] = {-2, -3, -4, -1};
printf("%4d :", min_intarray(a, 5));
print_intarray(a, 5);
printf("%4d :", min_intarray(b, 10));
print_intarray(b, 10);
printf("%4d :", min_intarray(c, 4));
print_intarray(c, 4);
return 0;
}
[1] 授業単元:関数 [2] 問題文 (1)main関数で4つの数を入力し、heikin 関数に引き渡した。heikin 関数では、4 つの数 の平均値を返す。関数から計算された値はmain 関数側で表示する。この仕様を満たす プログラムを作りなさい。 (2)main関数で整数値を入力し、kaijyo 関数に引き渡した。kaijyo 関数では、引数の階乗 値を返す。関数で計算された値はmain 関数側で表示する。この仕様を満たすプログラ ムを作りなさい。 例)3の階乗値は 3×2×1=6 である。5 の階乗値は5×4×3×2×1=120 である。 [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C [4] 期限:明日 お願いします
353 :
デフォルトの名無しさん :2008/11/24(月) 17:04:47
>>352 #include <stdio.h>
int main(){
int a b, c, d;
scanf("1st number %d", &a);
scanf("2nd number %d", &b);
scanf("3rd number %d", &c);
scanf("4th number %d", &d);
printf("The sum is : %d", heikin(a, b, ,c ,d));
return 5000;
}
int heikin(int a, int b, int c, int d){
return (a + b + c + d)/ 4
}
355 :
デフォルトの名無しさん :2008/11/24(月) 17:10:36
>>352 <2>
#include <stdio.h>
int main(){
int a;
printf("Which number you want?");
scanf("%d", &a);
printf("The kaijo of %d is : %d", a, kaijo(a));
return 0;
}
int kaijo(int a){
int i, base=1;
while(a>1){
base *= a--;
}
return b
}
あごめんよくわかんね
357 :
デフォルトの名無しさん :2008/11/24(月) 17:15:41
>>356 でも動くだろ?
プログラマにとって多少のコンパイルエラーは避けられない
358 :
デフォルトの名無しさん :2008/11/24(月) 17:24:06
// コンパイル通してないから動くか知らん #include <stdio.h> double heikin(double input[]); int kaijo(int n); int main(){ double input[4]; int i; /* for (1) */ for(i=0;i<4;i++) scanf("%lf", &input[i]); printf("average: %7.4f\n", heikin(input)); /* for (2) */ scanf("%d", &i); printf("fact(%d) = %d\n", i, kaijo(i)); } double heikin(double input[]){ int i; double sum = 0; for(i=0;i<4;i++) sum+=input[i]; return sum/4; } int kaijo(int n){return (n<2)?1:kaijo(n-1)*n;}
>>351 iodata2-1
name: name a, teln: +aa-aaa-aa-aaaa, mail:
[email protected] name: name b, teln: +bb-bbb-bb-bbbb, mail:
[email protected] name: name c, teln: +cc-ccc-cc-cccc, mail:
[email protected] name: name z, teln: +zz-zzz-zz-zzzz, mail:
[email protected] name: name e, teln: +ee-eee-ee-eeee, mail:
[email protected] name: name f, teln: +ff-fff-ff-ffff, mail:
[email protected] name: name g, teln: +gg-ggg-gg-gggg, mail:
[email protected] name: name h, teln: +hh-hhh-hh-hhhh, mail:
[email protected] name: name i, teln: +ii-iii-ii-iiii, mail:
[email protected] name: name j, teln: +jj-jjj-jj-jjjj, mail:
[email protected] name: name a, teln: +aa-aaa-aa-aaaa, mail:
[email protected] name: name b, teln: +bb-bbb-bb-bbbb, mail:
[email protected] name: name c, teln: +cc-ccc-cc-cccc, mail:
[email protected] name: name d, teln: +dd-ddd-dd-dddd, mail:
[email protected] name: name e, teln: +ee-eee-ee-eeee, mail:
[email protected] name: name f, teln: +ff-fff-ff-ffff, mail:
[email protected] name: name g, teln: +gg-ggg-gg-gggg, mail:
[email protected] name: name h, teln: +hh-hhh-hh-hhhh, mail:
[email protected] name: name i, teln: +ii-iii-ii-iiii, mail:
[email protected] name: name j, teln: +jj-jjj-jj-jjjj, mail:
[email protected]
まちがえましたこっちがiodata2-1です
name: name a, teln: +aa-aaa-aa-aaaa, mail:
[email protected] name: name b, teln: +bb-bbb-bb-bbbb, mail:
[email protected] name: name c, teln: +cc-ccc-cc-cccc, mail:
[email protected] name: name z, teln: +zz-zzz-zz-zzzz, mail:
[email protected] name: name e, teln: +ee-eee-ee-eeee, mail:
[email protected] name: name f, teln: +ff-fff-ff-ffff, mail:
[email protected] name: name g, teln: +gg-ggg-gg-gggg, mail:
[email protected] name: name h, teln: +hh-hhh-hh-hhhh, mail:
[email protected] name: name i, teln: +ii-iii-ii-iiii, mail:
[email protected] name: name j, teln: +jj-jjj-jj-jjjj, mail:
[email protected]
363 :
352 :2008/11/24(月) 19:19:20
>>353 うまく動かなかったので構文を直した後少し変更したら動きました、ありがとうございます
>>355 動きました、ありがとうございます
a.outを実行したときの引数の数argcと引数argvを代入できる ような構造体の定義と代入の方法を教えてください int main(int argc, char *argv[]) { A a; A.argc=argc; for (int i=0;i<V.argc;i++){ strcpy(?,argv[i]); } } struct A{ int argc; ?; };
365 :
sage :2008/11/24(月) 19:37:22
[1] 授業単元: プログラミング演習 [2] 問題文: 文字列1から文字列2の最長一致系列を求めるプログラムを作成する。 文字列1 "abcdefg" 文字列2 "bcdcccd" の場合、"abc"を求める。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual C++ 2005 [3.3] 言語: C [4] 期限: 11月29日 [5] その他の制限: C言語は一通り習いました。よろしくおねがいします。
>>365 関数を使っていいの?使っちゃいけないの?
367 :
sage :2008/11/24(月) 19:45:51
>>366 特に指定されていないので、使って大丈夫なはずです。
bcdじゃないの?
>>362 fread で sizeof(Address) = 300バイト ごとに読み込んでいるようだけど、実際の iodata2-1 は CSV なの?
双方向にする以前にちゃんと動くんか?
>>369 一応単方向のほうのプログラムは動きました。
>>370 >>362 は実際の iodata2-1 と違うだろ
showAddress の結果を貼り付けただけと思われ
そのままうpれ
iodata2-1のデータが今無いのでうpれないんです。 iodata2-1の内容は適当なアドレス帳のデータでいいらしいんですが・・
前スレの698です。
[1] 応用プログラミング演習
[2] wavファイル(音楽ファイル)を読み込んでFFTを施し、バンドパスフィルタ(ある周波数領域を0にする方法でもいいしFIRフィルタでもよい)をかけてIFFTし、そのwavファイルを出力せよ。(バンドパスの領域は任意)
[3] 環境
[3.1] OS: Windows
[3.2] 開発環境:VC++ 6.0
[3.3] 言語:C言語
[4]今月中
[5]制限なし
ある程度プログラムしたのですが、うまくいきません。
他スレで助言をいただこうと作成したプログラムをうpしたのですが、返答がなくもう一度このスレにお願いをしに来た次第です。
またフィルタをかける際ですが、
勉強不足でフィルタをかけるタイミングがわかりません↓
配列に格納したデータをFFTした後フィルタをかけIFFTするのか、生のデータにかけるのか…
ちなみにFIRフィルタをかけるつもりですが、係数の計算方法がわからないので、
http://momiji.i.ishikawa-nct.ac.jp/dfdesign/fir/mado.shtml のサイトで得られる係数を利用したいと思っています。
プログラムを
ttp://a-draw.com/uploader/upload.cgi?mode=dl&file=6970に挙げました 。passはメル欄です。
readmeではメールアドレスにアドバイスをくださいと書いておりますが、こちらのスレに書いてくださってかまいません。
どうぞご鞭撻のほどよろしくお願いします。m(_ _)m
[1] 授業単元: Cプログラミング [2] 問題文: n×n行列Aが与えられたとき、逆行列A-1を計算するプログラムを作成しなさい。 [3] 環境 [3.1] OS: LINUX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 12月1日 n×n行列Aが与えられたとき、逆行列A-1を計算するプログラムを作成しなさい。 よろしくお願いします。
>>372 適当なアレス長のデータじゃねーよ
バイナリ固定長300バイトのデータじゃなきゃ動作しない
面倒だが作ったぞ
>>372 めんどうですみません。よろしくお願いします
>>335 >>374 > 維持
> 生きているセルの周囲に2つか3つの生きているセルがあれば次の世代でも生き残る。
この通りなら、1以下、4以上の生(真)のセルが隣接する場合は、死滅?
その場合、
>>335 の訳は間違い?それとも、一般的なルールではない独自のもの?
380 :
さそり :2008/11/24(月) 23:12:05
すみません一度質問させていただいて恐縮ですが.....。 制限つきで返されまして...... なにとぞご協力お願いします。。 [1] プログラミング(応用) [2] ファイルを読み込みダブルクオートくくりの文字列を条件付で取り出してファイルに書き込む [3] 環境 [3.1] OS: UNIX [3.2] 開発環境: [3.3] 言語:C言語 [4]今週中 [5]制限なし テキストファイルの中身が 下記の内容だとします。 GET_A="GET_B"+"GET_C" GET_B="GET_A"*"GET_C" このファイル内容を読み込んで.fファイルに書き込む内容は左辺の値と,右辺のダブルクオートで囲まれた文字列です。 しかも制限がありまして重複した値を2度書き込まないので従って書き込む内容は書式付で #define GET_A #define GET_B #define GET_C です。上記のファイルの中身は不規則で一定ではありません。左辺の値はダブルクオートでくくられていないこと......。 すごく困っていましてお力お借りしたいと思います。よろしくお願いします。
381 :
デフォルトの名無しさん :2008/11/24(月) 23:13:10
382 :
381 :2008/11/24(月) 23:20:12
失礼、既出でした。
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): 次の二つの関数を作成しなさい。 (1) int min_intarray(int data[ ], int n) この関数は,要素がn 個の配列data の中の最小の値を返すものである。 (2) void print_intarray(int data[ ], int n) この関数は,要素がn個の配列data のすべての要素を横に並べて出力するものである。 その上で,次のプログラム(main 関数)を利用して,作成した関数が正しく動作しているか 確認しなさい。 int main(void) { int a[5] = {3, 5, 1, 2, 4}; int b[10] = {6, 4, 2, 5, 8, -2, 7, 0, 1, 9}; int c[4] = {-2, -3, -4, -1}; printf("%d :", min_intarray(a, 5)); print_intarray(a, 5); printf("%d :", min_intarray(b, 10)); print_intarray(b, 10); x y z printf("%d :", min_intarray(c, 4)); print_intarray(c, 4); return 0; }
>>383 の続きです。
[3] 環境
[3.1] OS:Win
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語:C
[4] 期限:11/26
よろしくお願いします。
[1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): 関数double area(double w, double h)を作成しなさい。 この関数は,w を長方形の幅,h を長方形の高さと見なして, その長方形の面積を計算する。ただし,w 又はh が負の値の場合は, 長方形の面積はゼロとすることにする。 関数を定義した上で,次のようなプログラム(main 関数)を作成しなさい。 (1) 四つの実数値width1, height1, width2, height2 を読み込む (一つ目の長方形の幅,一つ目の長方形の高さ,二つ目の長方形の幅,二つ目の長方形の高さを意味する)。 二つの長方形の面積を出力し,さらに,一つ目の長方形と, 二つ目の長方形とどちらが大きいのか,又は同じ大きさなのかを出力しなさい。 [3] 環境 [3.1] OS:Win [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C言語 度々すみません。 よろしくお願いします。
#include <stdio.h>
#include <limits.h>
int min_intarray(int data[], int n)
{
int i;
int max = INT_MIN;
for (i = 0; i < n; i++)
{
if (max < data[i])
max = data[i];
}
return max;
}
void print_intarray(int data[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d ", data[i]);
}
printf("\n");
}
>>383 全角空白インデント注意
申し訳ないがVC++は無いので動作未確認超適当
あとxyzって何?
なんだ既出かよ しかも最大と最小間違えて解答してる俺バロスwwww orz
390 :
デフォルトの名無しさん :2008/11/25(火) 00:09:46
>>390 第八位まで正しいかの確認は真の値との比較でかまわないか?
392 :
デフォルトの名無しさん :2008/11/25(火) 00:19:16
>>391 大丈夫です。
問1と問2は別問題として捕らえてもらってかまいません。
393 :
デフォルトの名無しさん :2008/11/25(火) 00:39:39
>>393 俺は解かないけど、英語わかんないけどC言語は分かるひとがいる可能性にかけるなら
訳してみたら?w
和訳したほうがいいと思うぞ
どなたか
>>351 を。単方向リストを双方向リストに変えたいんですが・・
>>386 ありがとうございます
助かりました!
>>387 すみません…次からは確認します
ありがとうございました!
>>397 単方向ができるなら、双方向もできるだろ。
↓こんな感じで次prevにアドレス放り込めるから、あとはnextを扱う時と同じ感覚で操作すれば良いよ。
AddressList *AddList=(任意のアドレスリストへのポインタ);
AddList->next->prev=AddList;
ちなみに消す場合は、
AddressList *AddList=(消されるアドレスリストへのポインタ)
AddList->prev->next=AddList->next;
AddList->next->prev=AddList->prev;
として自分をリストから外せばよい。
追加の場合は逆に前後のnextとprevを自分のnextとprevに代入した後、
前後のnextとprevを自分のアドレスで上書きすれば良い。
あとはがんばれ
すみません単方向のほうも自信が無いのでうまくできません。
>>351 のプログラムを実際に双方向に変更したソースを知りたいのですがわkりませんかね。
404 :
デフォルトの名無しさん :2008/11/25(火) 04:07:59
<<398 返信遅れてすいません。ありがとうございました。 本当に助かりました。 <<400 返信遅れすいません。わざわざありがとうございます。 お手数おかけしました。
変な言い訳せずに単方向も自分で作ったものではないので分かりませんって言えばいいのに
>>399 ありがとうございます!
助かりました!
>>138 >>139 期限が迫ってるのでお願いします
できる限り元のプログラムを基に作成してください
>>351 問題のtxt読んだら単方向のプログラムのinsertとdeleteがリストの
先頭のアドレス返すようになってる
番兵かポインタのポインタ使わないいけないみたい
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 次のようなプログラムを作りなさい。 二つの文字列を入力する。 入力する文字列は小文字アルファベットのみの,最大長20と仮定してよい。 入力した二つの文字列のうちどちらが長いか、また辞書順でどちらが先なのかを出力しなさい。 [3] 環境 [3.1] OS:Win [3.2] コンパイラ:VisualC++6.0 [3.3] 言語 :C [4]期限:特になし 考えているうちにどんどんわからなくなってきました… 良ければよろしくお願いします。
411 :
デフォルトの名無しさん :2008/11/25(火) 10:46:33
>>138 #include <stdio.h>
int main(void) {
int i, a_jisu, b_jisu, c_jisu;
double a[50], b[50], c[50];
for(i = 0; i < 50; i++) a[i] = b[i] = c[i] = 0.0;
printf("多項式Aの次数: ");
scanf("%d", &a_jisu);
for(i = a_jisu; i >= 0; i--) {
printf("多項式Aの%d次の係数: ", i);
scanf("%lf", &a[i]);
}
printf("多項式Bの次数: ");
scanf("%d", &b_jisu);
for(i = b_jisu; i >= 0; i--) {
printf("多項式Bの%d次の係数: ", i);
scanf("%lf", &b[i]);
}
printf("A + B = ");
if (a_jisu > b_jisu) c_jisu = a_jisu;
else c_jisu = b_jisu;
for(i = c_jisu; i >= 0; i--) c[i] = a[i] + b[i];
for(i = c_jisu; i > 0; i--) printf("%lg x^%d + ", c[i], i);
printf("%lg\n", c[0]);
return 0;
}
412 :
デフォルトの名無しさん :2008/11/25(火) 10:55:23
>>410 #include <stdio.h>
#include <string.h>
int main(void) {
char a[21], b[21];
int alen, blen, cmp;
printf("文字列A: ");
scanf("%20s", a);
printf("文字列B: ");
scanf("%20s", b);
alen = strlen(a); blen = strlen(b);
if (alen > blen) printf("Aの方が長い\n");
else if (blen > alen) printf("Bの方が長い\n");
else printf("同じ長さ\n");
cmp = strcmp(a, b);
if (cmp < 0) printf("辞書順ではAの方が先\n");
else if (cmp > 0) printf("辞書順ではBの方が先\n");
else printf("同じ文字列です\n");
return 0;
}
>>408 ありがとうございます。面倒かけたみたいですみません。
415 :
◆obaRHR1OMI :2008/11/25(火) 13:26:02
[1] 授業単元:アルゴリズム [2] 問題文:整数を標準入力から次々と入力し,入力が尽きたら,入力と逆順に出力するプログラムを書け。 ただし、以下の方法で実装すること 1. 配列をスタックとして使って実装せよ。 2. 単方向線形リストをスタックとして使って実装せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語:C [4] 期限: 無期限 [5] その他の制限:なし 答えは長いと思うのでヒントを下さい! struct cell { struct cell *next; int data; }; struct tlist { struct cell *head, *tail; } を使えばいいんですよね…?
416 :
デフォルトの名無しさん :2008/11/25(火) 13:33:36
417 :
◆obaRHR1OMI :2008/11/25(火) 13:52:40
>>415 [2].1 配列をスタックバージョン
#include<stdio.h>
int main(){
int i,n,a[64];
for(i=0;i<64&&scanf("%d",&n)==1;++i)a[i]=n;
for(;i>0;)printf("%d\n",a[--i]);
}
419 :
◆obaRHR1OMI :2008/11/25(火) 14:39:51
420 :
◆obaRHR1OMI :2008/11/25(火) 15:04:38
[1] 授業単元:アルゴリズム
[2] 問題文:整数を標準入力から次々と入力し、入力が尽きたら、まず入力した整数のうち偶数だけを入力の順に出力し、
次に奇数だけを入力と逆順に出力するプログラムを書け。ただし、以下の方法で実装すること
1. 配列をスタックとして使って実装せよ。
2. 単方向線形リストをスタックとして使って実装せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語:C
[4] 期限: 無期限
[5] その他の制限:なし
>>415 です
もう訳が分からなくなりました
421 :
◆obaRHR1OMI :2008/11/25(火) 15:06:45
422 :
381 :2008/11/25(火) 15:17:08
>>389 ありがとうございます。
ただ、関数はまだ習ってないんです…
423 :
デフォルトの名無しさん :2008/11/25(火) 17:37:20
[1] 授業単元: C言語 [2] 問題文 ★(1),(2)のみでも大丈夫です。 (1) "2進法"⇔"10進法"変換プログラムをつくる 例【10進法モード】 54(10) → 110110(2) 【2進法モード】 1011(2) → 11(10) (2) "16進法⇔"10進法"変換プログラムをつくる (3) "x進法⇔"10進法"変換プログラムをつくる [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual Studio .NET [3.3] 言語: C [4] 期限: 11/27 [5] その他の制限 ・【printf,scanf,if,while,配列】以外は使用しない(forなども×) ・void main() で開始 宜しくお願い致します。
424 :
デフォルトの名無しさん :2008/11/25(火) 19:31:04
[[1] 情報処理 [2] 次に書き込みます [3] 環境 [3.1]Windows [3.2] Visual Studio [3.3] C言語 [4] 11/26〜27 [5] printf,scanf,if,while,for,自作関数、配列は大丈夫です。ほか上級的なことさえなければたぶん 。 たくさんあってお手上げ状態です・・・
425 :
デフォルトの名無しさん :2008/11/25(火) 19:33:20
1. 値を-20 から20 まで1 刻みで変化し、各値の10 進数、16 進数、8 進数、2 進数を表示しなさい。 2 進数の表示は以下のサブ関数を参考にします。プログラムと結果を提出します。 void sori(int a) { int i,wc; for ( i=31; i>=0; i-- ) { wc=(a>>i ) & 0x01; if ( i%4==3 ) printf(" "); printf("%1d",wc); } printf("\n"); return; } 2. 以下の処理はmain 関数、サブ関数で作成します。プログラムと結果を提出します。 @.数値(n)を1 つ入力し、各桁の和を求めなさい。入力、処理は繰り返す。入力した値も表示する 11111→5 123456→21 12121212→12 A.数値(n)を反転した値を表示しなさい。 11111→11111 123456→654321 12121212→21212121
426 :
デフォルトの名無しさん :2008/11/25(火) 19:35:02
3. 2 つの整数値 m、n を入力する。 入力は繰り返し、m=n=0 の時、処理を終了する。 入力した整数を、m≦n になるように処理し、その値を元に m+(m+1)+ (m+2)+ (m+3)+ (m+4)+ (m+5)+ (m+6)+ (m+7)+・・・・・・n=?を求め表示する。 4. 2次方程式ax2+bx+c=0 の解を求めるプログラムを作成しなさい。a、b、c の値を入力する 計算結果は必ず5 種類表示すること。プログラムと結果を提出します。入力した値も表示します。 a=b=c=0 の場合、処理を終了する。 a=b=0、c≠0 の場合は、「不能」と表示する。 a=0、b≠0 の場合は、「一次方程式」と解を表示する 判別式がD<0 の場合、「虚解」と表示する。
5. 2つの実数値xとyの差の絶対値を計算して結果を返す関数 sabun(x, y) を作成し、 main 関数から呼び出すプログラムを作る。なお、関数sabunでは、実数値x とyを引数とし、その差の絶対値を戻り値として返す。また、実数値xとyは、main 関数中でキーボードから読み込む 6. 入力された文字がアルファベット大文字ならば小文字に、小文字ならば大文字に変換するプログラムを作成する。 -大文字:0x41(A)〜0x5A(Z) -小文字:0x61(a)〜0x7A(z) ・それぞれの文字コードの差が一定な事を利用する
428 :
デフォルトの名無しさん :2008/11/25(火) 19:39:29
4までです 5、6は知りません
3、4も違います 1、2までです
430 :
デフォルトの名無しさん :2008/11/25(火) 19:55:39
1,2,3,4です!
1、2も違います 0までです
[1] 授業単元:プログラミング演習(文字列とstrtok) [2] 問題文(含コード&リンク): int main(void){ char p[] = "ABCD.EF.GHIJ"; char *tp; tpok = strtok( str, " ." ); puts(tpok); while (tpok != NULL){ tpok = strtok(NULL," ."); if (tpok != NULL) puts(tpok); } return 0; } ----------------------------------- このプログラムは与えられた文字列を" . "ごとに 分割して表示するプログラムである。 strtokは第1引数に文字列定数を渡すとエラーが発生する。 char p[] を char *p にして" . "で分割するには以下のプログラムをどう書き換えたらいいか。 書き換えられない場合はその理由を述べよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年11月26日12:00まで [5] その他の制限: strtokは必ず使うこと
>>415 単方向線形リスト
#include<stdio.h>
#include<stdlib.h>
struct cell {
struct cell *next;
int data;
};
int main() {
struct cell *head = NULL, *t;
int n;
while (scanf("%d", &n) == 1) {
t = (struct cell*)malloc(sizeof(struct cell));
t->data = n;
t->next = head;
head = t;
}
while (head) {
t = head;
printf("%d\n", t->data);
head = t->next;
free(t);
}
return 0;
}
>>424 の1
#include<stdio.h>
void sori(int a)
{
int i,wc;
for ( i=31; i>=0; i-- ) {
wc=(a>>i ) & 0x01;
if ( i%4==3 ) printf(" ");
printf("%1d",wc);
}
return;
}
int main()
{
int i;
for (i = -20; i <= 20; i ++)
{
printf("%3d = %08Xh = %011oo = ", i, i, i);
sori(i);
printf("b\n");
}
return 0;
}
>>424 の2
#include<stdio.h>
int sum_of_digits(int n) {
int s;
for (s = 0; n; n /= 10) s += n%10;
return s;
}
int reverse_digits(int n) {
int r;
for (r = 0; n; n /= 10) r = r*10 + n%10;
return r;
}
int main() {
int n;
while (scanf("%d", &n) == 1) {
printf("%d sum=%d reverse=%d\n", n, sum_of_digits(n), reverse_digits(n));
}
return 0;
}
>>424 の3
#include<stdio.h>
void disp(int m, int n) {
printf("m=%d, n=%d, mからnまでの和は%d\n", m, n, (n+m)*(n-m+1)/2);
}
int main() {
int m, n;
while (1) {
printf("m="); scanf("%d", &m);
printf("n="); scanf("%d", &n);
if (m==0 && n==0) break;
if (m <= n) disp(m, n);
else printf("mとnを入れ替えますよ。\n"), disp(n, m);
}
return 0;
}
[1] 授業単元: オートマトンと言語理論
[2] 問題文(含コード&リンク):
http://www3.uploda.org/uporg1811504.pdf.html [3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008年12月20日23時59分まで
[5] その他の制限: 大学でやっている程度で、効率よくやる方法があればお願いしたいです。
>>424 の4
#include<stdio.h>
#include<math.h>
int main() {
double a, b, c, D;
while (1) {
printf("a="); scanf("%lf", &a);
printf("b="); scanf("%lf", &b);
printf("c="); scanf("%lf", &c);
if (a==0 && b==0 && c==0) break;
printf("%gx^2%+gx%+g=0\n", a, b, c);
if (a==0 && b==0) printf("不能\n");
else if (a==0) printf("一次方程式\nx=%g\n", -c/b);
else if ((D = b*b-4*a*c) < 0) printf("虚解\n");
else printf("x=%g, %g\n", (-b+sqrt(D))/(2*a), (-b-sqrt(D))/(2*a));
printf("\n");
}
return 0;
}
>>424 の5
#include<stdio.h>
#include<math.h>
double sabun(double x, double y) {
return fabs(x-y);
}
int main() {
double x, y;
printf("x="); scanf("%lf", &x);
printf("y="); scanf("%lf", &y);
printf("%g\n", sabun(x, y));
return 0;
}
>>424 の6
#include<stdio.h>
#include<ctype.h>
char flip_case(char c) {
if (isupper(c)) return tolower(c);
if (islower(c)) return toupper(c);
return c;
}
int main() {
char c;
scanf("%c", &c);
printf("%c\n", flip_case(c));
return 0;
}
442 :
381 :2008/11/25(火) 22:51:46
>>426 > 2次方程式ax2+bx+c=0 の解を求めるプログラムを作成しなさい
って問題で、a=0のときを考慮するのは、問題として不適切。
本来なら、条件として a≠0が必要。どんな学校だ?
>>443 a に 0が入力されたら・・・・とでも読み替えといてください
445 :
デフォルトの名無しさん :2008/11/25(火) 23:12:18
>>442 sum2 += 1/(i*i);
↓
sum2 += 1/((double)i*i);
447 :
デフォルトの名無しさん :2008/11/25(火) 23:32:45
424ですがありがとうございました! 5と6は嵐なんですいません 本当に助かりました!
448 :
デフォルトの名無しさん :2008/11/26(水) 00:00:07
>>445 こちらってどちら?
もしかしてロダで単発スレたてたやつ?
450 :
デフォルトの名無しさん :2008/11/26(水) 00:16:51
>>449 そうです。不適切でしたら申し訳ございません。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): トランプの束を正確に2等分し、それぞれの束を1枚ずつ完全に交互に噛み合わせて混ぜる ことを、パーフェクト・シャッフルと呼ぶ。 ジョーカーを除いた52枚のトランプの束を何回かパーフェクト・シャッフルすると、元 の並びに戻ることが知られている。何回で元に戻るかを求めるプログラムを作成せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C/C++どちらでも可 [4] 期限: 無期限 [5] その他の制限: 特にありません。 よろしくお願いします。
>>448 _ ,. -‐ 'ニ丶、
. -‐ ´ ` ´ ヽ \ \
./ , , , 、 、 、 .ヽ
./ /, '/ ./ i | .l l ! .i ヽヽ l.
i /〃 .i {_|..{ |l | ‐l-l、! i i l. l
!' .{i ! .! !'N_ヽ ! .ハ'_L.l_|ソ|' ノ l. |
! l { .lヽハli; `´` {'f::iヽレ | r、! l
>ゝヽ,! lt} 、 l,t:ソ/,' .l |ソ.| ! / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
l { l ! ‐ ,' / !ノ ! l < crc関数の戻り値は11010110111011じゃない?
!,|ヽL.|.i 、 _. i_.レ !' | | } \__________
`ゝ`| | |.`l ー‐ '.ノ/ .ノl l ノノ
! ! .レ'7ー=ー// /ヽ,__l_∠.._
,!. ,' .ノ { ``´// / \< . 〉
/,' ,' / l. // /__...- ニヽ. `/
〉/./ /ヽ.、 |/// /=‐ ̄, ' `}>'、
〈/ /〃 `ソ// ,' ./ |ヽ\\
/ /〃 o/.i. l { / i i |ヽヽ.\\
{ { {{ i .lL|__| .〈 .l l |.} }ヽr‐〜'
454 :
デフォルトの名無しさん :2008/11/26(水) 01:59:42
こいつぁすげぇ・・・
大してすげくねーYO!
>>454 ____________
ヾミ || || || || || || || ,l,,l,,l 川〃彡|
V~~''-山┴''''""~ ヾニニ彡| 回答する・・・・・・!
/ 二ー―''二 ヾニニ┤ 回答するが・・・
<'-.,  ̄ ̄ _,,,..-‐、 〉ニニ| 今回 まだ その時と場所の
/"''-ニ,‐l l`__ニ-‐'''""` /ニ二| 指定まではしていない
| ===、! `=====、 l =lべ=|
. | `ー゚‐'/ `ー‐゚―' l.=lへ|~| そのことを
|`ー‐/ `ー―― H<,〉|=| どうか諸君らも
| / 、 l|__ノー| 思い出していただきたい
. | /`ー ~ ′ \ .|ヾ.ニ|ヽ
|l 下王l王l王l王lヲ| | ヾ_,| \ つまり・・・・
. | ≡ | `l \__ 我々がその気になれば
!、 _,,..-'′ /l | ~''' 回答の受け渡しは
‐''" ̄| `iー-..,,,_,,,,,....-‐'''" / | | 10年後 20年後ということも
-―| |\ / | | 可能だろう・・・・・・・・・・ということ・・・・!
| | \ / | |
458 :
454 :2008/11/26(水) 02:36:00
シンプソン積分かこれ?
460 :
454 :2008/11/26(水) 02:39:30
せめて変数と物理量の対応だけでも教えれ
463 :
454 :2008/11/26(水) 02:49:01
それが俺もよく分かんないすよ。途中のプログラムを渡されただけなんで。
464 :
454 :2008/11/26(水) 02:50:16
>>463 大本の問題がなにかを聞いてくるのが一番早いと思うよ。
466 :
454 :2008/11/26(水) 02:53:31
惑星の楕円軌道の計算だと思うんだけどな
468 :
454 :2008/11/26(水) 03:38:00
>>443 いいえ。a == 0 のときなども含めて「二次方程式を解く」と表現して問題はありません。昔は高校の数Tではそうだったんですが。
これが、ゆ と り 教 育なんですね。驚きました。
470 :
デフォルトの名無しさん :2008/11/26(水) 06:56:30
>>469 バカですか?それを2次方程式として扱うこと事態が間違っているんだが?w
二”次”が読めませんか?a=0のときの条件も考慮したプログラムとして
問題は出ているが、x^2の係数が0の場合2次方程式とは言わないのが一般的。
どこの低レベルの高校でちゅかぁ〜?都道府県名と市町村名を述べよw
469 名前:デフォルトの名無しさん 投稿日:2008/11/26(水) 06:51:21
>>443 いいえ。a == 0 のときなども含めて「二次方程式を解く」と表現して問題はありません。昔は高校の数Tではそうだったんですが。
これが、ゆ と り 教 育なんですね。驚きました。
> 昔は高校の数Tでは
いつの時代なんだろう・・・遡っても、たぶんそれが不適切だったという説明で終わるだろうね・・・
これが 時 代 遅 れ なんですね。近年の科学技術の発展を考慮したら、
別に何十年も前の教育なんて、そんなもんでも驚きませんが、現代においては
a=0の場合、敢えて説明をつけるでしょうね・・・
>>426 には
> a=0、b≠0 の場合は、「一次方程式」と解を表示する
と、敢えて一次方程式と述べているしね。それなのに、a=0でも
>>469 > いいえ。a == 0 のときなども含めて「二次方程式を解く」と表現して問題はありません。
なんて敢えて間違えたことを指摘して、相手を罵倒するなんて、
精神レベルも低そうだな、こいつ・・・
さらに追い討ち。判別式の中身はルートで囲まれている。すなわち・・・
これまた、一次では使われるものではないね。条件で判定して
敢えて一次の場合は二次方程式の解の公式などを使わずに導くが、
まぁ、なんだ、x^2の係数が0でも二次方程式を解くなんて、口が裂けても言えませんw
そういえば、かなり前にも、このスレでa=0でも成り立たせるために、
どうとか訳の分からん持論を展開した奴がいたが、解の方程式の分母で
やはり見事に論破されてたな。そう、x^2の係数が0では2次方程式としては
成り立たないんだよw
そういう場合、どうしてx^2も考慮した数式で演算するのだろうか?
プログラミングに於いて、適切に条件を指定するのは重要。
なのに、例外があっても合わないやり方で押し通そうなんて、
エラーやバグを態と導くおつもりですか?
おまいら一体何と戦っているんだ・・・ 数学的に正しいかどうかとかは、そういうスレでやれ 仕様を満たしたうえでバグがあるなら、そう書けばいいし
2次方程式でググってきな。a≠0が条件に入るよ。 x^2の係数が0である場合、xがどの値をとっても bx+c=0にしかならないだろ。これを2次方程式とは言わないの。 あと、a≠0であれば、b=0 , c=0 でもax^2だけでも2次方程式は成り立つの、分かる? 本来重要とされる係数を無視しないでくれ。
これで、もしも課題がa==0の時バグがある。 これを修正せよだったりしたら涙目
477 :
デフォルトの名無しさん :2008/11/26(水) 07:55:15
[1] 授業単元:計算機プログラミングU [2] 問題文(含コード&リンク): 関数mainにおいて,下記のような文字列を定義する. char *name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL}; 上記の文字列をアルファベット順に並べ替える関数を作成し,その結果を表示するプログラムを作成せよ. ヒント:文字列の比較のために関数strcmpを使用する.次の2行をそれぞれ適切な場所に入れること。 #include <string.h> int strcmp(const char *str1,const char *str2); 【戻り値】str1 > str2 ならば正値(1) str1 = str2 ならば0 str1 < str2 ならば負値(-1) [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc(できればVisual C++でも動くように) [3.3] 言語:C [4] 期限:2008年11月27日10:30まで [5] その他の制限:まだ初歩の段階です。やっとポインタの基礎を習い終わったところです。
なんかnameに並んでるのが教授陣の名字に見えてしょうがないんだが。
>>443 外部から入力される値をチェックするのは基本だろ
a=0は不正な入力なのでエラーを表示して終了で問題ない
>>477 #include <string.h>
#include <stdio.h>
void sortName(char** name){
char** pSrc = name;
while(*(pSrc+1) != NULL){
char** pDst = pSrc + 1;
while(*pDst != NULL){
if(strcmp(*pSrc, *pDst) > 0){
char* tmp = *pSrc;
*pSrc = *pDst;
*pDst = tmp;}
++pDst;}
++pSrc;}}
int main(void){
char* name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL}; char** ptr = name;
sortName(name);
while(*ptr != NULL){
printf("%s\n", *ptr++);}
return 0;}
481 :
デフォルトの名無しさん :2008/11/26(水) 09:34:14
[1] 授業単元: C言語 [2] 問題文 以下のプログラムを配列を用いない形で書く(iと直前のi-1のみを利用して 計算するようにする。) #include <stdio.h> #define MAX 100 int main(void) { int a,b,i,n; int an[MAX],bn[MAX]; printf("a の初期値を入力 > "); scanf("%d",&a); printf("b の初期値を入力 > "); scanf("%d",&b); printf("項数 n を入力 > "); scanf("%d",&n); for(i=1,an[0]=a,bn[0]=b; i<n; i++) { an[i]=2*an[i-1]-bn[i-1]; bn[i]=2*bn[i-1]-an[i-1]; } for(i=0; i<n; i++) printf("%d ",an[i]); puts(""); for(i=0; i<n; i++) printf("%d ",bn[i]); return 0; } [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: [5] その他の制限 よろしくおねがいします。
計算幾何学的には二次の係数が0の場合も、二次方程式と呼ぶ。 数学的には、二次以上の係数が0の場合、一次以下の方程式と呼ぶ。 ここは計算機科学のスレだと思うが....
勝手に2次方程式の定義を変えないで欲しいんだが?>時代遅れ
口から糞を垂れる暇があったらさっさと宿題かたづけろや。
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
strlen(), strcmp()と同じ動きをする関数mystrlen(), mystrcmp()を、ポインタを使って作成せよ。
作成したら→
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8113.c のmain()関数を使って動作を検証。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 今日の15時まで
[5] その他の制限: ポインタを使って作成した関数で↑のリンクのプログラムを書き直して
もらえると助かります。
よろしくお願いします
486 :
デフォルトの名無しさん :2008/11/26(水) 10:40:14
>>481 #include <stdio.h>
#define MAX 100
int main(void) {
int a, b, a_next, b_next, i, n;
printf("a の初期値を入力 > ");
scanf("%d", &a);
printf("b の初期値を入力 > ");
scanf("%d", &b);
printf("項数 n を入力 > ");
scanf("%d", &n);
printf("%d ", a);
for(i = 1; i < n; i++) {
a_next = 2 * a - b;
b_next = 2 * b - a;
a = a_next;
b = b_next;
printf("%d ", a);
}
puts("");
printf("%d ", b);
for(i = 1; i < n; i++) {
a_next = 2 * a - b;
b_next = 2 * b - a;
a = a_next;
b = b_next;
printf("%d ", b);
}
return 0;
}
487 :
デフォルトの名無しさん :2008/11/26(水) 10:47:08
>>485 size_t mystrlen(const char *s) {
size_t len = 0;
while(*s++) len++;
return len;
}
int mystrcmp(const char *s1, const char *s2) {
while(*s1 && *s1 == *s2) {
s1++; s2++;
}
return *s1 - *s2;
}
>>481 表示について元の形を保つのは無意味と思ったので勝手に書き換えてみた
#include <stdio.h>
int main(void)
{
int i, n, an, bn;
printf("a の初期値を入力 > ");
scanf("%d",&an);
printf("b の初期値を入力 > ");
scanf("%d",&bn);
printf("項数 n を入力 > ");
scanf("%d",&n);
printf("n=0, a=%d, b=%d\n", an, bn);
for(i=1; i<n; i++)
{
int an_ = an;
int bn_ = bn;
an = 2 * an_ - bn_;
bn = 2 * bn_ - an_;
printf("n=%d, a=%d, b=%d\n", i, an, bn);
}
return 0;
}
489 :
デフォルトの名無しさん :2008/11/26(水) 11:08:30
>>486 さん 488さん
ありがとうございます。
そりゃ、まぁ、男も女も人間だって言ったら、キリが無い罠。 さらに広義に、雄、雌をすべての生物を対象にして定義したら 雄なのに子供を産む種もあるみたいな。それを言い出したら 係数が0ということで、3次、4次として1次の係数が0以外の 方程式でも、何とでも言える罠。そういうことではなく、 解の公式はa≠0でなければ、導けないので、矛盾が生じるため 条件や定義をはっきりさせているわけで。
条件も定義もはっきりさせないと、解は無限に存在するよ。 さて、導く必要があるんだろうか?思いついたものを言えば、それが答えさ。 実に詰まらん。プログラミングの意味すらなくなる。
492 :
485 :2008/11/26(水) 12:20:07
>>487 ありがとうございます。
size-t型はまだ習ってないので、良ろしければもう少し単純なプログラムでお願いできますか?
初めの制限に書いておくべきでしたが、ポインタも基礎、配列や仮引数としての
ポインタ、多重間接参照を習ったあたりでした。申し訳ないです。
>>492 size_tは全てintに差し替えとけ
とりあえずそれで動くから
494 :
デフォルトの名無しさん :2008/11/26(水) 12:23:43
【文化】 「"しんにょう"の点は1つだ!」「いや2つだ!」 議論白熱、結論持ち越し…文化審漢字小委
http://mamono.2ch.net/test/read.cgi/newsplus/1227662275/ この様に、あれこれ議論してたらしょんねぇべ。とりわけ、条件を指定して
そういう場合はこうだと導けられれば良いだがや。な?
a=0でも2次方程式っつーなら、b=0の場合、c=0でなきゃ成り立たないどころか
そもそも、何について解を求める式だったか、忘れてんべw
んだがや、c=0っちゅーならbx=0、すわなつbがなんであろうがxは0だぎゃ。
ほんだら、c=0、b=0、a=0の場合、xはどんな値であろうが成り立つんべ。
だから無限さ存在すんだと。おかしいべ?そもそも、=0になるときのxを求めるのが
本題だったんでねが?
496 :
デフォルトの名無しさん :2008/11/26(水) 13:15:07
>>493 わかりました。どうもありがとうございました!
いづのまにかぁ、xがどんな値をとっても、成り立つa,b,cさ求めてどーすんだがや? そうだっぺ?もちっと頭使えや、な?夕食のお買い物をしに行ったのに、 いつの間にか、手持ちのお金で買えるものは何か?なんて考えてっと、 飯が食えずに時間だけが過ぎ去るぞ?
>>498 文字比較をするのに strcmp 使え
string.h インクルード汁 そして strcmp 呼び出せ
と読んだ
[1] 授業単元:C言語の基礎 [2] 問題文(含コード&リンク): 四人の学生のテストにおける得点を読み込み、その平均点を計算して 出力するプログラムを作成してください。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限:今日の六時 [5] その他の制限: 型の変換で小数点まで出るようにせよ scanfで点数を入力する 基本的なことしか習ってません よろしくお願いします
#include <stdio.h>
#define NINZUU 4
int main(void)
{
int i;
int tensuu[NINZUU];
double heikin = 0;
for (i=0; i<NINZUU; i++)
{
printf("%d人目の点数= ", i+1);
scanf("%d", &tensuu[i]);
}
for (i=0; i<NINZUU; i++)
heikin += tensuu[i];
heikin /= NINZUU;
printf("平均=%f", heikin);
return 0;
}}
>>501 変数名は適当になおして。
>>502 うわぁ・・・分からないwww
#define習ってないんです
調べたら文字列に関係するって書いてありました
確かfor文も使わなかった気がします
制限に書いとくべきでしたすいません。
キャスト?でdoubleに変換して小数点出すらしいのですが・・・
問題文そのまま乗せましたけど
点数を合計してそれを四で割って平均点だせって問題です
#include<stdio.h>
main(){
int a, b, c, d;
double sum;
scanf("%d%d%d%d", a, b, c, d);
sum = (a+b+c+d)/(double)4
printf("%d\n", sum):
>>503 自分で考えたのがこれなんですが・・・
回答を書いてもらえるか、もしくは手直しお願いします
>>503 printf("%d\n", sum):
を
printf("%f\n", sum):
にしろ
>>504 最終行
printf("%d\n", sum):
を
printf("%f\n", sum):
へ
お。 dだと整数でしたっけ? あとはOKですか? なんかキャストとかカッコの入れ方で計算があわないとか教授言ってたけど・・・ これでOK?
>>503 4をdoubleにキャストするのはなんか変
sum = (double)(a+b+c+d)/4.0;
でいいんじゃないかな
なるほど。
>>508 了解です
#include<stdio.h>
main(){
int a, b, c, d;
double sum;
scanf("%d%d%d%d", a, b, c, d);
sum = (double)(a+b+c+d)/4
printf("%f\n", sum):
}
で頑張ります
長々とありがとうございました
一応OK a+b+c+d の演算過程で int のとり得る範囲を突破するわけでもないしね (a+b+c+d)/(double)4 a+b+c+d の結果は int 次の割り算は int/double で結果はdouble (かつ演算は double/double で評価される)
>>496 #include <string.h>
#include <stdio.h>
void sortName(char** name){
char** pSrc = name;
while(*(pSrc+1) != NULL){
char** pDst = pSrc + 1;
while(*pDst != NULL){/*
int strcmp(const char *str1,const char *str2);
*/if(strcmp(*pDst, *pDst) > 0){
char* tmp = *pSrc;
*pSrc = *pDst;
*pDst = tmp;}
++pDst;}
++pSrc;}}
int main(void){
char* name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL}; char** ptr = name;
sortName(name);
while(*ptr != NULL){
printf("%s\n", *ptr++);}
return 0;}
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): 1 円周率 の値を近似式 π=4納{(−1)^n/(2n+1)}×{(1/2)^(2n+1)+(1/3)^(2n+1)}] (0≦n≦100)で を用いて小数点8ケタまで(3.14159265)正しい値を出力し、そのπを用いて |(π^2/6)-(1/k^2)|<ε (1≦k≦N) この不等式を満たす最小の自然数Nを求めるプログラムを作れ。 表示は Input the volume of error: 0.000001【Enter】 Pi is 3.14159265. the smallest integer N is . とする。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月29日まで [5] その他の制限:配列、数学関数は使ってはいけない よろしくお願いします
514 :
デフォルトの名無しさん :2008/11/26(水) 20:04:05
>>495 >>499 それはそのとおりやねんけど、「方程式をとく」、というのは「あたえられた式を満たす x をもとめる」っちゅうことやから、
係数が文字であたえられたら、係数がどんなばあいにはどう、どんな場合にはどう、と場合わけして的確に記述することが重要やねん。
「すべての実数が与えられた式を満たす」「与えられた式を満たす実数は存在しない」というのも立派な解なんや。
「a=0 のときは二次方程式やない」、と言い切るのは、「方程式をとく」という所作になにがもとめられているかを理解していないのとちゃうか?
今の教程は、言葉尻をとられないようにするあまり無用に親切ではあるのですが、我々理工系に何が求められているか、という観点からすると
かなり歪んだものになっています。
しかし、これは若者には罪はありません。
高等学校の教科書などは早く投げ捨てて、本物の教科書を手にとってください。
手元にあるのは、
ISBN-13: 978-4000051712
ISBN-13: 978-4000050203
です。
言葉尻を捕らえて拡大していくと、複素空間やその他写像系まで考慮しだすはめに… 何処まで習っているか+題意はどこらへんを狙っているか は想像しづらい 明示されているもののみを対象にする以外やりようはないな <宿題スレだし
こうなってくると出題者に聞いてそれに従えば一番簡単なんだけどね。
[1] 授業単元:プログラムc [2] 問題文(含コード&リンク): 円周率πを以下の式を用いて計算するプログラムを作成しなさい π=4×(arctan(1/2)+arctan(1/5)+arctan(1/8)) [3] 環境 [3.1] OS:LINUX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月28日まで [5] その他の制限: よろしくお願いします
>>514 関数 getCountBetweenLimits のなかで、
int count; ⇒ int count = 0;
int index; ⇒ int index = 0;
numbers[index] > lowerLimit ⇒ numbers[index] >= lowerLimit
numbers[index] < upperLimit ⇒ numbers[index] <= upperLimit
あと、while 内側最後で index++;
>>514 int getCountBetweenLimits(int numbers[], int lowerLimit, int upperLimit)
{
int count = 0;
int index = 0;
for(;numbers[index] != DataTerminator; index++)
{
if((numbers[index] >= lowerLimit) && (numbers[index] <= upperLimit))
{
count++;
}
}
return count;
}
521 :
デフォルトの名無しさん :2008/11/26(水) 21:31:33
どなたか494お願いします
>>521 6-1
display 関数
p = ****; ⇒ p = p->next;
insert 関数
****= n; ⇒ newnode->next = n;
****= ****; ⇒ newnode->prev = n->prev;
****= newnode; ⇒ n->prev->next = newnode;
****= newnode; ⇒ n->prev = newnode;
>>494 6-2 なんだけど、検索の関数って、何を検索すればよいかわかる?
データが一致するものとか?
宿題関係です。自分では合ってると思うのですが、実行すると動いてくれません。 [問題] 以下の文字列をアルファベット順に並べ替えるプログラムを作成せよ。 文字列の比較にはstrcmpを用いること。 char *name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL}; [自作のプログラム(前半)] #include<stdio.h> #include<string.h> void array(char *name[]){ int i, j; char *temp; i = 0; while(name[i]){ j = i + 1; while(name[j]){ if(strcmp(name[i], name[j]) < 0){ temp = name[i]; name[i] = name[j]; name[j] = temp; } j++; } i++; } }
[自作のプログラム(後半)] int main(){ int i; char *name[] = {"Wada", "Kanto", "Matsuda", "Kudo", "Sato", "Iizumi", "Sugawara", NULL}; array(name); i = 0; while(*name[i]){ printf("%s\n", *name[i]); i++; } printf("OK."); return 0; }
連レス本当にすみません。 自作プログラム(後半)の"OK."のprintfはチェック用ですので無視して下さい(^^; どうか、助言のほどよろしくお願いします。
>>525 i = 0;
while(*name[i]){
printf("%s\n", *name[i]);
i++;
}
*name[i]ではなくてname[i]だろうな、コンパイラさんちゃんと警告してあげてください。
whileではなくてforのほうがわかりやすいと思う。
qsort()使ってください。
前半で終端チェックを name[i] と正しくやってるのに 後半では while(*name[i]) ってやってる while(name[i]){ printf("%s\n", name[i]); にしないと
>>527 教授に聞いたところ、qsort()はメッ!!っということでした(^^;
また、指摘点の修正後、while(name[i])の後ろにprintf("OK.");を追加してチェックしたところ、「OK.」が人数分表示されました。
しかし、肝心の名前は表示されません…orz
先ほどから連レス本当に申し訳ないです(><;) 修正を重ね、以下のように表示できました。 Wada Sugawara Sato Matsuda Kudo Kanto Iizumi …完全に逆ですね、わかります。 あとは調整して提出できそうです。助言して頂いた皆さん、ありがとうがざいました。
>>514 void main(void)
は非常にまずい。
int main(void)
とか
int main()
とか
main()
とか。
533 :
529 :2008/11/26(水) 23:16:29
>>518 問題を間違えておりました。この問題はまだ未解答です。
しばしお待ちを。
>>518 #include <math.h>
#include <stdio.h>
int main()
{
printf("pi = %16f\n", 4 * (atan(1/2.0) + atan(1/5.0) + atan(1/8.0)));
return 0;
}
C99規格でいいならこうなるな
[1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): 西暦n 年がオリンピック年か、平年かを判別する。数値がオリンピック年だったら"Olynpic year"、平 年だったら"ordinary year"と表示する。 データは次の6 つを用意し、int 型配列変数に格納しておくこと。 1984, 1990, 1993, 1996, 2001, 2004 (このデータのうち1984, 1996, 2004 がオリンピック年) [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008/10/28 [5] その他の制限: gethar()使用 <stdio.h>のみ よろしくお願いします
537 :
451 :2008/11/26(水) 23:53:01
>>453 途中経過も表示していただき、親切なプログラムです。
どうもありがとうございました。
>>535 getchar() 使えってのが意味不明だけど、なんとなく使ってみた
#include <stdio.h>
int main()
{
int i, y[] = {1984, 1990, 1993, 1996, 2001, 2004};
for(i = 0; i < 6; i++){
if(y[i] % 4 == 0)
printf("%d is Olympic year", y[i]);
else
printf("%d is Ordinary year", y[i]);
getchar();
}
return 0;
}
540 :
デフォルトの名無しさん :2008/11/27(木) 01:41:54
[1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): コマンドライン引数を使って、年と月を指定したときにはその年月のカレンダーを、 年だけの時はその年の12か月分のカレンダーを表示するプログラムを作りなさい。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 夜が明けるまで よろしくお願いします。もしよろしければ、説明もお願いします。
[1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク):最長5文字の文字列を3件入力し、char 型の配列にそれぞれ格納する。3つの文字列 を比較し、文字列が同じだったら「○」を表示し、異なっていたら「×」を表示するプログラム 6文字以上ならスルー [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 朝まで お願いします
>>542 「6文字以上スルー」って、どういう意味?
6文字以上入力したら何も表示しない?それとも6文字以降は比較対象にしない?
>>543 6文字以上は何も表示しない
適当でそーりー
>>544 #include <stdio.h>
#include <string.h>
int main()
{
char s[3][10];
printf("String:");
scanf("%s", s[0]);
if(strlen(s[0]) > 5)
return 1;
printf("String:");
scanf("%s", s[1]);
if(strlen(s[1]) > 5)
return 1;
printf("String:");
scanf("%s", s[2]);
if(strlen(s[2]) > 5)
return 1;
if(strcmp(s[0], s[1]) == 0 && strcmp(s[1], s[2]) == 0)
printf("○\n");
else
printf("×\n");
return 0;
}
>>545 を 2次元配列使用しないで1次元配列?を使用 return を return 0 一つのみを使用して
できませんかね?
>>547 _/ ∠≠ニ二ニ≧=<´ ヘ. ', ヘ\ヽ. /
_ -‐ ´/ , -‐´、_, '⌒`^ 、 \::\ } l ヽヘ ヽ} / _|_ \
 ̄ フ´, / 丶\::V| | Vl ,' |____
. //./ `Vヽl | ヽ ' . | /| ヽ
/ ,イ/ Y/, ヽ.\ |. l (_ノ _ノ
|/ / | ∨ヘ. ト、 \_ |. |
. / / / l: / l ∨i 、 |  ̄ ! l lヽ│/ /
l│ / イ ,イ. l ト、ヽ / | :l :| | l | ヽ_ノ !ー┼‐ |‐┬
| | l_メ、」_,;./l L l V ∧ / :|/ ハ. ト、 | |./│ヽ l |
| ト. |.____ ヽ l´ヽ{ _⊥イ イ / / / l/⌒ヽ .| ー┼─ └── l |
| | ヽ | 、i┘::::i \ | r┬┬‐┬ァ V ,∧. ,' ´ | ー┼−
レ ヽ! ゝ- ' \l i,.┘:::::iノ / ,/〉│ :| { | _⊥_ l |
. 7/l/l/ 、 `'ー‐ ' ∠≠r'ノ:jノ :| | | (__丿 ヽ レ |
λ `i`ァー-- 、 /l/l/l ∧‐'.:|:::| ハ ', | l
`、 レ' ', ,/| ::| :|:::| ./ ヽ_> _| __|_ _ノ
` = 、 '、 ノ ,.イ∧'|:l.:/l:::|´ \ ._|
`>-r =ニi´、.,_`::: |:| { |:::l | .(_|
_,.イ´ヽ.7 / /:\;八:V:ノ | ノ
/7:::::! ○O'´ /::::::::/ヽ.
/ /:::::::レ'/ムヽ. /::::::::/ ヽ.
[1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): 入力した文字に応じたプログラムの作成 【'a'or'A'】→”続行”を出力する(プログラムは終わらない) 【'b'or'B'】→プログラムを終了する 【その他】→”エラーです”を出力する [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 今日中 よろしくお願いします。細かく解説していただければ幸いです。
>>550 改行文字はどうする?無視したほうがいい?エラー扱いにする?
スペースも
>>547 #include <stdio.h>
#include <string.h>
int main()
{
char s0[6], s1[6], s2[6];
scanf("%s", s0);
if(strlen(s0) <= 5){
scanf("%s", s1);
if(strlen(s1) <= 5){
scanf("%s", s2);
if(strlen(s2) <= 5){
if(strcmp(s0, s1) == 0 && strcmp(s1, s2) == 0)
printf("○\n");
else
printf("×\n");
}
}
}
return 0;
}
>>550 #include <stdio.h>
int main()
{
int c;
while (1) {
c = getchar();
switch (c) {
case 'A': case 'a':
printf("続行\n"); /* A, aだったので終了する */
break;
case 'B': case 'b':
return 0; /* B, bだったので終了する */
break;
default:
printf("エラーです\n"); /* それら以外なのでエラーを表示 */
}
}
}
[1] 授業単元:ソフトウェア演習B [2] 問題文(含コード&リンク): 文字列を格納する配列へのポインタ変数textとkeyを引数に持ち、 extが示す文字列にkeyが示す文字列が出現する回数を返す関数pattern_match_num()を作成し、 これを用いて、textが示す文字列とkeyが示す文字列をプログラム中で与え、 出現回数を標準出力で表示するプログラムを作成せよ。 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: ? [3.3] 言語: C [4] 期限: ([2008年11月27日11:00まで] [5] その他の制限: よろしくお願いします
559 :
デフォルトの名無しさん :2008/11/27(木) 02:53:15
>>523 たしか、検索するのは最初にユーザが適当に数値を10個ぐらいいれて、その中から
検索したい数値があるかどうかを検索するって感じです
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8119.c ↑のカレンダーの年月の指定について、月を数字だけでなく英語(Novemberなど)でも
指定できるようにせよ。また、適切でない入力がなされた場合には
その旨エラー表示し、再度入力を促すようにせよ。
( ユーザからの入力をscanf()でうけとるのではなく、gets()でいったん
文字列として受け取り、それの内容を検査するという処理が必要になる。)
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008年11月29日
[5] その他の制限:関数で関数プロトタイプ、再帰、引数の値渡しと参照渡しを
習ったばかりです。
よろしくおねがいします。
562 :
デフォルトの名無しさん :2008/11/27(木) 11:11:45
>>561 何がわからないのかな
入力部分を変えるだけで、他のルーチンはいじら無いと思うけど。。。
>暇な奴
厳密に言うと、Cに参照渡しはなかった気がするが俺の気のせいか?
ポインタで似たような機能は実装できたはずだけど・・・
テーラー級数の板書写し間違いだと思う。 一応数学板に問い合わせて
>>561 たたき台のプログラムちゃんと動作しないぞ
>>565 は
January + 余計な文字を入力しても、Januaryが一致していればおkってことで。
568 :
563 :2008/11/27(木) 11:38:43
>>564 分かりました。確認してみます。
ありがとうございました
569 :
561 :2008/11/27(木) 11:40:53
570 :
デフォルトの名無しさん :2008/11/27(木) 11:44:02
>>568 一応これで動いたがな 2.0 近くなると収束しねぇ
#include <stdio.h>
int main()
{
double X, logX = 0.0, a_n, n;
printf("Real number:");
scanf("%lf", &X);
if(X > 2.0 || X < 0.0){
printf("%f: Out of range\n", X);
return 1;
}
a_n = -1.0;
for(n = 1.0; a_n > 1e-8 || a_n < -1e-8; n += 1.0){
a_n *= -(X - 1.0);
logX += a_n/n;
}
printf("log %f = %f\n", X, logX);
}
>>569 今月の出力結果↓たぶん1週目の空白の数がおかしい
Year?: 2008
Month?: 11
Su Mo Tu We Th Fr Sa
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
573 :
561 :2008/11/27(木) 12:02:05
>>572 本当だ・・・。12月は少しずれてただけなのに11月や10月は1週目が
おかしいですね。講師の人が適当に作ったのだと思います。
>>565 で直っているのでたぶん大丈夫です
575 :
563 :2008/11/27(木) 12:11:44
>>571 収束チェックする対象は a_n/n じゃね?
まあ、分母の進みは遅いからやっぱり収束に時間かかりそうだけど
577 :
571 :2008/11/27(木) 12:24:11
>>576 あー、そうだね
あと、0 と 2 ちょうども除外しないと半径1になって多分永久に収束しないかな
>>577 a_n であれば X=2 の時 -1⇔ 1の発振をおこすけど
a_n/n だったら n が増加関数なので振動収束するよん
579 :
デフォルトの名無しさん :2008/11/27(木) 12:43:22
>>560 先生に聞いたらそれでいいみたいです
削除の方もそんな感じで、ユーザーに数入れてもらって、後から消すという感じ
6-4番は、対象のデータがあるのですが、容量が大きすぎてダメだったのでいいです
>>579 むしろSample-6-1-revは誰が書いたコードなのか気になる。
582 :
デフォルトの名無しさん :2008/11/27(木) 13:32:52
583 :
デフォルトの名無しさん :2008/11/27(木) 14:13:42
[1]授業単元:プログラミング [2]問題文:自然対数の底の値(e=2.718282...,小数点以下12桁まで)を求めるプログラムを作成せよ。 [3]環境 [3.1]OS:indows [3.2]コンパイラ名とバージョン:? [3.3]言語:C++ [5]その他の制限:なし(できれば簡単なものを・・・) 素人なもんで・・・すいません。 どなたかよろしくお願いします。。。 ちなみに締め切りは月曜ですOrz
584 :
デフォルトの名無しさん :2008/11/27(木) 14:31:24
すいません
>>583 の[3]は、visual C++ でした・・・
>>583 #include <cmath>
#include <cstdio>
int main()
{
double e = exp(1);
printf("e = %.12lf\n", e);
return 0;
}
/* 自然体数の底を求める「関数」を作れとは言われてないもんね */
586 :
デフォルトの名無しさん :2008/11/27(木) 14:37:15
[1]授業単元:プログラミング [2]問題文: 生徒のテストの成績を表す構造体を定義し,下記の出席番号と得点リストの内容を格納する変数を作 り,最も得点の高い生徒を検索して,その生徒の情報を出力するプログラム. 生徒の情報を表す構造体は以下のメンバーを持つ. 出席番号(int) 得点(int) 出席番号と得点リスト 出席番号 得点 1 54 2 0 3 65 4 70 なお、出席番号と得点がプログラムで入力すること 実行例 $ ./a 出席番号 得点 4 70 [3]環境 [3.1]OS:Windows XP [3.2]コンパイラ名とバージョン:Cygwin [3.3]言語:C [5]その他の制限:まだまだ序の口・・・らしいです。 どうか宜しくお願いします。
588 :
デフォルトの名無しさん :2008/11/27(木) 14:44:07
>>585 さん
ホント助かりますm(__)m
ありがとうございました。。
>>586 何人分まで用意するの?
おそらく配列つかえって趣旨なんだろうけど
591 :
デフォルトの名無しさん :2008/11/27(木) 14:53:31
592 :
590 :2008/11/27(木) 15:12:25
>>586 何度も読み返してみたんだけどわからない
> 出席番号と得点がプログラムで入力すること
これどういう意味?問題では4人分のデータを使うよう書かれてるけど、
それは実行時に手で入力しろってこと?それとも、4人分のデータは
あらかじめプログラムのコードに埋めておけってこと?
実行例は、最高得点だけが出力されているように見える。
>>583 問題文の空気読んだらこんな感じかなぁ
#include <cstdio>
int main()
{
double e = 1.0, r_n = 1.0;
int n;
for(n = 1; r_n > 1e-12; n++){
r_n *= 1.0/n;
e += r_n;
}
printf("e = %.12f\n", e);
}
文意を読めないアスペルガー症候群の人が頑張っています。
[1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): ・入力された文字列中に特定の文字がいくつあるか調べるプログラムを作成せよ -特定の文字は最初に入力してもらう ・scanfを使って -文字列はgetcharを使って入力 実行例 数える文字を入力: a ↓ 文字列を入力してください(Ctrl-zで終了) minamotono ↓ yoritomo ↓ nihonn ↓ [Ctrl-z] aは1個ありました [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月28日(金)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子 配列の初期化、2次元配列、文字コード、文字データ(char型) getchar、putcharは習いました。 お願いします。
>>586 > 出席番号と得点がプログラムで入力する
これを「出席番号と得点をハードコードする」と読んだ
#include <stdio.h>
int main(void)
{
struct {
int n;
int score;
} grade[4] = {
{1, 54},
{2, 0},
{3, 65},
{4, 70},
}, max;
max = grade[0];
int i;
for (i = 1; i < sizeof(grade)/sizeof(grade[0]); i++) {
if (max.score < grade[i].score) {
max = grade[i];
}
}
puts("出席番号 得点");
printf("%d %d\n", max.n, max.score);
return 0;
}
>>595 #include <stdio.h>
int main(void)
{
int c;
char buf[255];
int count = 0;
int i;
printf("数える文字を入力: ");
c = getchar();
puts("文字列を入力してください(Ctrl-Zで終了)");
while (scanf("%s", buf) != EOF) {
for (i = 0; buf[i] != '\0'; i++) {
if (buf[i] == c) {
count++;
}
}
}
printf("%c は %d個ありました\n", c, count);
return 0;
}
>>598 本当に有難う御座いました。
大変助かりました。
[1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): ・入力されたアルファベットの大文字と小文字を反転して表示するプログラムを作成せよ -アルファベット以外はそのまま表示 以下のライブラリ関数を使う ・isupper(c):cが大文字なら真になる ・islower(c):cが小文字なら真になる 実行例 文字列を入力してください(Ctrl-zで終了) Odanobunaga ↓ oDANOBUNAGA D51 ↓ d51 [Ctrl-z] [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月28日(金)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子 配列の初期化、2次元配列、文字コード、文字データ(char型) getchar、putcharは習いました。 お願いします。
>>600 > 以下のライブラリ関数を使う
いや、指定されていて出来ないってのも、どうかと・・・それ使ってぇ〜おねがーい
#include <stdio.h> #include <ctype.h> int main() { int c; printf("文字列を入力してください(Ctrl-zで終了)\n"); while ((c = getchar()) != EOF) { if (islower(c)) putchar(toupper(c)); else if (isupper(c)) putchar(tolower(c)); else putchar(c); } return 0; }
604 :
デフォルトの名無しさん :2008/11/27(木) 17:30:57
[1] 授業単元: C言語 [2] 問題文: 「Hit & Blow」をつくる ・乱数を用いて4桁の数をきめる。乱数は以下のプログラムを利用する ----乱数ここから---- #include <stdio.h> #include <stdlib.h> #include <time.h> void main(void){ int n; srand(time(0)); n = rand()%10000; printf("%d\n",n); } ----ここまで---- ・キーボードから4桁の数を入力 ※ 改行、%などの余計な入力を受け付けないようにする ・入力された数が場所・数ともに一致ならばH、数のみ一致ならBと判定 例) 決めた数:1234 入力:1546 → 「1H1B」 決めた数:1234 入力:1844 → 「2H0B」(Hit優先) ・当るまで繰りか牛、何回目で4Hになるか判定 例) 「あなたは 10 回目で当りました」 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual Studio .NET [3.3] 言語: C [4] 期限: 11/28 [5] その他の制限 【printf,scanf,if,while,配列】以外は使用しない(forなども×) 宜しくお願い致します。
[1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): ・自分の名字と名前を2つの文字列に代入し、 -名字は変数の初期化、名前はstrcpyを使って 以下のように表示するプログラムを作成せよ 名字は〜、名前は〜です 名前の最後の文字は〜です -名前の最後の文字は文字列が入った配列に適当な添字を指定して表示すること -名字はYamada 名前はTarouでお願いします 実行結果(Yamada Tarou の場合) 名字は Yamada, 名前は Tarouです 名前の最後の文字は uです [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月28日(金)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子 配列の初期化、2次元配列、文字コード、文字データ(char型) getchar、putcharは習いました。 お願いします。
名字は下のプログラムを参考にお願いします。 #include <stdio.h> int main(void) { char str[ ]="Yamada"; printf("%s\n", str); return 0; } 名前は下のプログラムを参考にお願いします。 #include <stdio.h> #include <string.h> int main(void) { char str[6]; strcpy(str, "Tarou"); printf("%s\n", str); return 0; }
>>605 一体何が分からないんだろう。。。
#include <stdio.h>
#include <string.h>
int main(void)
{
char family[] = "Yamada";
char given[32];
strcpy(given, "Tarou");
printf("名字は %s、名前は %s です\n", family, given);
printf("名前の最後の文字は %c です\n", given[strlen(given)-1]);
return 0;
}
609 :
607 :2008/11/27(木) 18:57:41
>>604 デバッグのために正解出力したままだったw
printf("%dH%dB (%4d)\n", h, b, n);
↓
printf("%dH%dB\n", h, b);
としてくだしあ
610 :
デフォルトの名無しさん :2008/11/27(木) 19:37:52
>>609 有難う御座います。
HとBが重なったときには、Hを優先し、
Bのカウントにはいれたくないのですが、どのようにすればよいでしょうか?
ご教授頂けると幸いです。
611 :
デフォルトの名無しさん :2008/11/27(木) 19:46:23
>>610 続きです。
charは習っていないのですが、intではダメでしょうか?
最後がおかしくなってしまいましたが、宜しくお願いします。
>>615 - top[i] = malloc(sizeof(float));
+ top[i] = malloc(sizeof(float)*3);
じゃないか?
617 :
615 :2008/11/27(木) 23:01:45
>>536 お礼が遅れて申し訳ありませんでした。ありがとうございます。
コンパイルしてみたところ、70行目付近の
for(i=(long)(0.5 * PRECISION/ log10(k))・・・・・
の行が、デクリメント演算子が云々ということで通りませんでした。どうすればいいんでしょうか…
619 :
615 :2008/11/27(木) 23:12:00
もう一か所間違いあった 2つめの for ループは for(i = 0; i < n_ver; i++){ じゃなくて for(i = 0; i < n_pol; i++){ が正解
>>615 迅速な回答ありがとうございます<(_ _)>
動作確認してみましたがうまく取り込めていました!
ポリゴンデータの先頭の数値はたぶん1ファイルで3ならずっと3
4ならずっと4とかになると思いますのでn_elemを参照すれば大丈夫そうです。
大変助かりました、ありがとうございました!
動作確認した時は正確な結果が得られていたのですが、少し訂正して確認 してみます@@ 訂正助かります<(_ _)>
>>610 重複の考え方なんだけど、
正解 1234
入力 1844
これは、入力の1つ1つの数に対して、Hit があれば Hit 加算、なければ
1 → 1 hit
8 → 1 → 2 → 3 → 4 → 該当なし
4 → 1 → 2 → 3 → 4 → Blow +1
4 → 1 → 2 → 3 → 4 → Hit +1
この場合、3つめの4についてはBlowとカウントしないってこと?
623 :
622 :2008/11/27(木) 23:47:30
624 :
622 :2008/11/27(木) 23:49:41
あー、あと最後のほうの if (h == 4) は if (n_h == 4) です。こうしないと終われないw
>>610 横からだが
正解 1234
入力 4444
だったら、 Hit 1, Blow 0 ?
正解 1234
入力 4456
だとどうなる?
626 :
デフォルトの名無しさん :2008/11/28(金) 00:20:23
>>625 正解 1234、入力 4444 → Hit 1 Blow 0
正解 1234、入力 4456 → Hit 0 Blow 1
となります。HitとBlowが重複する場合は、Blowはカウントしません。
【質問テンプレ】 [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): 単振り子の運動方程式 θ''=-(g/l)sinθ、θ'(0)=0、θ(0)=Θ の厳密な数値解を初期振れ角Θを起動時に指定して、アニメーション表示させるプログラムを作成しなさい。 [3] 環境 [3.1] OS:Windows/ [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C [4] 期限:2008年12月11日まで [5] その他の制限:特になし
628 :
デフォルトの名無しさん :2008/11/28(金) 00:55:28
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 以下のマップを時間発展させるプログラムを書きなさい。(最大ステップ数は70程度) Xn+1 = 2Xn (0≦Xn≦1/2) 2(1-xn) (1/2≦Xn≦1) ちなみに、X1=2/5でおねがいします。 [3]環境 [3.1] Unix [3.2] gcc [3.3] C [4] 期限: 本日中 よろしくお願いします。
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): a:3人、7教科のテストの点数のうちTop3の人名と教科名を表示するプログラムを作成せよ(人名、教科名、点数は任意とします) b:入力した生年月日に対し下記の情報を表示するプログラムを作成せよ ・現在の年齢 ・産まれた年の干支、曜日 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:VC 6.0 [3.3] 言語:C よろしくお願いします。
[1] プログラミング言語C++
[2] x,y座標において入力された場所から8×7の座標軸で、(4,0)か(4,7)のところまで点を移動させる
x軸では(0,a)になったらx軸方向の速さは+、(8,a)になったら−、
y軸では(b,0)で+、(b,7)で−の速さをというように反射しながら点両軸に1マスずつを動かす
動く方向は(vx,vy)で表す
ボールの位置(x、y)および速度(vx、vy)を構造体の変数とするように書き換えろ
また、(x,y)(vx,vy)を更新する関数も構造体の関数とするように書き換えよ
[3] 環境
[3.1] OS: Windowsビスタ
[3.2] コンパイラ名とバージョン:よくわかりませんがフォートランビルダーを使っています
一応visualC++もあります
[3.3] 言語:C++
[4] 期限: もう過ぎているんですが自分で完成させたいので、学校が始まる明日9時までにお願いします
[5] その他の制限: if,else,関数のプロトタイプ宣言,『構造体』←今回のメインです
すごい時間がないですがよろしければお願いします
アップローダに一応自分が頑張ってみたC++ファイルを載せておきました
よければそちらも見てください
>>1 テンプレにあるアップローダの記事番号8131です
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
>>612 数学アルゴリズムの問題
要するに、(xy) % n ==( (x % n)*(y % n) )% nが成り立つことが本質
これより(x^m) % n = ( (x % n)^m ) % nが成り立つ。(x,y>0)
(^はC言語では別の意味で使われる記号だが、ここではべき乗の意味)
最初のプログラムは、(x^b % n)を計算するプログラム。
但しb以下のベキ乗に対しても計算結果を出力している。
2番目のプログラムも結果的に(x^b % n)を計算し表示するプログラム
x=11
b=12
として説明
12= 2^3+2^2=2^3+2^2
x^13=x^(2^3+2^2+2^0)=x^(2^3)*x^(2^2)*x^(2^0)
x^(2^3)=(x^2)^3 二乗する操作を3回行う
x^(2^2)=(x^2)^2 二乗する操作を2回行う
この2つをかけたものを%nしたものが答え
プログラムでは、公式(xy)^m=x^m y^mを利用して
一つのループで、上の2つの掛け合わせた結果を求めている。
632 :
631 :2008/11/28(金) 02:18:23
x^(2^3) = (x^2)^3 この式は間違いなので忘れて x^(2^3)を求める操作は、ある変数にxを入れてそれを 二乗する操作を3回行うことで求められることは正しい ので、大意は631の通り
633 :
612 :2008/11/28(金) 02:34:49
>631 サンクスです
>>608 本当に有り難う御座いました。
大変助かりました。
>>626 同じ数字を2回使えるんだね。
正解 1123 入力 4114だったらHit 1 Blow 1でいいのかな。
>>634 何が分からなかったのかは秘密ですよね。
[1] プログラミングc [2]最大6 桁の整数を3 つ入力させ、int 型の配列にそれぞれ格納する。 入力終了後、3 数値の和を求め出力するプログラムを作成しなさい。ただし、7桁以上 の文字列が入力された場合は、先頭から6 文字までを有効とし、7 文字目以降を無視す る。また、負の数が入力された場合はエラーメッセージを表示しプログラムを終了す る。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:朝まで エラー仕様 7 桁以上の文字列が入力された先頭から6 文字までを有効とし、7 文字目 以降を無視する。 #include <stdio.h> #include <string.h> main() { int a[3]; int i; for(i = 0; i < 3; i++) { scanf("%d", &a[i]); } printf("%d\n", a[0] + a[1] + a[2] ); return 0; } ここまではなんとかできたのですが 最大桁数とエラー仕様がわかりません お願いします
>>637 制限とか細かいこと書いてないので atoi 使った。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int a[3], i;
char buf[10];
for(i = 0; i < 3; i++) {
scanf("%s", buf);
buf[6] = '\0'; /* 7文字目にNULL文字を強制挿入 */
a[i] = atoi(buf);
if(a[i] < 0){
printf("負の数は無効です\n");
return 1;
}
}
printf("%d\n", a[0] + a[1] + a[2]);
return 0;
}
639 :
629 :2008/11/28(金) 04:36:13
期限書き忘れてました 11/28 12:00までです。
>>629 習った範囲を書けよ
極端な話変数も配列も使わずに scanf と printf でベタ出力したってできちまうぞ
>>628 課題の趣旨は実数加減算の誤差を調べることかな?
#include <stdio.h>
int main()
{
double Xn = 2.0/5.0;
int i;
for(i = 1; i < 70; i++){
printf("X%d: %.15f\n", i, Xn);
if(Xn < 0.5)
Xn = 2 * Xn;
else
Xn = 2 * (1 - Xn);
}
printf("X%d: %.15f\n", i, Xn);
return 0;
}
643 :
629 :2008/11/28(金) 10:02:00
644 :
629 :2008/11/28(金) 11:30:44
[1] 授業単元:Linuxシステムプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8136.zip [3]環境
[3.1] Linux
[3.2] gcc 4.1.2
[3.3] C
[4] 期限: 11/28(金)中くらいだと助かります。
[5] 補足
C言語初心者です。1問目は共有メモリ、2問目は共有メモリ+セマフォの問題です。
1問目はウェブで調べた内容を元に何とか自力でやったものをアップしました。
2問目はそれを改造してセマフォによる同期処理を追加するらしいのですが、ウェブで
調べてもセマフォに関する情報が難しくてあまり理解出来ませんでした。どなたか
1問目のファイルに処理を追記してもらえると助かります。
(問題の仕様が曖昧かも知れませんが、適当な感じで構わないです。)
[1] 授業単元:Cプログラミング [2] 構造体 struct data{int a; char b;}c[128],d[128];の中から、 c.aの数値を大きい順にヒープソートで並べ直し、結果を構造体dへ格納・表示する。 [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] 言語: C [4] 期限: 2008年11月28日19:30まで 別なプログラムの実行結果をヒープソートで整理するというもので、元データを構造体に格納する ところまでは出来たのですが、その先が分かりません。 ヒープソートの解説サイトを調べてみたのですが、構造体を利用しているものがなく、 よく分かりませんでした。期限が短くて申し訳ないのですが、よろしくお願いします。
>>583 の、標準ライブラリを使わずに、自分で桁などを指定して
求めるコードが書けたんだが、もう遅いか・・・次に似た課題が出たら出すか。
651 :
646 :2008/11/28(金) 17:12:21
>>647 とてもわかりやすいコード有り難うございました。
(1)の方はコンパイルと実行が上手く行きました。
(2)の方ですが私の環境だと上手くコンパイル出来ません。。
環境はLinux Debian(英語版)、gcc 4.12です。(ソース中の日本語はアルファベットに変換済)
以下、gccのエラーメッセージですが何かわかりますでしょうか。sem.h, sem.c, producer.c, consumer.c
の全てを同一ディレクトリに置いて実行しています。
$ gcc -Wall -c sem.c (成功)
$ gcc -Wall -o consumer.c sem.o
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o: In function `_start':
../sysdeps/i386/elf/start.S:115: undefined reference to `main'
collect2: ld returned 1 exit status
このエラーが出ると、consumer.cファイルは削除されてしまうようです。
同様に、producer.cをコンパイルしても同じエラーとファイル削除が起こります。
652 :
646 :2008/11/28(金) 17:16:58
自己レスです。実行コマンドに誤りがありました。 > $ gcc -Wall -o consumer.c sem.o $ gcc -Wall consumer.c sem.o -o consumer $ gcc -Wall producer.c sem.o -o producer ですね。上手く行きました。有り難うございました! →647
×構造体にするところが分からない ○全くなにも分からない
656 :
647 :2008/11/28(金) 18:07:34
>>646 時間がなくて焦って作ったから、コマンドライン書き間違ってた。
共有メモリには、参照カウンタ付けた方がいいな、と今読んでいて思った。
が、後悔はしていない。Linuxならきっとなんとかしてくれる。という妄想。
1日ROMってまつ。
[1] 授業単元:Cプログラミング基礎
[2] 問題文(含コード&リンク):
次の図のように33個の節点が抵抗で繋がれた電気回路がある。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8141.zip ただし、全ての抵抗の抵抗値は同じである。
ここで、AB間に5Vの電源を接続し、Aの電位を5V、Bの電位の0Vとしたとき、残りの31点の電位を計算せよ。
[3] 環境
[3.1] OS:Windows/
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語:C
[4] 期限: ([2008年12月19日まで]
[5] その他の制限:各節点の電位を未知数とする連立方程式を立て、それをガウスの消去法で解けばよい。
各節点に対して、「流れ込む電流の和は0」という法則で方程式を作れるはず。
>>653 大変参考になりました。
現状、単体では動作していますが、組み合わせると大量にエラーが返されてしまうので、
教えていただいたコードを元に修正を加えていこうと思います。
ありがとうございました。
659 :
ruru :2008/11/28(金) 21:57:09
よろしくお願いしますっ!!! [1]プログラミング1 [2]課題 1990年1月1日以降の年月日をキーボードから入力すると、 それが何曜日かを表示するプログラムを作りなさい。 [条件] @年、月、日の順にキーボードから入力すると 曜日が表示されるようにすること。 A1990年1月1日が月曜日であることは既知であるとする。 Bうるう年の条件 「4の倍数で、100の倍数ではない」あるいは 「400の倍数である」も既知であるとする。 [3] 環境 [3.1] windowsXP [3.2] Microsoft Visual studio 2005 [3.3] C言語 [4] 2008/12/01 12:00 [5] まったくの初心者の状態から、 変数を使ったプログラミング→データの出入力→変数と演算子→条件分岐 という手順で授業が進み、今回の学習目標が 「条件分岐 switch を使うことができる」 です。
661 :
ruru :2008/11/28(金) 22:23:39
662 :
◆Ao6dpGb6Jk :2008/11/28(金) 22:43:26
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク):以下の仕様を満たすプログラムを作成せよ。 【銀行ATM】 ・実際のATMの機能を網羅する ・通帳記入によりファイルに情報を出力 ・顧客情報のデータベースを作成 ・エラー所処理 ・独自の機能を一つ以上加える [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual C++ [3.3] 言語: どちらでも可 [4] 期限: 2008年12月2日10:00 [5] 全スレにも同様な質問がございましたがリンク切れのため、どなたかよろしくお願いいたします。
んじゃ今回の課題は今までの学習内容で実装できるからまずはそれをがんばればいいとおもうよ。 switchの使い道が思い浮かばないんだが、無理矢理使うとしてもここぐらい? switch(dayofweek) { case 0: printf("日曜日"); break; case 1: printf("日曜日"); break; ・・・ default: printf("バグってすみません"); break; }
>>662 ・実際のATMの機能一覧
・通帳に見立てたファイルのフォーマット
・使用するDBMS
・エラー通知方法(メール送信?イベントログ?独自プロトコルで別マシンに通知?)
・加えようと思う機能
とりあえずこれくらいは伝えておかないと想定外のものが出てくると思うよ。
これはひどいw
667 :
665 :2008/11/28(金) 22:59:50
間違えた。。 ↓の365と366が逆だった。 /* 1990年からの日数を数える */ switch(bis){ case 0: days += 366; break; case 1: days += 365; break; default: break; }
>>659 #include <stdio.h>
int main()
{
int h,y,m,d,w;
char*wn[]={{"日"},{"月"},{"火"},{"水"},{"木"},{"金"},{"土"}};
printf("日付を入力してください(YYYY/MM/DD) ");
scanf("%4d/%2d/%2d",&y,&m,&d);
if(m<3){--y;m+=12;}
w=(y+y/4-y/100+y/400+(13*m+8)/5+d)%7;
printf("%s曜日",wn[w]);
return 0;
}
>>669 #include <stdio.h>
int main()
{
int h,y,m,d,w;
char*wn[]={{"日"},{"月"},{"火"},{"水"},{"木"},{"金"},{"土"}};
printf("日付を入力してください(YYYY/MM/DD) ");
scanf("%4d/%2d/%2d",&y,&m,&d);
if(m<3){--y;m+=12;}
w=(y+y/4-y/100+y/400+(13*m+8)/5+d)%7;
printf("%s曜日",wn[w]);
switch(w){
case 0:break;
default:break;
}
return 0;
}
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): void main() { int i,j,data[5][4]; for (j=0;j<=3;j++){ data[4][j]=0; } for (i=0;i<=3;i++){ data[i][3]=0; for (j=0;j<=2;j++){ printf("data[%d][%d]=",i,j); scanf("%d",&data[i][j]); data[i][3]+=data[i][j]; data[4][i]+=data[i][j]; data[4][3]+=data[i][j]; } } for(i=0;i<=4;i++){ for(j=0;j<=3;j++){ printf("%4d",data[i][j]); } printf("\n"); } }
これを↓のように表示するように改良する 右下の合計と平均の文字は要りません 国語 数学 英語 |合計 |平均 75 35 40 | | 69 75 82 | | 57 48 36 | | 30 60 50 | | ------------------------------------- 合計 | 平均 | [3] 環境:ポケコンに打つんでよく分かりません [4] 期限:12月1日 [5] その他の制限:特になし お願いします
>>670 switchを使うべき箇所が見つからなかったという意思表示が見られるのでよいと思う
>>674 実際のATMの機能を網羅する、からずいぶんと機能落ちしたなあ。
Excelの読み書きってbiff扱うライブラリ持ってるの?xlsx形式?にしてもxmlパーサを使うか作るかしなきゃならない。
期間的にテキストを選ばざるを得ないだろうけれど。
フォーマットもなにもあったもんじゃないね。
顧客データの保存形式はどうするのとかもうね、なんで今になるまでほっといたの?
少なくとも1ヶ月くらいは期間くれてないと学生には厳しくないかい
677 :
デフォルトの名無しさん :2008/11/28(金) 23:42:38
[1] 授業単元: Cプログラミング言語演習 [2] 問題文(含コード&リンク):英語→日本語に変換するプログラムを作りなさい。 次の3段階で構成すること。 @単語の登録(10単語) char word[][2][40]={{"apple","ringo"},{"dog","inu"},・・・・} Aキーボードからの入力(英単語) B入力した値が@の英単語に含まれていれば日本語を出力させて、そうでなければエラーを表示させる関数 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Microsoft Visual studio2005 [3.3] 言語: C++ [4] 期限: 2008年12月4日 [5] その他の制限: ポインタは使用不可、"strcmp"を使用することです。 よろしくお願いします。
>>677 #include <stdio.h>
#include <string.h>
int main()
{
char word[][2][40]={{"apple","ringo"},{"dog","inu"}};
char w[5000];
unsigned int i;
scanf("%4999s", w);
for (i = 0; i < sizeof(word) / sizeof(word[0]); ++i) {
if (!strcmp(w, word[i][0])) {
puts(word[i][1]);
return 0;
}
}
puts("エラーです");
return 0;
}
単語は自分で足してくれ
679 :
デフォルトの名無しさん :2008/11/29(土) 00:51:32
>>679 #include <iostream>
class Rectangle {
int width, height;
public:
void setWidthHeight(int w, int h) {
std::cout << "横幅に" << w << "が高さに" << h
<< "が入力されました" << std::endl;
if ( w < 0 || h < 0) {
width = 0;
height = 0;
std::cout << "横幅や高さには正の値を入れる必要があります。"
"どちらも0にします。" << std::endl;
} else {
width = w;
height = h;
}
}
void calcArea() {
std::cout << "面積は" << width * height << "です。" << std::endl;
}
};
int main()
{
Rectangle r;
r.setWidthHeight(6, 8);
r.calcArea();
r.setWidthHeight(-6, 8);
r.calcArea();
return 0;
}
よろしくおねがいします。 [1] 授業単元:c++入門 [2] 問題文(含コード&リンク):実行するたびにランダムな 10文字の文字列を生成するプログラムを作成しなさい [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: g++ (GCC) 4.2.4 [3.3] 言語: C++ [4] 期限: 2008年11月30日16:00まで [5] その他の制限:
[1] 授業単元:Cプログラミング基礎
[2] 問題文(含コード&リンク):
次の図のように33個の節点が抵抗で繋がれた電気回路がある。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8141.zip ただし、全ての抵抗の抵抗値は同じである。
ここで、AB間に5Vの電源を接続し、Aの電位を5V、Bの電位の0Vとしたとき、残りの31点の電位を計算せよ。
[3] 環境
[3.1] OS:Windows/
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語:C
[4] 期限: ([2008年12月19日まで]
[5] その他の制限:各節点の電位を未知数とする連立方程式を立て、それをガウスの消去法で解けばよい。
各節点に対して、「流れ込む電流の和は0」という法則で方程式を作れるはず。
お願いします。
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): 単振り子の運動方程式 θ''=-(g/l)sinθ、θ'(0)=0、θ(0)=Θ の厳密な数値解を初期振れ角Θを起動時に指定して、アニメーション表示させるプログラムを作成しなさい。 [3] 環境 [3.1] OS:Windows/ [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C [4] 期限:2008年12月11日まで [5] その他の制限:特になし お願いします。
684 :
デフォルトの名無しさん :2008/11/29(土) 01:25:31
[1] 授業単元:if文,while文,配列
[2] 問題文:
1H1Bを作りなさい。
(1)乱数を用いて答えとなる4桁の数字を決める。
(2)キーボードから4桁の数字を入力する。(4桁の数字以外を入力したらエラーを表示する)
(3)数字と場所が一致していたらH、数字のみ一致していたらBと判定する。
[例:答え1234 入力1324 判定2H2B, 答え1134 入力1111 判定2H2B]
(4)4H0Bになるまで入力と判定を繰り返し、4H0Bになったまでの回数を表示する。
[3] 環境
[3.1] OS:WindowsXP
[3.2] Visual Studio .NET
[3.3] C
[4] 期限:今日の12:30
[5] printf,scanf,if,while,for,int,char,配列,乱数を発生させるプログラム(srand,rand,timeを用いたもの)
以下のようにしてみたのですが、
「答え1134 入力1111」のときに1桁目の1に対して1H3B、2桁目の1に対して1H3Bであわせて2H6Bと表示されてしまいます。
また(2)のエラーの表示ができません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8146.c よろしくお願いします。
[1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): ・入力された文字列をchar型の配列strに読み込み,それを逆順にしてchar型の配列rtsに入れるプログラムを作成せよ -配列str,rtsは大きめの要素数を確保 -入力された文字数は'\0'を探すことによってわかる 実行例 文字列を入力: osaka ↓ 反転した文字列 = akaso [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月30日(日)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子 配列の初期化、2次元配列、文字コード、文字データ(char型) getchar、putcharは習いました。 宜しくお願いします。
686 :
デフォルトの名無しさん :2008/11/29(土) 01:35:30
>>678 ありがとうございます。でもこれだといつも「エラーです」と出力されると思うんですけど。
>>686 回答者じゃないですが、そんなことはないと思うんですけど。
>>685 #include <cstdio>
#define BUFSIZE 200
int main(int argc,char **argv){
char str[BUFSIZE],rts[BUFSIZE];
int length = 0;
printf("文字列を入力:");
gets_s(str,BUFSIZE);
while(str[length] != '\0') length++;
for(int i=0;i<length;i++){
rts[i] = str[length-i-1];
}
rts[length] = '\0';
printf("反転した文字列 = %s\n",rts);
return 0;
}
>>689 #include<stdio.h>
#define SIZE 8
int main()
{
int count;
int c = 0, d;
int x[3], i;
for (i = 0; i < 3; ++i) {
count = 0;
d = 0;
while ((c = getchar()) != '\n') {
if (count < SIZE) {
d = d * 10 + (c - '0');
count++;
}
}
x[i] = d;
}
printf("%d + %d + %d = %d\n", x[0], x[1], x[2], x[0] + x[1] + x[2]);
return 0;
}
ごめん負数忘れてた、あとこれはエラーチェックを省いてるのでfとかも受け付けますが値は狂います
>>694 #include<stdio.h>
#include <stdlib.h>
#define SIZE 8
int main()
{
int count;
int c = 0, d;
int x[3], i;
for (i = 0; i < 3; ++i) {
count = 0;
d = 0;
while ((c = getchar()) != '\n') {
if (c < '0' || '9' < c ) {
printf("エラーです\n");
exit(1);
}
if (count < SIZE) {
d = d * 10 + (c - '0');
count++;
}
}
x[i] = d;
}
printf("%d + %d + %d = %d\n", x[0], x[1], x[2], x[0] + x[1] + x[2]);
return 0;
}
負数に対応、というより数字以外を受けるとエラーを表示して終了することで
-があれば終了するというものです
見えた
>>698 これは確か初等関数の範囲外だったかと。
702 :
デフォルトの名無しさん :2008/11/29(土) 09:42:03
>>690 同じ内容の課題です、同じ授業をとってる人かもしれません。
>>681 #include <iostream>
#include <sstream>
#include <cstdlib>
#include <ctime>
int main(void)
{
srand(time(NULL));
std::stringbuf sb;
for (int i = 0; i < 10; i++) {
sb.sputc(rand()%26+'a');
}
std::cout << sb.str() << std::endl;
return 0;
}
> それが何曜日かを表示するプログラムを作りなさい。 ツェラーの公式を使うなら、日数の合計なんて要らないじゃん・・・
パターン的に、その曜日を求めるが出てくると次はカレンダーとかって話になったりするから
>>704 の方が親切な気はする。
先読みしたつもりが、題意を無視すると、評価されんぞ・・・ まぁ、丸投げで知ったこっちゃないだろうけど、 > A1990年1月1日が月曜日であることは既知であるとする。 これがキーだな。何のために基準の年月日と曜日を問題で示したか。
>>708 俺が書いたのじゃないから知らんがな
constでintとくっついてる場所があるのはきになったけど文字コードの問題だろうし。
[1] 授業単元:Cプログラミング基礎
[2] 問題文(含コード&リンク):
次の図のように33個の節点が抵抗で繋がれた電気回路がある。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8141.zip ただし、全ての抵抗の抵抗値は同じである。
ここで、AB間に5Vの電源を接続し、Aの電位を5V、Bの電位の0Vとしたとき、残りの31点の電位を計算せよ。
[3] 環境
[3.1] OS:Windows/
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語:C
[4] 期限: ([2008年12月19日まで]
[5] その他の制限:各節点の電位を未知数とする連立方程式を立て、それをガウスの消去法で解けばよい。
各節点に対して、「流れ込む電流の和は0」という法則で方程式を作れるはず。
お願いします。
[1]授業単元;プログラミング [2]問題文 ペン1〜10個で100円 11〜100個で90円 101個以上は70円 n個買った時の値段は [3] [3.1]OS:XP [3.2]コンパイラとパーテンション:vc6.0 [4]期限:2008/12/5 お願いします
712 :
711 :2008/11/29(土) 14:45:19
101以上かったら全部70円 になるわけではありません
>>711 #include<stdio.h>
int main()
{
int n ;
printf ( "何個買いますか?->" ) ;
scanf ( "%d", &n ) ;
int price = 0 ;
for ( int i = 1 ; i <= n ; i++ ){
price += (100 - (i>10)*10 - (i>100)*20 ) ;
}
printf ( "%d円です\n", price ) ;
}
>>712 101 -> 10*100 + 90*90 + 1*70 = 9170?
>>710 式の立て方がよく分かんない。デレデレしながら教えて。
>>711 int get_price(int pen_num)
{
int price=0;
if(pen_num-100>0) price+=(pen_num-100)*70, pen_num-=pen_num-100; // pen_num-=pen_num-100 -> pen_num=100
if(pen_num-10>0) price+=(pen_num-10)*90, pen_num-=pen_num-10;
if(pen_num-0>0) price+=(pen_num-0)*100, pen_num-=pen_num-0;
return price;
}
>>715 >>657 じゃ無いけど
たとえばAの上の点V1とする
V1に入ってくる電流、出てく電流を
I2↑ I3
V1├→
I1↑
とすると
I1 = I2 + I3
∴I1 - I2 - I3 = 0
って方程式が立ってこれが各点分31個
肝心の電圧はVaから電圧降下I1*rを引いた
V1 = Va - I1*r
∴I1 = (Va - V1)/r
この式が各線分52個
Iiを代入してViについての連立方程式MV=mの形にする
V = {V1,V2,・・・,V32}'
連立方程式をガウスの消去法なりで解く
紙の上でやることがほとんど
V31までか
720 :
デフォルトの名無しさん :2008/11/29(土) 22:02:43
[1] 授業単元: 情報処理 [2] 問題文: FILE文、fopen文、fwrite文、fflush文、fclose文が全て含まれるプログラムを示せ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Borland C++ Compiler [3.3] 言語: Cのみ [4] 期限: ([2008年12月1日まで) [5] その他の制限: 特になし
_ _
/__.:.<.:.^>´.:_.:\ヘ、_
_,∠厶=::≧':∠三:::≧_` .:.:.:.:.:`丶、
'".:.:.:.: ̄.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:\.:.:.:.:.:.:.:.:.:.\
. ∠/.:.:.:.:.:.:.:.: /.:.:.:.:.:.:.:.:.:.:.:.:.:.:\.:.:.:.:.\.:.:.:.:.:.:.:.:.:.ヽ
/.:.: /.:./.:.:/.:.:.:.:.:.:.:.:.::l.:.:.:.丶:.:.ヽ.:.:.:.:.:ヽ.:.:.:.:.:.:.:.:.:.:..
/.:.: /.:./.:.:.:.::l.:.:.:.:::.:.|.:.:.::|:.:.:.:.:.:.:.:.:.:.:'..:.:.:.:.:.:'., :.:.:.:.:.:.:.:.:'.
,'.:.: /.::;'.::l.:.:::::|.:.:.:.:::.:.|.:.:.::l:.:.:.:.:.:.:::.:.:.: l:::.:.i.:.:.:.Y::::.:.:.:.:.:.l
|.:.:/|.:::|.:::|\/|.:.:.:.::|.:.ト、.;ィ⌒.:.:.::|:.:.:.:.|:::.:.|.:.:l::.l:|::::.:.:.:.:.: |
|.:/│,'|::::l.::∧|.:l.:.:::Wメ:.:lヽ::.:.:.: l:.:.:.:.|:::.;ム.:.Wl:::::.:.:.:.:.:.|
|/ j/ |::::l :::坏ハ.::T^ 行外千':.:ト::.:.∧/圦リ::::|:::::.:.:.:.:.:.|
>>718 リ:ハ::ヽ小リ ヽ{ iト沙'_ \| W 〈 \::i:::::.:.:.:.:.:.| べ、べつに感謝なんてしないからね!
ヾ∧ :::}^r'//////` ´ |{} j _,ノ::i:::::.:.:.:.:.:.|
ヽ八 ハ_厂}:::::::i:::::.:.:.:.:.:.|
\`^⌒ ,':::::{: {: }:::::::i:::::.:.:.:.:.:.|
|\ イ/:::::::{: {:_}:::::::i:::::.:.:.:.:.: |
しかし、行列の入力が半端なく面倒だな。
入力しやすいデータ構造から行列への変換処理も課題のうちか?
データ構造も変換処理も思いつかないからやんないけど。
>>710 Va = a1 * V1 + a2 * V2 + ... + a31 * V31
の式を31個分導出して欲しいです。
無茶ですか?
トリップを変更します。 うっかり消してしまいました。
725 :
721 :2008/11/30(日) 00:03:27
>>722 よくよく考えてみたら、ステップ実行で電圧を収束させる課題の気がしてきたけど、
講義の内容はどうだった?
以前のトリップがわかったので本物という証明においておきます。
#+`+`+`+`
>>725 講義では電圧云々には触れてませんでしたね
理系の学校なので他の授業でやっているだろう、みたいな言い方をされました
(できないわけですが)
キルヒホッフの法則でぐぐって自分で勉強しろ
728 :
711 :2008/11/30(日) 00:34:01
すいませんまとめて書いてください。 補足 11個買うと100*10+90です
>>725 未知数と方程式の数が同一の線型方程式解法までヒントだされてるんだから
収束させるような反復計算は不要でしょ
キルヒホッフの法則は高校時代に習ったもんだが今の3年からゆとりなんだよな
>>722 だからここにいるほとんどの人はガウスの消去法ぐらいは知っている
問題は連立方程式の立て方が分からない事だ
732 :
♯shinshu :2008/11/30(日) 00:52:00
[1] 授業単元:c言語と数値計算 [2] 問題文:(ガウスザイデル法を用いて最低四元の一次連立方程式を解くプログラムを作成せよ。尚、プログラムはキーボードからの入力に対するもので、収束判定とピボット選択を必ず入れること。) [3] 環境 [3.1] OS: (WindowsXP) [3.2] コンパイラ名とバージョン: (cygwin2007) [3.3] 言語: (C) [4] 期限: ([2008年12月01日09:00まで] [5] その他の制限: (授業で習ったのはfor文やif文などの本当に初歩の初歩ですので初心者向けにお願いします) 以上よろしくお願いします
#ではなく♯なんだな
735 :
デフォルトの名無しさん :2008/11/30(日) 01:05:25
>>733 先に書いた方がなんとなくスレチな気がしたので一応こちらに書き直しました。
マズかったでしょうか?
737 :
デフォルトの名無しさん :2008/11/30(日) 01:08:38
>>736 すみませんでした。
今から書いてきます
738 :
デフォルトの名無しさん :2008/11/30(日) 01:59:39
>>657 8154.txt
行列だけやってみた。こうじゃないかなー?
自分機械なんで正確さは保証しない
740 :
デフォルトの名無しさん :2008/11/30(日) 02:22:31
逆かな?www どっちでもいーきがしたんだけど 解いてないからわかんないな これだからゆとりは
なるほど。キルヒホッフの法則を使えば、IをVに直すのが簡単になるなのか。
[1] 授業単元 二重ループ [2] 問題文 for文を用いて二つの正の整数値width(幅),height(高さ)を読み込む。 長方形を描くときに,ふちだけ*文字を出力するようにする。長方形の中央部は,スペース 文字を使ってあける。もしwidth が5,height が4 であれば,次のように出力される。 ***** * * * * ***** [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ [3.3] 言語:C++ [4] 期限:2008年12月2日10:40まで よろしくお願いします。
>>742 #include <iostream>
int main()
{
int w = 0, h = 0;
std::cout << "w = ";
std::cin >> w;
std::cout << "h = ";
std::cin >> h;
for (int i = 0; i < h; ++i) {
if(i == 0 || i == h - 1)
for (int j = 0; j < w; ++j) {
std::cout << '*';
}
else
for (int j = 0; j < w; ++j) {
if(j == 0 || j == w - 1)
std::cout << '*';
else
std::cout << ' ';
}
std::cout << std::endl;
}
return 0;
}
[1] 授業単元:関数 [2] 問題文 二つの関数を作成しなさい (1) int min_intarray(int data[ ], int n) この関数は,要素がn 個の配列data の中の最小の値を返すものである。 (2) void print_intarray(int data[ ], int n) この関数は,要素がn個の配列data のすべての要素を横に並べて出力するものである。 その上で,次のプログラム(main 関数)を利用して,作成した関数が正しく動作しているか 確認しなさい。 int main(void) { int a[5] = {3, 5, 1, 2, 4}; int b[10] = {6, 4, 2, 5, 8, -2, 7, 0, 1, 9}; int c[4] = {-2, -3, -4, -1}; printf("%d :", min_intarray(a, 5)); print_intarray(a, 5); printf("%d :", min_intarray(b, 10)); print_intarray(b, 10); printf("%d :", min_intarray(c, 4)); print_intarray(c, 4); return 0; } [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ [3.3] 言語:C++ [4] 期限:2008年12月2日10:40まで よろしくお願いします。
[1] 授業単元:関数 [2] 問題文 関数double area(double w, double h)を作成しなさい。この関数は,w を長方形の 幅,h を長方形の高さと見なして,その長方形の面積を計算する。ただし,w 又はh が負 の値の場合は,長方形の面積はゼロとすることにする。関数を定義した上で,次のような プログラム(main 関数)を作成しなさい。 (1) 二つの実数値width(幅),height(高さ)を読み込む。長方形の面積を求めて出力し なさい。 (2) 四つの実数値width1, height1, width2, height2 を読み込む(一つ目の長方形の幅,一 つ目の長方形の高さ,二つ目の長方形の幅,二つ目の長方形の高さを意味する)。二つ の長方形の面積を出力し,さらに,一つ目の長方形と,二つ目の長方形とどちらが大き いのか,又は同じ大きさなのかを出力しなさい。 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ [3.3] 言語:C++ [4] 期限:2008年12月2日10:40まで よろしくお願いします。
>>744 #include<algorithm>
#include<iterator>
#include<iostream>
int min_intarray(int data[ ], int n) {
return *std::min_element(data,data+n);
}
void print_intarray(int data[ ], int n){
copy(data,data+n,std::ostream_iterator<int>(std::cout," "));
std::cout<<std::endl;
}
>>744 と
>>745 に追記です
初心者なので難しい関数は避けてください。
すみませんがよろしくお願いします。
>>745 #include <stdio.h>
double area(double w,double h){
if(w <0 || h <0) return 0;
return w*h;
}
int main(int argc,char **argv){
double height,width,height1,width1,height2,width2,area1,area2;
//(1)
printf("幅:\t");
scanf_s("%lf",&width);
printf("高さ:\t");
scanf_s("%lf",&height);
printf("面積:\t%lf\n",area(width,height));
printf("\n");
//(2)
printf("幅1:\t");
scanf_s("%lf",&width1);
printf("高さ1:\t");
scanf_s("%lf",&height1);
printf("面積1:\t%lf\n",area1 = area(width1,height1));
printf("幅2:\t");
scanf_s("%lf",&width2);
printf("高さ2:\t");
scanf_s("%lf",&height2);
printf("面積2:\t%lf\n",area2 = area(width2,height2));
printf("\n");
if(area1 == area2) printf("同じ大きさ\n");
else if(area1 < area2) printf("二つ目の長方形の方が大きい\n");
else printf("一つ目の長方形の方が大きい\n");
return 0;
}
>>730 おっしゃる意味がわからないのですが?ヤコビ法とかありますが。
>>730 おまえさぁ、ゆとりゆとりってうるせーよ、2次方程式の解w
752 :
デフォルトの名無しさん :2008/11/30(日) 05:18:34
469 名前:デフォルトの名無しさん 投稿日:2008/11/26(水) 06:51:21
>>443 いいえ。a == 0 のときなども含めて「二次方程式を解く」と表現して問題はありません。昔は高校の数Tではそうだったんですが。
これが、ゆ と り 教 育なんですね。驚きました。
>>751 ん?レスつける先をまちがえていますよ。「ゆとりゆとりってうるさい」のは私なんですけれども。
うわぁ〜〜、このスレで自分勝手な基準で他人を見下す、引きこもり基地外かよ・・・ きめぇ。お前、性格が狂ってんな。日頃、まともに相手にされていないか、 低レベルの学校の講師か?お前以上の人間なんて、世の中腐るほどいるぞ? もっと社会を広い目で見ろよ、な?変な気を起こすなよ。まだこれからも 人間社会に未来はあるし、お前にも老いて死ぬまでに時間はあるだろうし。
>>750 そこまで分かってるんなら自分で解けよカス
[1] 授業単元:Linuxプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8156.zip [3]環境
[3.1] Linux Debian
[3.2] gcc 4.1.2
[3.3] C
[4] 期限: 12/1(月)朝9時くらいまでに出来ると助かります。
[5] 補足
C言語初心者です。ちょっと面倒なプログラムですみません。ソケット通信プログラムを
作成する問題です。問題の詳細は添付のURLをご覧下さい。
1問目はウェブで調べた内容を参考にしてサーバー/クライアント間でメッセージの
送受信をするというベーシックなところまでは出来ました。問題は、これをクライアント
から受け取った単語をサーバ側で/usr/share/dict/words辞書と照らし合わし、存在可否
結果を返すようにしたいです。なので僕がアップしたファイルに修正/追記してほしいです。
2問あって2問目の方はもっと難しいです。問題の仕様が曖昧だと感じた場合は、適当な
感じでも構わないです。よろしくお願いします。
757 :
デフォルトの名無しさん :2008/11/30(日) 09:22:27
[1] 授業単元: 電子計算機 [2] 問題文: 8bitの2進数を16進数、10進数に変換するプログラムを示せ。ただし、負数、正数について示せ。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Borland C++ Compiler [3.3] 言語: C言語 [4] 期限: ([2008年12月2日まで) [5] 補足: 正数の場合は何とかなりましたが負数の場合が… 両方を処理するプログラムでも、別々に処理するプログラムでもOKです。 宜しくお願いします。
先頭ビットを符号ビットとして遣えばいいだけの話じゃなくって?
って、16進数のところをやってなかった、すまそ。ちと削除。
765 :
デフォルトの名無しさん :2008/11/30(日) 14:32:38
どなたか
>>720 をお願いします
どんな簡単なプログラムでも良いので
>>765 簡単なのでいいとかいうなら自分で作れば?
>>765 #include <stdlib.h>
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen("t.txt", "w");
fwrite("caster", 1, 6, fp);
fflush(fp);
fclose(fp);
return 0;
}
768 :
デフォルトの名無しさん :2008/11/30(日) 15:37:45
陸上競技の100mのタイム[s]を入力したとき 平均速度を[m/s]と[km/h]の単位で小数第1位まで 出力するプログラムをつくりなさい。
769 :
デフォルトの名無しさん :2008/11/30(日) 15:43:02
>>768 #include <stdio.h>
int main(void){
double t;
printf("陸上競技の100mのタイム[s]: ");
scanf("%lf", &t);
printf("平均速度 %.1lf[m/s]\n", t / 100);
printf("平均速度 %.1lf[km/h]\n", t * 3.6 / 100);
return 0;
}
770 :
デフォルトの名無しさん :2008/11/30(日) 16:01:39
771 :
デフォルトの名無しさん :2008/11/30(日) 16:18:41
>>769 @なんでfloatじゃなくてdoubleを使うんですか?
Aなんで3.6をかけるんですか?
>>771 時速だからだろ。
60*60=360で時速でm/hがでる
これの1000倍だろ
60*60=360 すげー
60*60=3600でkmに単位あわせるのに1000でわるから。 ちょ、ちょっと間違えただけなんだからね!
775 :
デフォルトの名無しさん :2008/11/30(日) 16:26:55
正しくは60*60=3600
776 :
デフォルトの名無しさん :2008/11/30(日) 16:30:12
doubleの理由はなんですか?
777 :
デフォルトの名無しさん :2008/11/30(日) 16:31:29
>>774 じっ、自分もちょっと茶化してみたかっただけなんだからねっ ♥
779 :
g02dy2 :2008/11/30(日) 16:46:54
なるへそ
780 :
デフォルトの名無しさん :2008/11/30(日) 16:51:36
>>776 doubleは浮動小数点におけるintのような存在。特に理由がないときに使う。
Cではmath.hの浮動小数点関数がdoubleしかなく、
floatだと頻繁にdoubleへ変換する機会が現れるのでdoubleより遅くなるのが常識
(今でもprintfのような可変個引数に名残がある)
という時代が長かった。
もちろん、floatだと精度が問題になることも多いし、
今でも理由がなければdoubleを使っておくのが普通。
>>781 構造体のサイズが分かってるんだから、ポインタを構造体のサイズ分だけ移動させればっていう話じゃないの?
783 :
g02dy2 :2008/11/30(日) 17:04:33
いや、まぁ、intってのが曖昧で。short , long があるんだが、とりわけ今時の環境じゃ long型と同じ扱いだし。short も float も、それぞれの半分のbit幅だが、 浮動小数に於いては、指数部分も大きく差がでるしね・・・
785 :
デフォルトの名無しさん :2008/11/30(日) 17:12:21
unsignedって使いますか?
786 :
デフォルトの名無しさん :2008/11/30(日) 17:16:54
使いますよ。
787 :
デフォルトの名無しさん :2008/11/30(日) 17:28:47
C言語は最強ですか?
C言語は逆に何でも出来るので使う人間の心持次第何にかに特化した言語ではない ただの、オールラウンダー
789 :
デフォルトの名無しさん :2008/11/30(日) 17:30:02
前提条件がつけば、どの言語も最強になるさ C言語が最強であると仮定しても、いろんな意味を考えると 最強になれない場合がある
790 :
デフォルトの名無しさん :2008/11/30(日) 17:36:07
C言語を極めるには何年かかりますか?
>>790 極めなくてもすぐにそこそこのものは書けるようになりますよ、書き続ければ。
あ、ごめん ×#define N 3 ○#define N 4
もちろんNは5でも6でも7でも好きな物を入れて良い。
795 :
732 :2008/11/30(日) 17:47:38
>>792 さん
ありがとうございました.
これから自分でも解読してみたいと思います.
>>795 ×#define N 3 /* 4元 */4
○#define N 4 /* 4元 */
済みませんね、最終チェックを怠ってうpしてしまったので
これだけは最低修正して下さい
そうしないとコンパイルできません
797 :
デフォルトの名無しさん :2008/11/30(日) 18:02:03
C machine使ってる人いますか?
798 :
732 :2008/11/30(日) 18:04:34
>>796 さん
今コンパイルしてみたのですが, エラーがでてしまいます.
自分でもデバック中ですが, もしよかったら協力していただけないでしょうか?
gauss-seidel.c: In function `main':
gauss-seidel.c:9: error: parse error before numeric constant
gauss-seidel.c:15: error: parse error before numeric constant
gauss-seidel.c:15: error: parse error before ')' token
gauss-seidel.c:16: error: parse error before numeric constant
gauss-seidel.c:16: error: parse error before ')' token
gauss-seidel.c:18: error: `a' undeclared (first use in this function)
799 :
732 :2008/11/30(日) 18:05:09
gauss-seidel.c:18: error: (Each undeclared identifier is reported only once gauss-seidel.c:18: error: for each function it appears in.) gauss-seidel.c: At top level: gauss-seidel.c:21: error: parse error before string constant gauss-seidel.c:21: warning: data definition has no type or storage class gauss-seidel.c:25: error: parse error before string constant gauss-seidel.c:25: error: conflicting types for 'scanf' gauss-seidel.c:25: note: a parameter list with an ellipsis can't match an e parameter name list declaration gauss-seidel.c:25: error: conflicting types for 'scanf' gauss-seidel.c:25: note: a parameter list with an ellipsis can't match an e parameter name list declaration gauss-seidel.c:25: warning: data definition has no type or storage class gauss-seidel.c:28: error: parse error before string constant gauss-seidel.c:28: warning: data definition has no type or storage class gauss-seidel.c:32: error: parse error before string constant gauss-seidel.c:32: warning: data definition has no type or storage class gauss-seidel.c:37: warning: data definition has no type or storage class gauss-seidel.c:41: error: parse error before "for" gauss-seidel.c:43: error: `i' undeclared here (not in a function) gauss-seidel.c:43: warning: data definition has no type or storage class gauss-seidel.c:44: error: parse error before "for" gauss-seidel.c:48: error: redefinition of 'pivot'
800 :
732 :2008/11/30(日) 18:05:56
gauss-seidel.c:43: error: previous definition of 'pivot' was here gauss-seidel.c:48: error: `j' undeclared here (not in a function) gauss-seidel.c:48: warning: data definition has no type or storage class gauss-seidel.c:49: error: parse error before '}' token gauss-seidel.c:55: error: `b' undeclared here (not in a function) gauss-seidel.c:55: error: variable-size type declared outside of any functi gauss-seidel.c:55: error: variable-sized object may not be initialized gauss-seidel.c:55: warning: data definition has no type or storage class gauss-seidel.c:56: error: parse error before '}' token gauss-seidel.c:66: error: `a' undeclared here (not in a function) gauss-seidel.c:66: error: `sum' undeclared here (not in a function) gauss-seidel.c:66: warning: data definition has no type or storage class gauss-seidel.c:67: error: parse error before '+=' token gauss-seidel.c:69: warning: data definition has no type or storage class gauss-seidel.c:70: error: parse error before '}' token gauss-seidel.c:73: error: parse error before string constant gauss-seidel.c:73: warning: data definition has no type or storage class gauss-seidel.c:55: error: storage size of `b' isn't known gauss-seidel.c:69: error: storage size of `x' isn't known
801 :
732 :2008/11/30(日) 18:12:03
>>796 さん
すみません、無事にコンパイルできました.
ご協力いただきありがとうございました
>>798 誤: #define N 3 /* 4元 */4
正: #define N 3 /* 4元 */
803 :
732 :2008/11/30(日) 18:17:10
>>802 さん
わざわざありがとうございます.
また, 別の課題でお世話になることがあるかもしれませんが
そのときはよろしくお願いします.
(このたびは解説付きのわかりすいプログラム誠にありがとうございました)
805 :
デフォルトの名無しさん :2008/11/30(日) 19:47:12
期限過ぎてますが、どなたか
>>58 のAお願いします
807 :
◆a0MxWqf9PE :2008/11/30(日) 21:54:58
[1] 授業単元:文字列処理 [2] 問題文(含コード&リンク):入力された文字列中に大文字のX、小文字のx、大文字のY、小文字のyが何文字あるか調べ、結果を出力するプログラムを作れ [例] 入力:AWTXYXMPWPDxyDGmg 大文字のX:2文字、小文字のx:1文字、大文字のY:1文字、小文字のy:1文字 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年12月1日23:00まで [5] その他の制限:特になし。 よろしくお願いします。
>>807 #include <stdio.h>
int main(void)
{
int lx = 0, sx = 0, ly = 0, sy = 0;
int i = 0;
char input[100];
scanf("%s", input);
while (input[i] != NULL) {
switch (input[i]) {
case 'X':
lx++;
break;
case 'x':
sx++;
break;
case 'Y':
ly++;
break;
case 'y':
sy++;
break;
}
i++;
}
printf("大文字のX:%d個\n", lx);
printf("小文字のx:%d個\n", sx);
printf("大文字のY:%d個\n", ly);
printf("小文字のy:%d個\n", sy);
return 0;
}
809 :
デフォルトの名無しさん :2008/11/30(日) 22:47:20
806ありがとう
810 :
デフォルトの名無しさん :2008/11/30(日) 23:35:08
811 :
デフォルトの名無しさん :2008/12/01(月) 03:27:49
812 :
811 :2008/12/01(月) 03:32:56
ひとつエラーが出ましたが記載を忘れていました。 C:\Documents and Settings\(ユーザー名)\デスクトップ>bcc32 lexico.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland lexico.c: 警告 W8004 lexico.c 45: 'mc' に代入した値は使われていない(関数 main ) Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland 失礼しました。宜しくお願い致します。
>>811 2箇所めっけた。もうちょっとだったな
for(a = 0; a < b; b++) { ⇒ for(a = 0; a < b; a++) {
puts(tango[c]); ⇒ puts(tango[mc]);
815 :
811 :2008/12/01(月) 04:06:35
>>813 ありがとうございます…!!完璧に動きました!!!!
やっと・・・やっと寝れます・・・。ホント助かりました(;;)
>>814 ありがとうございます!!
ただ、flagの意味が微妙に難しくて分からないので今回は
>>813 さんに甘えさせて頂きます。
こんな真夜中に、大変お手数お掛けしました…。
隔週で課題が出るので、もしまたどうしても詰まった時はお願い致します…!
ありがとうございました!
>>816 7-1
↓コメントはずす
//void init_stack(struct stack *target);
//char push(struct stack *target, char push_data);
//char pop(struct stack *target);
target->list[****] = push_data;
↓
target->list[target->num_of_data] = push_data;
pop_data = target->list[****];
↓
pop_data = target->list[target->num_of_data - 1];
818 :
デフォルトの名無しさん :2008/12/01(月) 11:08:58
[1] 授業単元:アルゴリズム論 [2] 問題文(含コード&リンク): 1.data.txtをつくる (データの中身は、20個以内の整数をスペースで区切る。例:2 34 33 62 2 712 等) 2.先ほどのdata.txtから数値を順に読み取り、ソートする。 (int s[21]に格納する。(先にs[21]にすべて-1を入れておく(初期化))) 3.printfで「あなたが探したいデータを入力してください。」→入力 4.ソートされたs[]を2部探索法で探す。 5.データがあれば「〇番目にあります。」なければ「ありません。」と返す。 [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: ([2008年12月6日23:59まで]) [5] その他の制限: 制限はないです。 C言語を3年前に習ったので全く分かりません。 宜しく御願い致します。
819 :
817 :2008/12/01(月) 11:24:48
>>816 7-1 補足
構造体宣言の } のあとにセミコロン追加
init_stac, push, pop 関数の定義部にプロトタイプと同じく
void, char, char 型宣言を追加
push 関数の return_data_check; のコメントを外す
820 :
817 :2008/12/01(月) 11:29:11
>>816 7-1 の while 以降を以下のように変更
int rev = 0;
while(string[current] != '\0')
{
if(string[current] == '#'){
while(s.num_of_data > 0)
reverse[rev++] = pop(&s);
reverse[rev++] = '#';
} else {
push(&s, string[current]);
}
current++;
}
while(s.num_of_data > 0)
reverse[rev++] = pop(&s);
reverse[rev] = '\0';
printf("%s\n",reverse);
821 :
デフォルトの名無しさん :2008/12/01(月) 11:34:14
>>818 #include <stdlib.h>
#include <stdio.h>
int compare(const void *a, const void *b){
return *(const int*)a - *(const int*)b;
}
int main(void){
FILE *inf; int i, s[21], m, n, *find;
char buf[1024], *p;
for(i = 0; i < 21; i++) s[i] = -1;
inf = fopen("data.txt", "r");
if (inf == NULL){
fprintf(stderr, "ファイルdata.txtが開けません。");
return 1;
}
fgets(buf, 1024, inf); p = buf;
for(i = 0; i < 20; i++){
s[i] = strtol(p, &p, 10);
if(*p != '\0') p++; else break;
}
fclose(inf);
m = i;
qsort(s, m, sizeof(int), compare);
printf("あなたが探したいデータを入力してください。");
scanf("%d", &n);
find = bsearch(&n, s, m, sizeof(int), compare);
if (find != NULL) printf("%d番目にあります。\n", find - s + 1);
else printf("ありません。\n");
return 0;
}
>>816 7-3
7-1 の while 以降を以下のように変更
while(string[current] != '\0')
{
if(string[current] == '(')
push(&s, string[current]);
else if(string[current] == ')'){
if(pop(&s) == '\0'){
puts("NG");
return 1;
}
}
current++;
}
if(s.num_of_data > 0)
puts("NG");
else
puts("OK");
823 :
817 :2008/12/01(月) 11:58:42
>>816 7-4 main 本文
そのほか関数は 7-1 と同じ
struct stack s;
char string[STACKMAX];
int current, len;
init_stack(&s);
printf("文字列:");
scanf("%s", string);
printf("文字列の長さ:");
scanf("%d", &len);
current = 0;
while(string[current] != '\0')
{
if(current * 2 != len - 1)
if(current < len / 2)
push(&s, string[current]);
else
if(pop(&s) != string[current]){
puts("NG");
return 1;
}
current++;
}
puts("OK");
824 :
756 :2008/12/01(月) 12:38:24
825 :
デフォルトの名無しさん :2008/12/01(月) 12:47:30
>>819 これは7-2と考えても宜しいでしょうか
826 :
817 :2008/12/01(月) 12:54:48
827 :
デフォルトの名無しさん :2008/12/01(月) 13:03:30
828 :
◆zh1nL90fZk :2008/12/01(月) 13:26:14
[1] 授業単元:プログラミング [2] 問題文: 入力された文字列の中に「USA」という文字の並びがあるかどうか調べ、結果を出 力するプログラムを作りなさい [実行例] 入力:TGWQGDUSAPMPWG "USA"が見つかりました 入力:TGWQGDUMGWAPMPWG "USA"が見つかりません [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:よくわかりませんが、たぶんgccです [3.3] 言語: C [4] 期限: 2008年12月2日12:00まで [5] その他の制限:なし 期限が短いですが、よろしくお願いします
829 :
デフォルトの名無しさん :2008/12/01(月) 13:32:55
>>828 #include <stdio.h>
#include <string.h>
int main(void)
{
char s[1024];
while(1){
printf("入力: ");
fgets(s, 1024, stdin);
if (s[0] == '\n') return 0;
if (strstr(s, "USA") != NULL)
printf("\"USA\"が見つかりました\n");
else
printf("\"USA\"が見つかりません\n");
}
return 0;
}
831 :
デフォルトの名無しさん :2008/12/01(月) 14:10:03
832 :
デフォルトの名無しさん :2008/12/01(月) 14:14:31
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):カラー画像を読み込んでRGB空間上に分布を表示しなさい。 [3] 環境 [3.1] OS: Windows [3.2] VC だと思います。 [3.3] 言語: C++ [4] 期限: 2008年12月3日13:00まで [5] その他の制限: 制限無し
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): 整数nをキーボードから入力する。続いてn 個の文字列をキーボードから入力する(文字列の長さは最大20 と仮定してよい)し、その入力した文字列とその長さを出力しなさい。 さらに、文字列の中で最も短いものを最後に出力しなさい。その際,その文字列及び何番目に入力されたものなのかを出力すること。 なお,最短文字列の長さと同じ文字列が複数あった場合は,その中で最も早く入力したものを出力すること。 [3] 環境 [3.1] OS:Win [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語C [4] 期限:12/1 期限短くて申し訳ないです。どなたかお願いします。
>>828 おいどんも、きしょ〜すを出すでごわす。
#include <stdio.h>
int main(void)
{
char ch;
const char *str="USA",*p;
p=str;
printf("入力:");
do{
ch=getchar();
if(ch==*p) p++;
else {
p=str;
if(*p==ch) p++;
}
}while(ch!='\n' && ch!=EOF && *p);
printf("\"%s\"が",str);
if(*p!='\0') printf("見つかりませんですた。\n");
else printf("見つかりますた。\n");
return 0;
}
836 :
756 :2008/12/01(月) 14:43:26
>>830 正常動作を確認しました。本当に有り難うございました!今日が期限なのでこれから提出してきます。
2問目の方もお願い出来ると大変助かるのですが。。(2問目はエキストラクレジットで期限があと一週間あります。)
>>831 #include <stdio.h>
void ToUpper(char *in, char *out){
while(*in != '\0'){
if(*in >= 'a' && *in <= 'z')
*in += 'A' - 'a';
*out++ = *in++;
}
*out = '\0';
}
int main (void){
char instr[256], outstr[256];
printf("小文字の文字列を入力してください:");
scanf("%s",instr);
ToUpper(instr, outstr);
printf("変換後:%s\n",outstr);
return 0;
}
838 :
837 :2008/12/01(月) 14:48:56
>>831 >>837 は main の instr も書き換えてしまうので、こっちの方がベターかな
#include <stdio.h>
void ToUpper(char *in, char *out){
while(*in != '\0'){
if(*in >= 'a' && *in <= 'z')
*out++ = *in++ + 'A' - 'a';
else
*out++ = *in++;
}
*out = '\0';
}
int main (void){
char instr[256], outstr[256];
printf("小文字の文字列を入力してください:");
scanf("%s",instr);
ToUpper(instr, outstr);
printf("変換後:%s\n",outstr);
return 0;
}
こうだな *out++ = *in++ -'a' + 'A'; 小文字のaからの差を、Aに足してやれば良い。 ASCIIコードでどちらが先か分かっているとは言え。
841 :
756 :2008/12/01(月) 15:04:59
>>835 >>839 すみません、直後に書き込んでいました。ありがとうございます!
こんなに短時間でプログラム作れるのはすごい。。本当に有り難うございました。
>>833 制限とか書いてないので。
#include <stdio.h>
#include <string.h>
int main()
{
char str[21], strmin[21];
int n, len = 0, min = 20, i, imin;
printf("整数:");
scanf("%d", &n);
for(i = 0; i < n; i++){
printf("文字列:");
scanf("%s", str);
len = strlen(str);
if(len < min){
strcpy(strmin, str);
imin = i + 1;
min = len;
}
printf("長さ %d\n", len);
}
printf("最も短い文字列は %d 番目 %s\n", imin, strmin);
return 0;
}
>>833 入力された文字列の表示ができてなかった。一度全部入力してから表示するのかな?だとするとこうなる。
#include <stdio.h>
#include <string.h>
int main()
{
char str[10][21], *strmin;
int n, len = 0, min = 20, i, imin;
printf("整数:");
scanf("%d", &n);
if(n > 10)
n = 10;
strmin = str[0];
for(i = 0; i < n; i++){
printf("文字列:");
scanf("%s", str[i]);
}
for(i = 0; i < n; i++){
len = strlen(str[i]);
printf("%s (%d)\n", str[i], len);
if(len < min){
strmin = str[i];
imin = i + 1;
min = len;
}
}
printf("最も短い文字列は %d 番目 %s\n", imin, strmin);
return 0;
}
[1] 授業単元 C言語プログラミング演習 [2] 問題文 二つの文字列を入力し、どちらが長いか、辞書順ではどちらが先か、以上2点を満たしたプログラムを作成しなさい。 文字列は小文字アルファベットのみで長さは最大30とする。 [3] 環境 OS:Windows VC 6.0 言語C [4] 期限:今日中 [その他の制限]特にありません よろしくお願いします。
>>842 >>843 早々の回答ありがとうございました。
入力された文字列とは最初に入力するnですよね?
恐らく
>>842 ので合ってると思います。
いずれにしても大変助かりました。ありがとうございます。
846 :
デフォルトの名無しさん :2008/12/01(月) 17:12:58
>>844 #include <stdio.h>
#include <string.h>
int main(void)
{
char s1[31], s2[31];
int len1, len2, cmp;
printf("文字列1: ");
scanf("%30s", s1);
printf("文字列2: ");
scanf("%30s", s2);
len1 = strlen(s1);
len2 = strlen(s2);
cmp = strcmp(s1, s2);
if(len1 < len2) puts("文字列1の方が長い");
else if(len2 < len1) puts("文字列2の方が長い");
else puts("同じ長さ");
if(cmp < 0) puts("辞書順では文字列1が先");
else if(cmp > 0) puts("辞書順では文字列2が先");
else puts("同じ文字列");
return 0;
}
847 :
デフォルトの名無しさん :2008/12/01(月) 17:14:09
>>846 間違い修正
(誤)
if(len1 < len2) puts("文字列1の方が長い");
else if(len2 < len1) puts("文字列2の方が長い");
(正)
if(len2 < len1) puts("文字列1の方が長い");
else if(len1 < len2) puts("文字列2の方が長い");
849 :
デフォルトの名無しさん :2008/12/01(月) 18:17:45
851 :
843 :2008/12/01(月) 18:45:10
>>845 NO
入力された文字列とは、nを入力した後に入力を要求されるn個の文字列のこと。
>>842 は、scanf のエコーバックは表示されるが、プログラムで取り込んだ文字列を
表示していない。
>>688 本当に有難う御座いました。
大変助かりませんでした。
エラーが7個も出てしまいました。
出来ればもう一度やっていただけないでしょうか?
C++ でなくて C の設定でコンパイルしているとエスパー あるいはコピペミス
>>853 「C言語」って書いてあんだから cstdio とかアウトだろ
#include <stdio.h>
#define BUFSIZE 200
int main(int argc, char **argv)
{
char str[BUFSIZE], rts[BUFSIZE];
int length = 0, i;
printf("文字列を入力:");
scanf("%s", str);
while(str[length] != '\0')
length++;
for(i = 0; i < length; i++) {
rts[i] = str[length - i - 1];
}
rts[length] = '\0';
printf("反転した文字列 = %s\n", rts);
return 0;
}
856 :
デフォルトの名無しさん :2008/12/01(月) 21:33:45
>>821 早々の回答大変助かりました!!ありがとうございます。
[1] 授業単元:プログラミング入門 [2] 問題文(含コード&リンク):一つの整数をキーボードから入力する。これをn とする。 続いてn 個の文字列をキーボードから入力する(文字列の長さは最大20 と仮定)。 文字列を入力するとすぐに,入力した文字列とその長さを出力しなさい。 更に文字列の中で最も短いものを最後に出力しなさい。 その際,その文字列及び何番目に入力されたものなのかを出力すること。 なお,最短文字列の長さと同じ文字列が複数あった場合は,その中で最も早く入力したものを出力すること。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VisualC++ 6.0 [3.3] 言語:C [4] 期限:12月3日0:00 [5] その他の制限:特にありません 文字列中で最も〜辺りからわからなくなってしまいました。 良ければお願い致します。
でじゃぶ?
>>859 すみません。
一応目を通したつもりだったんですが…恥ずかしいorz
ありがとうございました!
861 :
デフォルトの名無しさん :2008/12/01(月) 22:37:30
[1] C言語 [2] 構造体の配列 構造体のデータを得点で昇順に並び変えてください [3] 環境 [3.1] Windows vista [3.2] マイクロソフトヴィジュアルスタジオ [3.3] 言語: C/ [4] 期限: ([2008年11月21日17;00まで] [5] プリプロセッサ 、ファイル処理、操作 供用体 データ変換型 記憶クラス は習っていません。 qsort もなしでお願いいたします よろしくお願いいたします。
862 :
デフォルトの名無しさん :2008/12/01(月) 22:38:29
最初の方の宣言文です # include<stdio.h> struct tmp{ char name[20]; int bangou; int ten; }; void main(void) { { struct tmp data[10]={{"山田",50113,87}; {"浜名",30211,60}; {"飯田",56231,58}; {"岡田",50215,30}; {"今田",60987,89}; {"原田",57892,75}; {"有田",53901,55}; {"清原",53098,72}; {"神山",56221,71}; {"上原",12345,100}; }}
863 :
デフォルトの名無しさん :2008/12/01(月) 23:30:34
>>834 遅くなりましたが、ありがとうございました。
864 :
デフォルトの名無しさん :2008/12/01(月) 23:53:06
【質問テンプレ】 [1] 授業単元: Cプログラミング演習 [2] 問題文(含コード&リンク): キーボードから10個の整数を読み込んで、それについて二分探索を行うプログラムを再帰を使って作りなさい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual studio2005 [3.3] 言語: C [4] 期限: 12月17日 [5] その他の制限: ポインタはまだ習っていません。よろしくお願いします。
>>862 続きから
struct tmp w;
int i, j;
for(i = 0; i < 10; i++) {
for(j = 1; j < i; j++) {
if (data[i].ten < data[j].ten) {
w = data[i];
data[i] = data[j];
data[j] = w;
}
}
}
for(i = 0; i < 10; i++)
printf("名前:%s 番号:%5d 特典:%3d\n", data[i].name, data[i].bangou, data[i].ten);
return 0;
}
ちなみに
>>862 の宣言文は以下の誤りがある
struct tmp の前の { が余計
{"山田", 50113, 87};
↓
{"山田", 50113, 87}, ← 各要素間の区切りはカンマ
}; ← 宣言の最後はセミコロン
なぁ〜〜にぃ〜〜!?やっちまったな!
いわゆるクールポコっちまったってやつだな
>>864 二分探索って具体的に何をしろっていう課題なの?
本当は二分探索木を作って昇順(または降順)で表示しろって言いたいのかな?
869 :
デフォルトの名無しさん :2008/12/02(火) 01:15:11
>>868 ある整数を入力してそれが読み込んだ10個の整数の中に含まれていれば、「含まれていた配列の番号+1」を表示させて、そうでなければ、「ありません」と表示させる。
これを再帰を使って作れという課題です。
>>869 つまり11回整数を入力することになるの?
>>869 なんかおかしい気がする
二分探索はソートしてからじゃないと使えないんだがどうすればいい?
別領域に添え字と内容のセットの構造体の配列をとって
そっちに移してからそれをソートして二分探索でもするか?
ニートしてソ分って読んだ俺は、何かがおかしい。
>869 入力値をソートしながら配列に格納していくのかな? "挿入ソート"だっけ?
874 :
デフォルトの名無しさん :2008/12/02(火) 02:27:51
>>865 本当にありがとうございました!!
助かりました!
[1] 計算幾何 [2] 1.入力:2次元平面上の2つの線分s1、s2(線分はその両端点(座標は整数)を指定することによって入力とする) 出力:s1とs2が交差するか否か(yes→1、no→0) 2・入力:2次元平面上のn点からなるS(ただしどの3点も一直線上にない) 出力:Sの凸包(凸包定義する多角形の頂点を順序つきで出力) [3] [3.1] OS:Windows [3.2] すいません、わかりません [3.3] 言語:C [4] 期限:12月8日 [5] main関数以外に1つ以上の関数を定義する。 構造体、配列、if、for、whileぐらいで記述していただければと。。 考察を書く際のポイント等も教えていただけると嬉しいです。
>>875 1問目 考え方は、s1 の直線の式に s2 の2点をそれぞれ代入して結果を掛け合わせたものの符号で判定
#include <stdio.h>
struct segment {
int x1; int y1;
int x2; int y2;
};
int chk_cross(struct segment s1, struct segment s2)
{
return ((s1.x1 - s1.x2) * (s2.y1 - s1.y1) + (s1.y1 - s1.y2) * (s1.x1 - s2.x1))
* ((s1.x1 - s1.x2) * (s2.y2 - s1.y1) + (s1.y1 - s1.y2) * (s1.x1 - s2.x2))
< 0;
}
int main()
{
struct segment s1, s2;
printf("線分 s1\nx1 y1:");
scanf("%d %d", &s1.x1, &s1.y1);
printf("x2 y2:");
scanf("%d %d", &s1.x2, &s1.y2);
printf("線分 s2\nx1 y1:");
scanf("%d %d", &s2.x1, &s2.y1);
printf("x2 y2:");
scanf("%d %d", &s2.x2, &s2.y2);
if (chk_cross(s1, s2))
printf("s1 と s2 は交わります\n");
else
printf("s1 と s2 は交わりません\n");
return 0;
}
[1] C言語 [2] 標準入力から文字列を入力すると、ランダムな漢字1文字を出力するプログラムを作れ。表示すべき漢字1文字の候補は予め決めておく。違う文字列を入力したら違う結果が出て、同じ文字列を入力したら常に同じ結果が出るようにする。 [3.1]Mac [3.2] すみません、よくわかりません [3.3] C [4] 12月3日まで よろしくお願いいたします。
879 :
876 :2008/12/02(火) 11:37:59
[1] 授業単元: コンピュータプログラミング [2] 問題文: ヤコビ法で多元連立一次方程式を解けるようなプログラムを作れ。但し以下のような条件がある 1部分ピボットを入れること 2数値は手入力で行えるようにすること 3計算回数が表示されるようにすること [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 VC 5.0 [3.3] 言語: C [4] 期限: [2008年12月2日17:00まで] [5] その他の制限: 自分でも頑張ってみましたが分からなく、期限になってしまうのでどなたかお願いします
881 :
デフォルトの名無しさん :2008/12/02(火) 11:56:54
1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 以下の機能を実現するプログラムを作れ: 元本と利率を入力できる。ただし、単利と複利そ れぞれに別の利率を設定することもできる。 最初に以下の処理のどちらかをユーザが選んで 実行できる(プログラムとしては1つのもので全 部の機能を提供すること) 入力した年数が経過したら、単利・複利それぞれいく らになるかを表示する。 複利の方が(利率が低い場合でも)何年後に単利を追 い越すかを表示する。 いくつか補足・注意 利息や金額を計算する時は、float(もしくは double)型の変数を使う。 小数点以下切捨て: #include “math.h” を冒頭で書く floor(x) で x の小数点以下切捨てができる printf(“%.0f”, x); とすれば、実数(浮動小数点 数)を整数かのように画面表示できる [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: visual studio2003 visual c++ win32 [3.3] 言語: C++ [4] 期限: 12月10日 24:00まで [5] 繰り返し処理(for)繰り返し(while)を最近習いました。for,whileでお願いします。
>>879 直線ABと直線CDの交差を判定するならそれでいいと思うけど
線分ABと線分CDの交差を判定する場合はまずくない?
例えば、線分ABの延長線上に線分CDが
交差しているようなときにも交差しているとなってる。
>>882 いや、だから式自体は
>>877 とまったく同じなのにどうしてそうなるの?
x1→s1.x1 x2→s1.x2 x3→s2.x1 x4→s2.x2
y1→s1.y1 y2→s1.y2 y3→s2.y1 y4→s2.y2
に置き換えてみ
>>884 PBM形式についての説明を授業で受けてるはずだからその資料も上げれ
886 :
デフォルトの名無しさん :2008/12/02(火) 15:18:47
[1] 授業単元:計算数学演習 [2] 問題文(含コード&リンク): 6個の実数 A[0] 〜 A[5] を入力すると、まずそれらの平均値 heikin を表示し, 次に V[i] = (A[i] - heikin)2 を i = 0 〜 5 に対し全て表示し, 最後に V[0] 〜 V[5] の平均値(つまり A[i] の分散)を表示するプログラムを作成せよ. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 12/2 pm5:00 [5] その他の制限: とくにないです あと2時間ですが、すみませんよろしくお願いします! このスレに昨日気づけばどれだけよかったか!
>>886 V[i] = (A[i] - heikin)2 ← この 2 は *2 ?
889 :
デフォルトの名無しさん :2008/12/02(火) 15:26:23
>>889 やっぱそうだよな分散って書いてあるんだから
#include <stdio.h>
int main()
{
double A[6], heikin = 0.0, V[6], bunsan = 0.0;
int i;
for(i = 0; i < 6; i ++){
printf("実数:");
scanf("%lf", &A[i]);
heikin += A[i];
}
heikin /= 6.0;
printf("平均:%f\n", heikin);
for(i = 0; i < 6; i++){
V[i] = (A[i] - heikin)*(A[i] - heikin);
printf("V[%d] = %f\n", i, V[i]);
bunsan += V[i];
}
bunsan /= 6.0;
printf("分散:%f\n", bunsan);
return 0;
}
891 :
デフォルトの名無しさん :2008/12/02(火) 15:31:57
>>890 早いw
脱帽ですw
本当にありがとうございます!m<_>m
これからlinuxでコンパイルしてたしかめてきます!
#include <stdio.h> int main(void) { int A[5],V[5],i,heikin=0,heikin2=0; for (i=0;i<6;i++){printf("実数を入力してください:");scanf("%d",&A[i]);heikin+=A[i];} heikin/=6;printf("%d \n",heikin); for (i=0;i<6;i++){V[i]=(A[i]-heikin)*2;heikin2+=V[i];}printf("%d",heikin2/6); }
制限なしって言ったら、文字列の処理にしても、string.hにある 標準ライブラリを使っても良いってことだよね?
894 :
デフォルトの名無しさん :2008/12/02(火) 18:01:54
>>873 最初から入力値は小さい順ってことでソートする必要はありません。
説明不足で申し訳ない・・・
まじか・・・・・
896 :
N,R :2008/12/02(火) 18:43:19
[1] 授業単元:構造体 [2] 問題文(含コード&リンク); *学籍番号・身長・体重の 3 つのメンバを持つ構造体 struct height_weight を宣言し,さらに typedef 宣言を用いて struct height_weight 型を student として参照できるようにせよ. student型の配列 a[10] を宣言し,この配列に下記のデータをセットせよ. キーボードから,身長の下限および体重の下限を入力し,その範囲の学生の学籍番号とその身長および体重を表示するプログラムを作成せよ. 学籍番号・身長・体重のデータとして,次のデータを用いること. 1001 160.5 53.1 1002 173.8 79.2 1003 169.7 65.3 1004 175.3 72.7 1005 187.2 98.9 身長の下限を170,体重の下限を75とした時, 1002 173.8 79.2 1005 187.2 98.9 *上記のプログラミングのstudent 型の構造体のポインタ変数を受取り, その内容を表示する関数 void print_student(student*) を作成せよ. キーボードから学籍番号を入力すると,print_studentを用いて,その学籍番号の学生の身長と体重が表示されるプログラムを作成せよ. [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 12月4日(水)まで [5] その他の制限:特になし 期限が早くてすみません。できたらでいいのでよろしくお願いします
897 :
N,R :2008/12/02(火) 18:45:43
自己レスすみません。友達の写すことにしましたので大丈夫です
[1]授業単元:プログラミング1 [2]課題 英文文字列を入力し、英大文字は小文字に、英小文字は大文字に変換して出力する。 ただし、英文字以外は変換しないでそのまま出力する。なお、is〜関数は使用しないこと。 <実行例> ・入力英文:It is necessary to execute the program. ・出力英文:iT IS NECESSARY TO EXECUTE THE PROGRAM. [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:Microsoft Visual studio 2005 [3.3] 言語:C言語 [4] 期限:2008年12月18日 よろしくお願いします。
>>899 #include<stdio.h>
int main(void){
unsigned char map[256], buf[512];
int i;
for(i=0;i<256;i++) map[i]=i;
for(i=0;i<26;i++) map['a'+i]='A'+i;
for(i=0;i<26;i++) map['A'+i]='a'+i;
fgets(buf, sizeof(buf), stdin);
for(i=0;buf[i];i++) buf[i]=map[buf[i]];
puts(buf);
return 0;
}
[1]授業単元:プログラミング1 [2]課題 キーボードからの英文字列(100文字以内)を入力し、その文字列を反転させて出力する。 反転表示はいずれかの方法で行う。 @文字列を配列に入力し、最後の文字から一文字ずつ取り出して表示する。 A文字列を配列に入力し、最後の文字から一文字ずつ取り出し、別の配列に格納してから表示する。 B文字列をポインタの示す領域に入力し、最後の文字から一文字ずつ取り出して表示する。 C文字列を配列に入力し、配列内で前後交換してから表示する。 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン:Microsoft Visual studio 2005 [3.3] 言語:C言語 [4] 期限:2008年12月18日 よろしくお願いします。
902 :
デフォルトの名無しさん :2008/12/02(火) 19:49:34
>>901 このスレを文字列とか反転とかで検索したらいくつか見つかるんだが
それを参考にしてはどうだろうか?
904 :
デフォルトの名無しさん :2008/12/02(火) 19:57:30
>>901 一応
#include <stdio.h>
int main(void)
{
char str[1001];
int i = 0;
printf("1000バイト以内の文字列を入力してください:");
scanf("%s", &str);
while (str[i] != 0)i++;
for (; i >= 0; i--)
if (str[i]!=0)
printf("%c", str[i]);
return 0;
}
906 :
デフォルトの名無しさん :2008/12/02(火) 20:30:11
>>898 @
#include <stdio.h>
#include <stdlib.h>
/* define を使った定義 */
#define MAX 100
#define MIN 0
#define HANI(x, a, b) ((a) > (x) || (x) > (b))
#define HANTEI(x, a) ((x) >= (a))
int main(void)
{
int point, border;
do {
printf("Input your score: ");
scanf("%d", &point);
} while(HANI(point, MIN, MAX));
do {
printf("Input border: ");
scanf("%d", &border);
} while(HANI(border, MIN, MAX));
if(HANTEI(point, border))
puts("合格");
else
puts("不合格");
return 0;
}
>>898 A
============== kadai09c.h ==============
#define MAX 100
#define MIN 0
#define HANI(x, a, b) ((a) > (x) || (x) > (b))
#define HANTEI(x, a) ((x) >= (a))
void hantei(void);
============== hantei.c ================
#include <stdio.h>
#include "kadai09c.h"
extern int point, border;
void hantei(void)
{
if(HANTEI(point, border)) puts("合格");
else puts("不合格");
}
============== input.c =================
#include <stdio.h>
#include "kadai09c.h"
int point, border;
int main()
{
do {
printf("Input your score: "); scanf("%d", &point);
} while(HANI(point, MIN, MAX));
do {
printf("Input border: "); scanf("%d", &border);
} while(HANI(border, MIN, MAX));
hantei();
return 0;
}
>>880 ですが、期限がすぎてしまいましたがわかる方教えていただけませんか?
>>898 B
#include <stdio.h>
#include <stdlib.h>
/* define を使った定義 */
#define NUM 10
#define DEBUG 0
int main(void)
{
int array[NUM];
int *p = array;
int sum = 0, i;
double heikin = 0;
printf("Input %d integer.\n", NUM);
for(i = 0; i < NUM; i++) {
scanf("%d", &array[i]);
sum += *p++;
}
heikin = sum / (double)NUM;
#if DEBUG == 1
printf("Input numbers:\n");
for(i = 0; i < NUM; i++)
printf("%d ", *p++);
printf("\n");
#elif DEBUG == 2
printf("goukei = %d\n", sum);
#endif
printf("heikin = %f \n", heikin);
return 0;
}
1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): ストップウォッチ作成。 00:00:00.0(確かこのような感じでした)デジタル表示で。 何かキーを押すと開始して、もう一度押すと止まるという仕組みも。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:不明 [3.3] 言語: C++でお願いします [4] 期限:12月5日までです。 [5] その他の制限: 特にないです お願いします
>>911 基本的に環境依存のプログラムになるからどうにかして環境ちゃんと書けやクズ
911です
>>912 すみません
環境
OS:Windows XP
コンパイラ名とバージョン:Microsoft Visual studio 2008
言語:c++
です。
914 :
デフォルトの名無しさん :2008/12/02(火) 22:32:41
915 :
デフォルトの名無しさん :2008/12/02(火) 23:56:08
#include<stdio.h> typedef struct{ char name[100]; int age; double height; double weight; } PERSONAL_DATA1; typedef struct{ int person[10]; }PERSONAL_DATA2; PERSONAL_DATA1 input_personal_data(int num); void output_personal_data(PERSONAL_DATA2 person[10],int num); int main(int argc, char *argv[]){ PERSONAL_DATA1 x; int num,i; char person[10]; if(argc != 2){ printf("Usage ./test number"); return 0;} num=atoi(argv[1]); for(i=0;i<10&&i<num;i++){ person[i]=input_personal_data(); output_personal_data(person,num); return 0;}}
916 :
デフォルトの名無しさん :2008/12/02(火) 23:56:59
PERSONAL_DATA1 input_personal_data(int num){ PERSONAL_DATA1 x; printf("name>"); scanf("%c" ,&x.name); printf("age>"); scanf("%d" ,&x.age); printf("height>"); scanf("%lf" ,&x.height); printf("weight>"); scanf("%lf" ,&x.weight); return x;} void output_personal_data(PERSONAL_DATA2 person[10],int num){ PERSONAL_DATA1 x; printf("name>>%s\n" ,x.name); printf("age>>%d\n" ,x.age); printf("height>>%lf[cm]\n" ,x.height); printf("weight>>%lf[kg]\n" ,x.weight); }
917 :
デフォルトの名無しさん :2008/12/03(水) 00:02:35
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 問題はコマンドライン引数で人数を指定し,人数分のデータを標準入力(キーボード)から構造体配列に入力し,標準出力(ディスプレイ)に出力するプログラム
個人データの集合を格納するための構造体配列PERSONAL_DATAを定義せよ.
PERSONAL_DATA person[10]; /* 10人分用意 */
構造体配列personの要素数はdefine文を用いて定義すること
個人データを標準入力から入力し,戻り値としてPERSONAL_DATA型構造体を返す関数を作成せよ.
関数のプロトタイプ(案) PERSONAL_DATA input_personal_data(int num);
戻り値を構造体配列に順番に代入するようにすること.引数の整数型変数numは何番目の入力かを記すために使用(無くても良い).
データを格納しているPERSONAL_DATA型構造体変数を引数として受け取り,個人データを標準出力に出力する関数を作成せよ.
関数のプロトタイプ(案) void output_personal_data(PERSONAL_DATA per[], int num);
※ 引数が構造体配列変数となっている点に注意すること
引数の整数型変数numを用いて表示人数を関数に渡している
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語:C
[4] 期限: 無期限
[5] その他の制限:
>>915 >>916 は自分なりに考えたプログラムです。
どこが悪いかわかりません。使う関数などは上のプログラムの内容に使われるもののみでおねがいします。
918 :
デフォルトの名無しさん :2008/12/03(水) 00:13:20
>>864 ですが、いろいろ追加して分かりにくくなっているので、修正しました。
[1] 授業単元: Cプログラミング演習
[2] 問題文(含コード&リンク): キーボードから10個の整数を小さい順に読み込む。
その後新たにある整数を入力したとき、それが10個の整数のなかにあれば、
「その配列の番号+1」を表示させてなかったら
「ありません」と表示させる2分探索のプログラムを再帰を使って作りなさい。
実行例:{1,3,4,6,7,9,11,24,31,35}としたら
9:6番目にあります。
15:ありません。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: Visual studio2005
[3.3] 言語: C
[4] 期限: 12月17日
[5] その他の制限: ポインタはまだ習っていません。再帰は2分探索の部分で関数を使います。
どなたかよろしくお願いします。
919 :
910 :2008/12/03(水) 00:28:33
>>898 >>910 はコピペしながら修正してしまったので、一部バグがが混入。
scanf の for ループを抜けた直後に
p = array; を追加してくらっさい。
920 :
デフォルトの名無しさん :2008/12/03(水) 00:32:26
どうでもいいけど「キーボードからよみこむ」とかいう表現なんとかならないもんかな。 これだけよく書かれているのをみると一般的に浸透してしまっているようだが、 標準入力から読み込みたいのか、コマンドライン引数で渡すのか分かりにくい。 まぁ、普通は前者なのかな。
>>920 デバッグ結果を求めているの
それとも、これらのソースの間違っている部分を修正してほしいの
923 :
デフォルトの名無しさん :2008/12/03(水) 01:00:32
>>881 881で質問した者なのですが、どなたかわかる方はいらっしゃいませんか?
プログラムを最初に選ばせて、計算するのですがプログラムが書けなくて困っています。
>>921 その表現に限らず日本語おかしいの大杉だよね
問題が毎度パターン化してるからエスパーも多いと思うけど
925 :
デフォルトの名無しさん :2008/12/03(水) 01:20:31
[1] 授業単元:プログラミング [2] 問題文: 処理前:AbcefGhijklMnopqrstuvw 処理後:wvutsrqponMlkjihGfecbA #include<stdio.h> #include<stdlib.h> void RevStr(char *p, char *rp, int n); int main(void){ char *str="KantoGakuinUniversity",*rst; int k,num; [文字数を算出して、領域確保する処理] RevStr(引数を記述する); printf("処理前:%s\n",str); printf("処理後:%s\n",rstr); [確保領域を解放する処理] return 0; } void RevStr(char *p, char *rp, int n) [文字列を逆順にする処理] [3] 環境:Visual studio2005 [3.1] OS: (Windowsxp [3.2] Visual studio2005 [3.3] 言語:C [4] 期限:12/8 10:30 [5] その他の制限:特になし よろしくお願いします
>>923 >>923 #include <math.h>
#include <iostream>
class cash {
protected:
double ga; double yen; double ri;
public:
cash(double ganpon, double riritsu) : ga(ganpon), yen(ganpon),ri(riritsu) { }
virtual void addYear() = 0; void show() { std::cout << floor(yen);}
bool operator<=(const cash& op) { return yen <= op.yen ? true : false;}
};
class hukuri : public cash {
public:
void addYear() { yen *= 1.0 + ri;} hukuri(double ganpon, double riritsu) : cash(ganpon, riritsu){ }};
class tanri : public cash {
public:
void addYear() { yen += ga * ri;} tanri(double ganpon, double riritsu) : cash(ganpon, riritsu){ }};
int main()
{ double gan, rit, rih; int y, ay = 0;
std::cout << "元本: " << std::endl; std::cin >> gan;
std::cout << "単利の利率: " << std::endl; std::cin >> rit; tanri t(gan, rit);
std::cout << "複利の利率: " << std::endl; std::cin >> rih; hukuri h(gan, rih);
std::cout << "年数: " << std::endl; std::cin >> y;
for (int i = 0; i < y; ++i) { h.addYear(); t.addYear();
if (t <= h && ay == 0) ay = i + 1; }
std::cout << "単利"; t.show(); std::cout << "円" << std::endl;
std::cout << "複利"; h.show(); std::cout << "円" << std::endl;
if (rit > rih) std::cout << "追い付くのは" << ay << "年" << std::endl;
return 0;}
928 :
デフォルトの名無しさん :2008/12/03(水) 01:52:10
>>925 k は使わなかった。
#include<stdio.h>
#include<stdlib.h>
void RevStr(char *p, char *rp, int n);
int main(void)
{
char *str = "KantoGakuinUniversity", *rstr;
int num;
for(num = 0; str[num] != '\0' ; num++);
rstr = malloc(num);
RevStr(str, rstr, num);
printf("処理前:%s\n", str);
printf("処理後:%s\n", rstr);
free(rstr);
return 0;
}
void RevStr(char *p, char *rp, int n)
{
while(--n >= 0)
*rp++ = *(p + n);
*rp = '\0';
}
>>930 for(;str[num]!='\0';)
malloc(num)
臭うコードだな
1足りないか
>>931 C FAQ的には 0 がいいそうですね
くせぇくせぇ、●ンコの臭いがぷんぷんすんぜっ!こりゃ〜(ry
どっちかというとfor(;条件;)っていうのがキモイ While(){ }でいいだろう
だからそれは自分の主観的なことだろ?そういうのが 柔軟な考えが必要なプログラマーには向いていない考え方なんだよ。 気持ち悪いのが、自分の方だと気づいた方が良いぞ? とりあえず、鏡を見ろ。何が映った?そう、お前の顔だよ。 キモかった?それともイケてた?どちらでも、それは 自分が思ったことで、第三者からしてみれば、自分が 思った通りとは限らないんだよ。
num=0; do{ num++; }while(str[num]!='\0'); この方が、何か臭うな、キモイな。
num=0; while(str[num]!='\0') { num++; }; あるいはstr[num++]か。やっぱこっちの方がきめぇ。 もっとforに対して、考え方を変えるんだなw
While(1){ if(str[num]!='\0') break; } これでおk
なんか少しずつ話が捏造されて最後は無限ループになってるしw
>>883 亀レスですまんが、
式自体は同じだが、判定を2回やらないとだめじゃねってこと。
(直線AB・線分CD)と(線分AB・直線CD)の交差判定が必要でしょ?
じゃあ実際に値入れてみそ?
点A(1,0) 点B(5,0) 点C(0,1) 点D(0,-1)
これの線分ABと線分CDは交差しないっしょ?
>>939 num = 0;
while (num++[str] != '\0');
ちょっとだけキモくしてみたよ
別スレで加齢臭とか言って、汚い表現だと突っ込まれていた香具師か? お前の書き込みから、厨房臭さが漂ってるぜ?
945 :
デフォルトの名無しさん :2008/12/03(水) 11:25:22
920ですが、この2つのプログラムのソースの間違っている部分を修正するというものです。 言葉足らずに申し訳なかったです。どなたかよろしくお願いいたします。
>>943 きもいけどプログラムとしては意図した動きになるな
こういうのに警告吐くコンパイラってあるのかな
申し訳ありませんが、どなたか
>>878 をお願いできないでしょうか。
自分でも考えてみましたが、上手くいきません…
>>947 「ランダムな漢字」が何を求めているのかよくわからんが、とりあえず a-z の 26文字用。
#include <stdio.h>
int main()
{
char kanji[] = "亜哀愛悪握圧扱安案暗以衣位囲医依委威胃為尉異移偉意違";
char c;
printf("文字を入力(a-z):");
scanf("%c", &c);
if(c >= 'a' && c <= 'z')
printf("%c%c\n", kanji[(c - 'a')*2],kanji[(c - 'a')*2 + 1]);
return 0;
}
>>948 ありがとうございます。
私の説明が悪くて微妙にずれた感じになってしまいましたが
参考にさせていただきます。
>>918 #include <stdio.h>
int main()
{
int n[10], i, key, p, q;
printf("10個の整数を小さい順に入力してください\n");
for(i = 0; i < 10; i++){
printf("整数:");
scanf("%d", &n[i]);
}
printf("探す数を入力してください:");
scanf("%d", &key);
p = q = 10/2;
while(1){
q /= 2;
if(key > n[p])
p += q;
else if (key < n[p])
p -= q;
else {
printf("%d:%d 番目にあります。\n", key, p + 1);
break;
}
if(q == 0){
printf("%d:ありません\n", key);
break;
}
}
}
>>947 こういうことかなと勝手に妄想。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char kanji[] = "亜哀愛悪握圧扱安案暗以衣位囲医依委威胃為尉異移偉意違";
char s[30];
int i, c;
unsigned int seed;
printf("文字列を入力: ");
scanf("%s", s);
for(i = 0, seed = 0; i < strlen(s); i++){
seed += s[i];
}
srand(seed);
c = rand() % strlen(s);
printf("%c%c\n", kanji[c*2],kanji[c*2 + 1]);
return 0;
}
952 :
951 :2008/12/03(水) 12:40:51
ちと違った。 ×c = rand() % strlen(s); ○c = rand() % (strlen(kanji) / 2);
953 :
デフォルトの名無しさん :2008/12/03(水) 12:44:52
モンテカルロ法を使って円錐と球の体積を求めるのと、リサージュ曲線とダイヤモンド図形の書き方を教えて下さい>< お願いします。
954 :
950 :2008/12/03(水) 12:49:02
>>918 >>950 は再帰つかえってのを思いっきり無視してた
あとで時間あったらあげるつもりだけど他の人がやってくれるかもしれない
955 :
デフォルトの名無しさん :2008/12/03(水) 13:31:26
[1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): c言語でスタックオーバーフローするプログラムを作成し、実際にスタックの内容を 表示させる。そして、どれくらいのスタックの大きさならスタックオーバーフローの 起こらないかのスタックの限界領域を調べる。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:Cygwin [3.3] 言語:C よろしくお願いします。
>>955 無限再起でオーバーフロー
#include <stdio.h>
void func(void)
{
int val[256];
printf("%p ", val);
func();
}
int main(void)
{
func();
return 0;
}
958 :
デフォルトの名無しさん :2008/12/03(水) 14:50:39
[1] 授業単元:計算機プログラミングU ─G 関数へのポインタ─
[2] 問題文(含コード&リンク):
下のサンプルプログラムを,関数へのポインタ配列を利用して書き直せ。
そのとき,演算に対してIDを割り当て,入力を簡素化すること。
例えば,次のようにする。
(1) addition
(2) substruction
(3) multiplication
(4) division
上記以外 other
さまざまな数値データに対して,上記のいずれかの演算を指定して,
常に正しい計算結果が得られることを確認せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc (Visual C++でも動くと嬉しい)
[3.3] 言語:C
[4] 期限:2008年12月4日10:30まで
[5] その他の制限:問題文+ヒント>
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8193.txt
>>958 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
double addition(double a, double b){ return a+b; }
double substruction(double a, double b){ return a-b; }
double multiplication(double a, double b){ return a*b; }
double division(double a, double b){ return a/b; }
double other(double a, double b){ return 0; }
int main(int argc, char *argv[]){
char* opt[]= {"0.other", "1.addition", "2.substruction", "3.multiplication", "4.division"};
double (*pfunc[])(double a, double b) = {other, addition, substruction, multiplication, division};
double pa, pb;
int i=1, idx_f;
while(i < argc){
idx_f = atoi(argv[i]);
if (idx_f > 4 || idx_f < 0) {
idx_f = 0;
}
pa = atoi(argv[i+1]);
pb = atoi(argv[i+2]);
printf("%s(%f,%f)=%f\n",opt[i/3+1],pa,pb,pfunc[idx_f](pa,pb));
i+=3;
}
return 0;
}
ファイル関連で質問です 任意のディレクトリ以下のcsvファイルのフルパス(サブディレクトリのファイル含む)を取得したいです。 FindFirstFileとかででいけそうと思ったのですが、ファイル名しか取得できなくて困っています。 どうすればディレクトリも取得でlきますか?
961 :
960 :2008/12/03(水) 16:22:49
すみません。スレ間違えました。。
962 :
デフォルトの名無しさん :2008/12/03(水) 16:24:53
>>960 GetCurrentDirectory
GetFullPathName
を使え
963 :
help me :2008/12/03(水) 16:50:16
[1] 授業単元:c言語 [2] 問題文 あらかじめ、なんらかの内容(英文)が書かれた“test.txt” というファイルを作り、ファイルの先頭から終端(EOF)まで、 文字コードを16進数で画面に出力するプログラムを作成せよ。 出力形式は横8データと分する。 [3] 環境 [3.1] OS: Linux [3.3] 言語:C [4] 期限:12月5日まで よろしくおねがいします!
964 :
デフォルトの名無しさん :2008/12/03(水) 17:03:06
>>963 #include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(void){
FILE *fout, *fin; struct stat st;
char *buf; size_t i;
fout = fopen("test.txt", "w");
fprintf(fout, "テストだよ\nあいうえお\nカキクケコ
\n");
fclose(fout);
stat("test.txt", &st);
buf = (char *)malloc(st.st_size);
fin = fopen("test.txt", "r");
fread(buf, st.st_size, 1, fin);
fclose(fin);
for(i = 0; i < st.st_size; i++){
printf("%02X ", buf[i]);
if (i % 8 == 7) puts("");
}
free(buf);
return 0;
}
>>963 #include <stdio.h>
int main()
{
FILE *fp;
char buf[256], *p;
int i;
fp = fopen("test.txt", "r");
if(fp == NULL){
printf("Cannot open test.txt\n");
return 1;
}
while(fgets(buf, 256, fp) != NULL){
p = buf;
i = 0;
while(*p != '\0'){
printf("%02x ", *p++);
if(i++ == 7){
printf("\n");
i = 0;
}
}
}
printf("\n");
return 0;
}
>>963 #include <stdio.h>
int main(void)
{
FILE *fp = fopen("test.txt", "r");
int c, i = 0;
while ((c = fgetc(fp)) != EOF) {
printf("%02X ", c); ++i;
if (i % 8 == 0) printf("\n");
}
return 0;
}
>>963 #include <stdio.h>
#define HABA 8
int main(void)
{
int i = 0, input;
FILE * fin;
if ((fin = fopen("test.txt", "r")) == NULL)
{
puts("file open error");
return 1;
}
while ((input = fgetc(fin)) != EOF)
{
printf("%02X ", input);
if (i++ % HABA == HABA -1)
printf("\n");
}
fclose(fin);
return 0;
}
968 :
help me :2008/12/03(水) 17:15:20
すみません、テキストファイルはあらかじめ作っておいて、そのファイルを 読みこんで文字コードを出力するようです。 説明たりなくてごめんなさい。
970 :
help me :2008/12/03(水) 17:16:38
おおレスにきずきませんでしたありがとうございます!
971 :
デフォルトの名無しさん :2008/12/03(水) 17:22:50
fgetcを使った例は、データにEOFが含まれているときに失敗してしまう。 #include <stdlib.h> #include <stdio.h> #include <malloc.h> #include <sys/types.h> #include <sys/stat.h> int main(void){ FILE *fin; struct stat st; char *buf; size_t i; stat("test.txt", &st); buf = (char *)malloc(st.st_size); fin = fopen("test.txt", "rb"); fread(buf, st.st_size, 1, fin); fclose(fin); for(i = 0; i < st.st_size; i++){ printf("%02X ", buf[i]); if (i % 8 == 7) puts(""); } free(buf); return 0; }
>>971 >ファイルの先頭から終端(EOF)まで、
って仕様なんだからEOF以降を処理しちゃいかんよ
>>971 一般的にはそうだろうが
> ファイルの先頭から終端(EOF)まで
と出題されてる。
データに EOF が含まれてる場合とかあるの?
>>929 たすかりました。本当にありがとうございました!
>>975 >(2)データは下図のように各支店の売上を管理する配列を用意し,
「下図」とやらを見せてくれ
>>855 本当に有り難う御座いました。
大変助かりました。
>>914 btree_print の部分(実行例のような出力)以外のところはできてるけど
[1] 授業単元: プログラミング演習1 [2] 問題文(含コード&リンク):3次関数f(x)=x(x-a)(x-b)とx軸、および直線 x=0とx=c(c>0)とで囲まれる部分の面積の近似値を求めるプログラミングを 次のように書け。 (1)定数a,bおよびcを整数データとして標準入力から入力する。 (2)区間[0,c]をn等分して、その分点を順にx0=0,x1,x2,…xn=c,分点の間隔を Δx=c/nとして、求める面積Σn k=1 f(xk)Δxで計算する。nは1000とし、記号定数N として定義せよ。 (3)f(xk)を計算する部分を関数にする。変数xkと関数値f(xk)はdoubleとして扱うこと。 [3] 環境 [3.1] OS: CentOS5 [3.2] コンパイラ名とバージョン: gcc バージョンは不明 [3.3] 言語: Cのみ [4] 期限: [2008年12月04日20:00まで] [5] その他の制限: 特になし
>>971 「データにEOFが含まれている」とはどういう意味ですか?
EOF って具体的にはどんなデータですか?
>>981 0x1Aだったけな・・・が、EoFの文字コードだったはず。
EoFを消さないで末尾から追記するとか特殊な事もあるから
>>982 んー、
>>971 は "rb" でオープンしているのだから、 0x1a を EOF として解釈するのはどうかと思うのですが。テキストモードならば
一つの考え方として理解できます。
>>982 EOF は処理系依存だろ
int i = EOF;
を cpp にかけると
int i = (-1);
になるぞ
流石変態言語
おまえらの話てるEOFはそれぞれ別のもんだろ
毎回のテンプレ無視すみません(xx; 今回も課題のアドバイスをいただきたいのですが… 課題内容は以下の通りです。 「関数へのポインタを用いて、コマンドライン入力に応じて計算を行うプログラムを作成せよ。 関数は加減乗除の他に0を返す関数otherを定義し、それぞれの関数にIDを割り当て、入力を簡素化すること。」 連スレになってしまいますが、自作プログラムを貼っておきます。 whileループに入らないところが解決できません… #include<stdio.h> #include<stdlib.h> #include<string.h> float addition(int a, int b) {return (a + b);} float subscription(int a, int b) {return (a - b);} float multiplication(int a, int b) {return (a * b);} float division(int a, int b) {return (a / b);} float other(int a, int b) {return 0;} int main(int argc, char *argv[]){ float (*pfunc)(int a, int b); int pa, pb, i = 1; char *funcname[1]; printf("(1) addition\n(2) subscription\n(3) multiplication\n(4) division\n上記以外 other\n\n"); printf("実行する演算の番号と2つの引数を入力して下さい : ");
while(i < argc){ pa = atoi(argv[i]); if(argv[i] == 1){ pfunc = addition; funcname[1] = "addition"; } else if(argv[i] == 2){ pfunc = subscription; funcname[1] = "subscription"; } else if(argv[i] == 3){ pfunc = multiplication; funcname[1] = "multiplication"; } else if(argv[i] == 4){ pfunc = division; funcname[1] = "division"; } else{ pfunc = other; funcname[1] = "other"; } pa = atoi(argv[i + 1]); pb = atoi(argv[i + 2]); printf("%s(%d, %d) = %d\n\n\n", funcname[1], pa, pb, pfunc(pa, pb)); printf("実行する演算の番号と2つの引数を入力して下さい : "); i += 3; } return 0; }
>>983 > 0x1a を EOF として解釈するのはどうかと思う
>>971 のどこにそのような処理が?
>>988 おまw
書き込む前にテンプレ違反してること分かってんなら従いなよww
>>980 まちがってたらごめんね
#include <stdio.h>
#include <math.h>
#define n 1000
double f(double x, int a, int b) { return x * (x - a) * (x - b); }
int main(void)
{
double answer = 0.0, xk;
int a, b, c;
int i;
printf("input a: "); scanf("%d", &a);
printf("input b: "); scanf("%d", &b);
printf("input c: "); scanf("%d", &c);
for (i = 0; i < n; i++) {
xk = (double)c * i / n;
answer += fabs(f(xk, a, b)) * ((double)c / n);
}
printf("f(x) = x(x - %d)(x - %d)\nx = %d\n", a, b, c);
printf("\nAnswer: %f\n", answer);
return 0;
}
>>988 コマンドライン入力をしていないに3兆ジンバブエドル
>>988 コマンドライン引数っぽさと
コマンドラインからの標準入力っぽさが両方見えるんだがどっちなん?
>>988 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
float addition(int a, int b) {return (a + b);}
float subscription(int a, int b) {return (a - b);}
float multiplication(int a, int b) {return (a * b);}
float division(int a, int b) {return (a / b);}
float other(int a, int b) {return 0;}
float (*pfunc[])(int a, int b) = {other, addition,
subscription, multiplication,
division};
int main(){
int ope, a, b, f;
char *funcname[] = {"other", "addition", "subscription",
"multiplication", "division"};
printf("(1) addition\n(2) subscription\n(3) "
"multiplication\n(4) division\n上記以外 other\n\n");
while(1) {
printf("実行する演算の番号と2つの引数を入力して下さい : ");
f = scanf("%d %d %d", &ope, &a, &b);
if (f != 3) {
puts("入力おかしいです");
}
if (ope < 0 || 4 < ope )
ope = 0;
printf("%s(%d, %d) = %f\n\n\n", funcname[ope], a, b,
pfunc[ope](a, b));
}
return 0;
}
適当に脳内補完でお送りします
996 :
980 :2008/12/03(水) 22:14:23
>>992 これで大丈夫です。
迅速なレスありがとうございました。
[1] 授業単元: プログラミング入門演習 [2] 問題文:生年月日から今日までの経過日数計算簡易プログラム 誕生日と今日の日付を西暦・月・日の順にスペースで区切りながら入力。 誕生日が今日の日付より後になっていた場合はエラーメッセージを表示する。 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語: C [4] 期限: 12月5日(金) [5] その他:日数計算のとこはすでに出来ています。 エラーメッセージ表示のとこの条件がわかりません>< どなたかお願いします!
>>991 反省のために青汁でも飲んでおきます。いけない子ですみません…
>>993 ,
>>994 ,
>>995 「問題はこんな感じ」で書いたので、多分問題が変なのだと思います。
書きたかったのは、要するにコマンドライン引数を用いよ、ということだったのですが…
実行例としては、例えば123 * 456を計算したい場合は、「3 123 456」と入力する、という感じです。
もう次スレに移るようなので、頑張って自己解決の道を模索していきます。
ありがとうございました(^^
>>998 int main(int argc, char *argv[]){
char aNumBf[][10];
switch(atoi(argv[0])){
hoge.exe 3 123 456 と、入力してるの? なんか、 hoge.exe 3 123 456 と、分けてそうに思うんだけどせんげっと
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。